module ArMemoization::ForeignMethods

Public Instance Methods

belongs_to_memoized(association_name, scope = nil, **options) click to toggle source
# File lib/ar_memoization/foreign_methods.rb, line 3
def belongs_to_memoized(association_name, scope = nil, **options)
  belongs_to(association_name, scope, options)
  reflection = reflect_on_association(association_name)

  class_eval %Q{
    def #{association_name}
      unless association(:#{association_name}).target
        obj = #{reflection.class_name}.find_memo(#{reflection.foreign_key})
        association(:#{association_name}).writer(obj)
      end
      association(:#{association_name}).target
    end
  }
end
where_memoized(association_name, method_name = nil, &block) click to toggle source

def has_many_memoized(association_name, scope = nil, **options, &extension) end

# File lib/ar_memoization/foreign_methods.rb, line 24
def where_memoized(association_name, method_name = nil, &block)
  reflection = reflect_on_association(association_name)
  memos = reflection.class_name.constantize.all_memos

  foreign_keys = case
    when method_name
      memos.select(&method_name)
    when block_given?
      memos.select(&block)
    else
      []
    end.map(&:id)

  where(reflection.foreign_key => foreign_keys)
end