class ActiveAdmin::AbstractViewFactory
def self.register(view_hash)
def self.register(view_hash) view_hash.each do |view_key, view_class| @@default_views[view_key] = view_class end end
def [](key)
def [](key) get_view_for_key(key) end
def []=(key, value)
def []=(key, value) set_view_for_key(key, value) end
def default_for(key)
def default_for(key) @@default_views[key.to_sym] end
def get_view_for_key(key)
def get_view_for_key(key) @views[key.to_sym] || @@default_views[key.to_sym] end
def has_key?(key)
def has_key?(key) @views.has_key?(key.to_sym) || @@default_views.has_key?(key.to_sym) end
def initialize
def initialize @views = {} end
def key_from_method_name(method)
def key_from_method_name(method) method.to_s.gsub('=', '').to_sym end
def method_missing(method, *args)
def method_missing(method, *args) key = key_from_method_name(method) if has_key?(key) if method.to_s.include?('=') self.class_eval <<-EOS def #{key}=(value) set_view_for_key(:#{key}, value) end EOS else self.class_eval <<-EOS def #{key} get_view_for_key(:#{key}) end EOS end self.send(method, *args) else super end end
def register(view_hash)
:another_view => OtherViewClass
factory.register :my_view => SomeClass,
You can setup many at the same time:
factory.register :my_view => SomeViewClass
factory = AbstractViewFactory.new
eg:
Register a new view key with the view factory
def register(view_hash) view_hash.each do |view_key, view_class| @views[view_key] = view_class end end
def respond_to?(method)
def respond_to?(method) key = key_from_method_name(method) if has_key?(key) true else super end end
def set_view_for_key(key, view)
def set_view_for_key(key, view) @views[key.to_sym] = view end