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
# 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