Class/Module Index [+]

Quicksearch

Sinatra::Rabbit::SubCollection

Attributes

parent[RW]

Public Class Methods

new(parent, name, opts={}, &block) click to toggle source
# File lib/sinatra/rabbit.rb, line 331
def initialize(parent, name, opts={}, &block)
  self.parent = parent
  super(name, &block)
end

Public Instance Methods

generate() click to toggle source
# File lib/sinatra/rabbit.rb, line 364
def generate
  operations.values.reject { |op| op.member }.each { |o| o.generate }
  operations.values.select { |op| op.member }.each { |o| o.generate }
  app = ::Sinatra::Application
  collname = name # Work around Ruby's weird scoping/capture
  app.send(:define_method, "#{parent.name.to_s}_#{name.to_s.singularize}_url") do |id, subid|
    api_url_for "#{collname}/#{id}/#{subid}", :full
  end
  if index_op = operations[:index]
    app.send(:define_method, "#{parent.name.to_s}_#{name}_url") do
      api_url_for index_op.path.gsub(/\/\?$/,''), :full
    end
  end
end
operation(name, opts = {}, &block) click to toggle source
# File lib/sinatra/rabbit.rb, line 336
def operation(name, opts = {}, &block)
  if @operations.keys.include?(name)
    raise DuplicateOperationException::new(500, "DuplicateOperation", "Operation #{name} is already defined", [])
  end
  # Preserve self as local variable to workaround Ruby namespace
  # weirdness
  c = self
  path_generator = Proc.new do |obj|
    if obj.member?
      if obj.standard?
        "#{parent.name}/:#{parent.name.to_s.singularize}/:#{c.name.to_s.singularize}"
      else
        "#{parent.name}/:#{parent.name.to_s.singularize}/:#{c.name.to_s.singularize}/#{name}"
      end
    else
      if obj.form?
        "#{parent.name}/:id/:#{parent.name.to_s.singularize}/#{obj.name}"
      else
        "#{parent.name}/:#{parent.name.to_s.singularize}"
      end
    end
  end
  opts.merge!({
    :path_generator => path_generator
  })
  @operations[name] = Operation.new(self, name, opts, &block)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.