module ActiveRecord::Associations::ClassMethods
Public Class Methods
included(base)
click to toggle source
# File lib/belongs_to_one_of.rb, line 70 def self.included(base) base.extend(ClassMethods) end
Public Instance Methods
belongs_to_one_of( resource_key, raw_possible_resource_types, include_type_column: false )
click to toggle source
# File lib/belongs_to_one_of.rb, line 15 def belongs_to_one_of( resource_key, raw_possible_resource_types, include_type_column: false ) resource_type_field = "#{resource_key}_type" unless [true, false].include?(include_type_column) resource_type_field = include_type_column end config_model = BelongsToOneOfModel.new( resource_key, raw_possible_resource_types, include_type_column, resource_type_field, self, ) # validators define_method "belongs_to_exactly_one_#{resource_key}" do config_model.validate_exactly_one_resource(self) end define_method "belongs_to_at_most_one_#{resource_key}" do config_model.validate_at_most_one_resource(self) end if include_type_column define_method "#{resource_type_field}_matches_#{resource_key}" do config_model.validate_correct_resource_type(self) end end # setters define_method "#{resource_key}=" do |resource| config_model.resource_setter(resource, self) end # getters define_method resource_key do config_model.resource_getter(self) end define_method "#{resource_key}_id" do config_model.resource_id_getter(self) end unless include_type_column define_method "#{resource_key}_type" do config_model.resource_type_getter(self) end end end