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
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
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