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