module StringEnumerate::Models::ClassMethods

Public Instance Methods

enumerate(*fields) click to toggle source
# File lib/string_enumerate/models.rb, line 10
def enumerate(*fields)
  set_enumerate_fields fields
  before_validation :set_enum_fields
end
enumeration_key_by_index(field, index) click to toggle source
# File lib/string_enumerate/models.rb, line 62
def enumeration_key_by_index(field, index)
  enumeration_labels(field).to_a[index.to_i].first
end
enumeration_label_by_index(field, index) click to toggle source
# File lib/string_enumerate/models.rb, line 66
def enumeration_label_by_index(field, index)
  enumeration_labels(field).to_a[index.to_i].last
end
enumeration_labels(field) click to toggle source
# File lib/string_enumerate/models.rb, line 51
def enumeration_labels(field)
  if (res = MODELS[name.underscore] && MODELS[name.underscore][field.to_s.pluralize])
    return res
  end

  raise(
    "Please set list of values in config/model.yml
    for model '#{name.underscore}' with key '#{field.to_s.pluralize}'"
  )
end
set_enumerate_fields(fields) click to toggle source
# File lib/string_enumerate/models.rb, line 15
def set_enumerate_fields(fields) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Naming/AccessorMethodName
  enumerate_fields = class_variable_get(:@@enumerate_fields) rescue nil # rubocop:disable Style/RescueModifier
  enumerate_fields ||= {}.with_indifferent_access

  enumerate_fields[name.underscore] ||= {}

  fields.each do |field|
    if field.is_a?(Hash)
      (prefix = field[:prefix]) || (suffix = field[:suffix])
      set_default = field[:set_default]
      field = field[:field]
    else
      prefix = nil
      suffix = nil
      set_default = nil
    end

    enumeration_labels(field).each_with_object(prepared_labels = {}) do |k|
      key = k.is_a?(Array) ? k.first : k
      prepared_labels[key] = key
    end

    enumerate_fields[name.underscore][field] = {
      field => prepared_labels,
      _prefix: prefix,
      _suffix: suffix
    }

    enum enumerate_fields[name.underscore][field]

    enumerate_fields[name.underscore][field][:set_default] = set_default
  end

  class_variable_set :@@enumerate_fields, enumerate_fields
end