Sha256: a6f790f81be52b68ad4cd53c192d9668e891fedc25695f78e72db63f236a83ec
Contents?: true
Size: 1.54 KB
Versions: 4
Compression:
Stored size: 1.54 KB
Contents
require "findable/associations/utils" module Findable module Associations extend ActiveSupport::Concern module ClassMethods def has_many(*args) name, options = Utils.parse_args(args) model = Utils.model_for(name, collection: true, **options) foreign_key = options[:foreign_key].presence || model_name.name.foreign_key define_method(name) do model.where(foreign_key => public_send(self.class.primary_key)) end end def has_one(*args) name, options = Utils.parse_args(args) model = Utils.model_for(name, **options) foreign_key = options[:foreign_key].presence || model_name.name.foreign_key define_method(name) do model.find_by(foreign_key => public_send(self.class.primary_key)) end end def belongs_to(*args) name, options = Utils.parse_args(args) model = Utils.model_for(name, safe: true, **options) foreign_key = options[:foreign_key].presence || name.to_s.foreign_key if options[:polymorphic] define_method(name) do public_send("#{name}_type").constantize.find(public_send(foreign_key)) end else define_field(foreign_key) define_method(name) do model.find_by(model.primary_key => public_send(foreign_key)) end define_method("#{name}=") do |value| attributes[foreign_key.to_sym] = value ? value.public_send(model.primary_key) : nil end end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
findable-0.1.3 | lib/findable/associations.rb |
findable-0.1.2 | lib/findable/associations.rb |
findable-0.1.1 | lib/findable/associations.rb |
findable-0.1.0 | lib/findable/associations.rb |