class Spyke::Associations::Builder

Public Class Methods

new(parent_class, name, type, options = {}) click to toggle source
# File lib/spyke/associations/builder.rb, line 4
def initialize(parent_class, name, type, options = {})
  @parent_class, @name, @type, @options = parent_class, name, type, options
end

Public Instance Methods

build(parent) click to toggle source
# File lib/spyke/associations/builder.rb, line 8
def build(parent)
  @type.new(klass, parent, @name, @options)
end
klass() click to toggle source
# File lib/spyke/associations/builder.rb, line 12
def klass
  @klass ||= custom_class || compute_class(@name)
end

Private Instance Methods

compute_class(type_name) click to toggle source

github.com/rails/rails/blob/70ac072976c8cc6f013f0df3777e54ccae3f4f8c/activerecord/lib/active_record/inheritance.rb#L132-L150

# File lib/spyke/associations/builder.rb, line 23
def compute_class(type_name)
  parent_name = @parent_class.to_s
  type_name = type_name.to_s.classify

  candidates = []
  parent_name.scan(/::|$/) { candidates.unshift "#{$`}::#{type_name}" }
  candidates << type_name

  candidates.each do |candidate|
    constant = ActiveSupport::Dependencies.safe_constantize(candidate)
    return constant if candidate == constant.to_s
  end
  raise NameError.new("uninitialized constant #{candidates.first}", candidates.first)
end
custom_class() click to toggle source
# File lib/spyke/associations/builder.rb, line 18
def custom_class
  @options[:class_name].constantize if @options[:class_name]
end