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 129 |
# 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 = {} relationship = model_class.relationships[@agg_name] if @object && relationship Merb.logger.debug [model_class, @agg_name].inspect 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
131 132 133 |
# File 'lib/merb_component/controller_ext.rb', line 131 def key @object || @agg_name end |