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.
22 23 24 25 26 27 28 29 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 22 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.
19 20 21 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 19 def model @model end |
#options ⇒ Object (readonly)
Returns the value of attribute options.
20 21 22 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 20 def @options end |
#target_attribute ⇒ Object
Returns the value of attribute target_attribute.
19 20 21 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 19 def target_attribute @target_attribute end |
Instance Method Details
#link_models(models) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 31 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
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/advanced_ar/arbitrary_prefetch.rb', line 47 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 |