class Trestle::Admin::Builder

Public Class Methods

create(name, options={}, &block) click to toggle source
# File lib/trestle/admin/builder.rb, line 18
def self.create(name, options={}, &block)
  # Create admin subclass
  admin = Class.new(admin_class)
  admin.options = options

  # Define a constant based on the admin name
  scope = options[:scope] || Object
  scope.const_set("#{name.to_s.camelize}Admin", admin)

  # Define admin controller class
  # This is done using class_eval rather than Class.new so that the full
  # class name and parent chain is set when Rails' inherited hooks are called.
  admin.class_eval("class AdminController < #{controller.call.name}; end")

  # Set a reference on the controller class to the admin class
  controller = admin.const_get(:AdminController)
  controller.instance_variable_set("@admin", admin)

  admin.build(&block)
  admin.validate!

  admin
end
new(admin) click to toggle source
# File lib/trestle/admin/builder.rb, line 14
def initialize(admin)
  @admin, @controller = admin, admin.const_get(:AdminController)
end

Public Instance Methods

admin(&block) click to toggle source
# File lib/trestle/admin/builder.rb, line 67
def admin(&block)
  @admin.instance_eval(&block) if block_given?
  @admin
end
breadcrumb(label=nil, path=nil, &block) click to toggle source
controller(&block) click to toggle source
# File lib/trestle/admin/builder.rb, line 72
def controller(&block)
  @controller.class_eval(&block) if block_given?
  @controller
end
form(options={}, &block) click to toggle source
# File lib/trestle/admin/builder.rb, line 55
def form(options={}, &block)
  if block_given?
    admin.form = Form.new(options, &block)
  else
    admin.form = Form::Automatic.new(admin, options)
  end
end
hook(name, options={}, &block) click to toggle source
# File lib/trestle/admin/builder.rb, line 63
def hook(name, options={}, &block)
  admin.hooks.append(name, options, &block)
end
menu(*args, &block) click to toggle source
routes(&block) click to toggle source
# File lib/trestle/admin/builder.rb, line 77
def routes(&block)
  @admin.additional_routes << block
end
table(name_or_options={}, options={}, &block) click to toggle source
# File lib/trestle/admin/builder.rb, line 50
def table(name_or_options={}, options={}, &block)
  name, options = normalize_table_options(name_or_options, options)
  admin.tables[name] = Table::Builder.build(options, &block)
end

Protected Instance Methods

normalize_table_options(name, options) click to toggle source
# File lib/trestle/admin/builder.rb, line 92
def normalize_table_options(name, options)
  if name.is_a?(Hash)
    # Default index table
    name, options = :index, name
  end

  [name, options]
end