class Dbee::Dsl::Association

The main logic that can take input from model association declaration and turn it into usable information.

Attributes

constant_resolver[R]
inflector[R]
name[R]
on_class_name[R]
opts[R]

Public Class Methods

new(on_class_name, inflector, name, opts = {}) click to toggle source
# File lib/dbee/dsl/association.rb, line 17
def initialize(on_class_name, inflector, name, opts = {})
  raise ArgumentError, 'on_class_name is required'  if on_class_name.to_s.empty?
  raise ArgumentError, 'inflector is required'      unless inflector
  raise ArgumentError, 'name is required'           if name.to_s.empty?

  @on_class_name     = on_class_name
  @inflector         = inflector
  @name              = name.to_s
  @opts              = opts || {}
  @constant_resolver = ConstantResolver.new

  freeze
end

Public Instance Methods

constraints() click to toggle source
# File lib/dbee/dsl/association.rb, line 35
def constraints
  opts[:constraints] || []
end
model_constant() click to toggle source
# File lib/dbee/dsl/association.rb, line 31
def model_constant
  constant_resolver.constantize(class_name)
end

Private Instance Methods

class_name() click to toggle source
# File lib/dbee/dsl/association.rb, line 43
def class_name
  opts[:model] || relative_class_name
end
relative_class_name() click to toggle source

This will automatically prefix the name of the module within the current classes hierarchy. If the class does not happen to be in the same namespace then it needs to be explicitly set in the association using 'model' option.

# File lib/dbee/dsl/association.rb, line 50
def relative_class_name
  (on_class_name.split('::')[0...-1] + [inflector.classify(name)]).join('::')
end