Class: Merb::Controller::Aggregator
- Inherits:
-
Object
- Object
- Merb::Controller::Aggregator
- Defined in:
- lib/merb_component/controller_ext.rb
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
-
#controller ⇒ Object
readonly
Returns the value of attribute controller.
-
#object ⇒ Object
readonly
Returns the value of attribute object.
-
#result ⇒ Object
readonly
Returns the value of attribute result.
Instance Method Summary collapse
-
#initialize(context, controller, &block) ⇒ Aggregator
constructor
A new instance of Aggregator.
- #key ⇒ Object
Constructor Details
#initialize(context, controller, &block) ⇒ Aggregator
Returns a new instance of Aggregator.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/merb_component/controller_ext.rb', line 103 def initialize(context, controller, &block) @context = context @controller = controller @agg_name = @context.controller_name.singular.intern model_class = Object.full_const_get(controller.name.singular) @object = @context.instance_variable_get("@#{@agg_name}") @scope = {} if @object relationship = model_class.relationships[@agg_name] key_names = relationship.child_key.map{|i| i.name} @scope = Hash[key_names.zip(@object.key)] if @object end @result = begin aggregators = Thread::current[:aggregators] ||= {} (aggregators[controller] ||= []).push(self) if model_class.respond_to?(:with_scope) model_class.send(:with_scope, @scope, &block) else block.call end ensure aggregators[controller].pop end end |
Instance Attribute Details
#context ⇒ Object (readonly)
Returns the value of attribute context.
101 102 103 |
# File 'lib/merb_component/controller_ext.rb', line 101 def context @context end |
#controller ⇒ Object (readonly)
Returns the value of attribute controller.
101 102 103 |
# File 'lib/merb_component/controller_ext.rb', line 101 def controller @controller end |
#object ⇒ Object (readonly)
Returns the value of attribute object.
101 102 103 |
# File 'lib/merb_component/controller_ext.rb', line 101 def object @object end |
#result ⇒ Object (readonly)
Returns the value of attribute result.
101 102 103 |
# File 'lib/merb_component/controller_ext.rb', line 101 def result @result end |
Instance Method Details
#key ⇒ Object
130 131 132 |
# File 'lib/merb_component/controller_ext.rb', line 130 def key @object || @agg_name end |