Class: Sequel::Plugins::AssociationProxies::AssociationProxy
- Inherits:
- BasicObject
- Defined in:
- lib/sequel/plugins/association_proxies.rb
Overview
A proxy for the association. Calling an array method will load the associated objects and call the method on the associated object array. Calling any other method will call that method on the association’s dataset.
Constant Summary collapse
- DEFAULT_PROXY_TO_DATASET =
          :nocov: 
- proc{|opts| !array.respond_to?(opts[:method])} 
Instance Method Summary collapse
- 
  
    
      #initialize(instance, reflection, proxy_argument, &proxy_block)  ⇒ AssociationProxy 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    Set the association reflection to use, and whether the association should be reloaded if an array method is called. 
- 
  
    
      #method_missing(meth, *args, &block)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Call the method given on the array of associated objects if the method is an array method, otherwise call the method on the association’s dataset. 
Methods inherited from BasicObject
Constructor Details
#initialize(instance, reflection, proxy_argument, &proxy_block) ⇒ AssociationProxy
Set the association reflection to use, and whether the association should be reloaded if an array method is called.
| 85 86 87 88 89 90 | # File 'lib/sequel/plugins/association_proxies.rb', line 85 def initialize(instance, reflection, proxy_argument, &proxy_block) @instance = instance @reflection = reflection @proxy_argument = proxy_argument @proxy_block = proxy_block end | 
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &block) ⇒ Object
Call the method given on the array of associated objects if the method is an array method, otherwise call the method on the association’s dataset.
| 94 95 96 97 98 99 100 101 | # File 'lib/sequel/plugins/association_proxies.rb', line 94 def method_missing(meth, *args, &block) v = if @instance.model.association_proxy_to_dataset.call(:method=>meth, :arguments=>args, :block=>block, :instance=>@instance, :reflection=>@reflection, :proxy_argument=>@proxy_argument, :proxy_block=>@proxy_block) @instance.public_send(@reflection[:dataset_method]) else @instance.send(:load_associated_objects, @reflection, @proxy_argument, &@proxy_block) end v.public_send(meth, *args, &block) end |