class EacRubyUtils::Listable::List

Attributes

item[R]

Public Class Methods

new(lists, item, labels) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 8
def initialize(lists, item, labels)
  @lists = lists
  @item = item
  @values = build_values(labels)
  apply_constants
end

Public Instance Methods

each_value(&block) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 15
def each_value(&block)
  values.each(&block)
end
hash_keys_validate!(hash, error_class = ::StandardError) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 36
def hash_keys_validate!(hash, error_class = ::StandardError)
  hash.keys.each { |key| value_validate!(key, error_class) }
  hash
end
i18n_key() click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 41
def i18n_key
  "eac_ruby_utils.listable.#{class_i18n_key}.#{item}"
end
instance_value(instance) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 45
def instance_value(instance)
  v = instance.send(item)
  return @values[v] if @values.key?(v)

  raise "List value unkown: #{v} (Source: #{@lists.source}, Item: #{item})"
end
method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/eac_ruby_utils/listable/list.rb, line 27
def method_missing(name, *args, &block)
  list = find_list_by_method(name)
  list || super
end
options() click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 23
def options
  @values.values.map { |v| [v.label, v.value] }
end
respond_to_missing?(name, include_all = false) click to toggle source
Calls superclass method
# File lib/eac_ruby_utils/listable/list.rb, line 32
def respond_to_missing?(name, include_all = false)
  find_list_by_method(name) || super
end
value_valid?(value) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 52
def value_valid?(value)
  values.include?(value)
end
value_validate!(value, error_class = ::StandardError) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 56
def value_validate!(value, error_class = ::StandardError)
  return value if value_valid?(value)

  raise(error_class, "Invalid value: \"#{value}\" (Valid: #{values_to_s})")
end
values() click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 19
def values
  @values.values.map(&:value)
end
values_to_s() click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 62
def values_to_s
  values.map { |v| "\"#{v}\"" }.join(', ')
end

Private Instance Methods

apply_constants() click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 83
def apply_constants
  @values.values.each do |v|
    @lists.source.const_set(v.constant_name, v.value)
  end
end
build_values(labels) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 89
def build_values(labels)
  vs = {}
  parse_labels(labels).each do |value, key|
    v = Value.new(self, value, key)
    vs[v.value] = v
  end
  vs
end
class_i18n_key() click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 68
def class_i18n_key
  @lists.source.name.underscore.to_sym
end
constants() click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 79
def constants
  labels.each_with_index.map { |v, i| ["#{item.upcase}_#{v.upcase}", values[i]] }
end
find_list_by_method(method) click to toggle source
# File lib/eac_ruby_utils/listable/list.rb, line 72
def find_list_by_method(method)
  @values.values.each do |v|
    return v if method.to_s == "value_#{v.key}"
  end
  nil
end