Sha256: 63128c7971e03d0bce695ca705bb24852b46b80e82f8011fedd1183a43279f27

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

class Customization
  extend EnumerateIt

  attr_reader :state, :model

  attr_writer :customization_data_source

  def initialize(state, model, options = {})
    @state = state
    @model = model
    @source = options[:source]
  end

  has_enumeration_for :model, with: CustomizationModel

  def to_s
    "#{state} - #{model_humanize}"
  end

  def data
    @data ||= load_data
  end

  private

  def load_data
    return [] unless data_hash
    data_hash.map do |data, attributes|
      customization_data(attributes.merge(data: data))
    end
  end

  def data_hash
    load_yaml_files['custom_fields'][state.downcase][model]
  rescue NoMethodError
    []
  end

  def load_yaml_files
    sources.inject({}) { |h, file| h.deep_merge!(YAML.load_file(file)) }
  end

  def customization_data(params)
    customization_data_source.new(params)
  end

  def customization_data_source
    @customization_data_source ||= CustomizationDatum
  end

  def sources
    @source.present? ? [@source] : Dir[Rails.root.join('config/custom_fields/**/*.yml')]
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
unico-training-7.8.0 app/models/customization.rb