class StaticRecord::HasStaticRecord
Provides has_static_record when included
Public Class Methods
define_on(klass, name, options)
click to toggle source
# File lib/static_record/migrations/has_static_record.rb, line 4 def self.define_on(klass, name, options) new(klass, name, options).define end
new(klass, name, options)
click to toggle source
# File lib/static_record/migrations/has_static_record.rb, line 8 def initialize(klass, name, options) @klass = klass @name = name @options = options end
Public Instance Methods
define()
click to toggle source
# File lib/static_record/migrations/has_static_record.rb, line 14 def define define_getter define_setter end
Private Instance Methods
define_getter()
click to toggle source
# File lib/static_record/migrations/has_static_record.rb, line 21 def define_getter name = @name options = @options @klass.send :define_method, @name do record_type = send(:"#{name}_static_record_type") return nil unless record_type options[:class_name] ||= name.to_s.camelize # eager loading may be disabled, initialize parent class superklass = options[:class_name].constantize superklass.find_by(klass: record_type) end end
define_setter()
click to toggle source
# File lib/static_record/migrations/has_static_record.rb, line 35 def define_setter name = @name options = @options @klass.send :define_method, "#{@name}=" do |static_record| options[:class_name] ||= name.to_s.camelize superklass = static_record.class.superclass unless superklass.to_s == options[:class_name] err = "Record must be an instance of #{options[:class_name]}, got #{superklass}" raise ClassError, err end unless superklass.pkey err = "No primary key has been defined for #{superklass.class}" raise NoPrimaryKey, err end send(:"#{name}_static_record_type=", static_record.class.name) end end