module Birdie::Controller

Attributes

builder_klass[RW]
exec_block[RW]

Public Class Methods

extended(base) click to toggle source
# File lib/birdie/controller.rb, line 9
def self.extended(base)
  base.send(:include, Lotus::Controller)
end

Public Instance Methods

builder(klass) click to toggle source
# File lib/birdie/controller.rb, line 13
def builder(klass)
  @builder_klass = klass
end
create_action(&block) click to toggle source
# File lib/birdie/controller.rb, line 25
def create_action(&block)
  define_action('Create', &block)
end
destroy_action(&block) click to toggle source
# File lib/birdie/controller.rb, line 33
def destroy_action(&block)
  define_action('Destroy', &block)
end
index_action(&block) click to toggle source
# File lib/birdie/controller.rb, line 17
def index_action(&block)
  define_action('Index', &block)
end
show_action(&block) click to toggle source
# File lib/birdie/controller.rb, line 21
def show_action(&block)
  define_action('Show', &block)
end
update_action(&block) click to toggle source
# File lib/birdie/controller.rb, line 29
def update_action(&block)
  define_action('Update', &block)
end

Private Instance Methods

action_block() click to toggle source
# File lib/birdie/controller.rb, line 47
def action_block
  Proc.new do
    class << self
      attr_accessor :builder_klass, :exec_block
    end

    def call(params)
      items = instance_eval(&self.class.exec_block)
      collection = self.class.builder_klass.new(items, context: self).serialize
      self.body = JSON.dump(collection)
    end

    def path_for(*args)
      Birdie::Application.app.router.path(*args)
    end
  end
end
call(params) click to toggle source
# File lib/birdie/controller.rb, line 53
def call(params)
  items = instance_eval(&self.class.exec_block)
  collection = self.class.builder_klass.new(items, context: self).serialize
  self.body = JSON.dump(collection)
end
define_action(name, &block) click to toggle source
# File lib/birdie/controller.rb, line 39
def define_action(name, &block)
  block ||= Proc.new{ [] }
  action(name, &action_block)
  const = self.const_get(name)
  const.exec_block = block
  const.builder_klass = @builder_klass
end
path_for(*args) click to toggle source
# File lib/birdie/controller.rb, line 59
def path_for(*args)
  Birdie::Application.app.router.path(*args)
end