class AssistSingleAssociation::Define

Attributes

klass[R]

Public Class Methods

new(klass) click to toggle source
# File lib/assist_single_association/define.rb, line 6
def initialize(klass)
  @klass = klass
end

Public Instance Methods

execute() click to toggle source
# File lib/assist_single_association/define.rb, line 10
def execute
  klass.reflections.each do |_relation_name, relation|
    next unless relation.is_a?(permit_class)
    relation.klass.defined_enums.each do |enum_name, val|
      val.keys.each do |key|
        define_association_methods(key: key, relation_name: relation.name, enum_name: enum_name)
      end
    end
  end
end

Private Instance Methods

define_association_methods(h = {}) click to toggle source
# File lib/assist_single_association/define.rb, line 27
def define_association_methods(h = {})
  klass.class_eval do
    define_method(:"build_#{h[:key]}_#{h[:relation_name]}") do |attributes = {}|
      send(:"build_#{h[:relation_name]}", { "#{h[:enum_name]}": h[:key], **attributes })
    end

    define_method(:"create_#{h[:key]}_#{h[:relation_name]}") do |attributes = {}|
      send(:"create_#{h[:relation_name]}", { "#{h[:enum_name]}": h[:key], **attributes })
    end
  end
end
permit_class() click to toggle source
# File lib/assist_single_association/define.rb, line 23
def permit_class
  @permit_class ||= ActiveRecord::Reflection::HasOneReflection
end