Skip to content

Instantly share code, notes, and snippets.

@emilebosch
Last active December 29, 2015 15:29
Show Gist options
  • Save emilebosch/fded961b7a7af0c3a111 to your computer and use it in GitHub Desktop.
Save emilebosch/fded961b7a7af0c3a111 to your computer and use it in GitHub Desktop.
How active admin works
#Dit is plumbing
class Active
@@resources = []
def self.register(type, &block)
resource = Resource.new(type, &block)
resource.register
@@resources << resource
end
def self.routes(r)
for a in @@resources
a.register_routes r
end
end
end
class Resource
def initialize(type, &block)
@type = type
@block = block
end
def type
@type
end
def controller_name
"#{@type.to_s.pluralize}Controller"
end
def controller_const
controller_name.constantize
end
def register_routes(routes)
resource_name = type.name.underscore.pluralize.to_sym
routes.resources resource_name
end
def register
Module.parent.send(:remove_const, controller_name) if Module.const_defined? controller_name
eval "class ::#{controller_name} < BaseController; end;"
controller_const.register(self)
instance_eval &@block
end
def controller(&block)
controller_const.class_eval(&block)
end
def params_permit!
puts "WOO"
end
end
# Dit is de DSL waar je utieindelijk mee moe werken
Active.register Comment do
params_permit!
controller do
def hello
end
end
end
Testapp::Application.routes.draw do
Active.routes(self)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment