Class: AdvancedAR::ArbitraryPrefetch::PrefetcherContext
- Inherits:
-
Object
- Object
- AdvancedAR::ArbitraryPrefetch::PrefetcherContext
- Defined in:
- lib/advanced_ar/arbitrary_prefetch.rb
Instance Attribute Summary collapse
-
#model ⇒ Object
Returns the value of attribute model.
-
#options ⇒ Object
readonly
Returns the value of attribute options.
-
#target_attribute ⇒ Object
Returns the value of attribute target_attribute.
Instance Method Summary collapse
-
#initialize(model, opts) ⇒ PrefetcherContext
constructor
A new instance of PrefetcherContext.
- #link_models(models) ⇒ Object
- #reflection ⇒ Object
Constructor Details
#initialize(model, opts) ⇒ PrefetcherContext
Returns a new instance of PrefetcherContext.
23 24 25 26 27 28 29 30 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 23 def initialize(model, opts) @options = opts @model = model @source_key = opts[:relation] @target_attribute = opts[:attribute] @queryset = opts[:queryset] @models = [] end |
Instance Attribute Details
#model ⇒ Object
Returns the value of attribute model.
20 21 22 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 20 def model @model end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
21 22 23 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 21 def @options end |
#target_attribute ⇒ Object
Returns the value of attribute target_attribute.
20 21 22 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 20 def target_attribute @target_attribute end |
Instance Method Details
#link_models(models) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 32 def link_models(models) Array(models).each do |m| @models << m # assoc = PrefetchAssociation.new(m, self, reflection) assoc = reflection.association_class.new(m, reflection) m.send(:association_instance_set, target_attribute, assoc) m.instance_eval <<-CODE, __FILE__, __LINE__ + 1 def #{target_attribute} association(:#{target_attribute}).reader end CODE end end |
#reflection ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 48 def reflection @reflection ||= begin queryset = @queryset source_refl = model.reflections[@source_key.to_s] scope = lambda { |*_args| qs = queryset qs = qs.merge(source_refl.scope_for(model.unscoped)) if source_refl.scope qs } ActiveRecord::Reflection.create( [:type], @target_attribute, scope, source_refl..merge( class_name: source_refl.class_name, inverse_of: nil ), model ) end end |