Module: Trax::Model::Mixins::CachedRelations::ClassMethods
- Defined in:
- lib/trax/model/mixins/cached_relations.rb
Instance Method Summary collapse
- #cached_belongs_to(relation_name, **options) ⇒ Object
- #cached_has_many(relation_name, **options) ⇒ Object
- #cached_has_one(relation_name, **options) ⇒ Object
Instance Method Details
#cached_belongs_to(relation_name, **options) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/trax/model/mixins/cached_relations.rb', line 10 def cached_belongs_to(relation_name, **) define_method("cached_#{relation_name}") do relation = self.class.reflect_on_association(relation_name) foreign_key = (relation.foreign_key || "#{relation.name}_id").to_sym params = { :id => self.__send__(foreign_key) }.merge() relation.klass.cached_find_by(**params) end define_method("clear_cached_#{relation_name}") do relation = self.class.reflect_on_association(relation_name) foreign_key = (relation.foreign_key || :"#{relation.name}_id").to_sym params = { :id => self.__send__(foreign_key) }.merge() relation.klass.clear_cached_find_by(**params) end end |
#cached_has_many(relation_name, **options) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/trax/model/mixins/cached_relations.rb', line 44 def cached_has_many(relation_name, **) define_method("cached_#{relation_name}") do relation = self.class.reflect_on_association(relation_name) foreign_key = :"#{relation.foreign_key}" params = {foreign_key => self.__send__(:id)}.merge() relation.klass.cached_where(**params) end define_method("clear_cached_#{relation_name}") do relation = self.class.reflect_on_association(relation_name) foreign_key = :"#{relation.foreign_key}" params = {foreign_key => self.__send__(:id)}.merge() relation.klass.clear_cached_where(**params) end end |
#cached_has_one(relation_name, **options) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/trax/model/mixins/cached_relations.rb', line 26 def cached_has_one(relation_name, **) define_method("cached_#{relation_name}") do relation = self.class.reflect_on_association(relation_name) foreign_key = (relation.foreign_key || "#{relation.name}_id").to_sym params = { foreign_key => self.__send__(:id) }.merge() params.merge!(relation.klass.instance_eval(&relation.scope).where_values_hash.symbolize_keys) if relation.scope relation.klass.cached_find_by(**params) end define_method("clear_cached_#{relation_name}") do relation = self.class.reflect_on_association(relation_name) foreign_key = (relation.foreign_key || :"#{relation.name}_id").to_sym params = { foreign_key => self.__send__(:id) }.merge() params.merge!(relation.klass.instance_eval(&relation.scope).where_values_hash.symbolize_keys) if relation.scope relation.klass.clear_cached_find_by(**params) end end |