Sha256: a3bc11e8f5c03c367a930abf865516c6e9c9f27280f600a4e0e70b4bf0e366ee

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

module Tramway::ApplicationForms::AssociationObjectHelpers
  def define_association_method(association, class_name)
    if class_name.is_a? Array
      define_polymorphic_association association
    else
      self.class.send(:define_method, "#{association}=") do |value|
        model.send "#{association}_id=", value
        model.send "#{association}=", class_name.find(value)
      end
    end
  end

  def define_polymorphic_association(association)
    self.class.send(:define_method, "#{association}=") do |value|
      if value.present?
        if association_class(value).nil?
          Tramway::Error.raise_error :tramway, :application_form, :initialize, :polymorphic_class_is_nil,
            association_name: association
        else
          model.send "#{association}=", association_class(value).find(value.split('_')[-1])
          send "#{association}_type=", association_class(value).to_s
        end
      end
    end
  end

  private

  def association_class(value)
    association_class_object = value.split('_')[0..-2].join('_').camelize
    association_class_object = association_class_object.constantize if association_class_object.is_a? String
    association_class_object
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
tramway-0.1.2 app/forms/tramway/application_forms/association_object_helpers.rb
tramway-0.1.1.1 app/forms/tramway/application_forms/association_object_helpers.rb
tramway-0.1.1 app/forms/tramway/application_forms/association_object_helpers.rb