Class: EacRubyUtils::Listable::List

Inherits:
Object
  • Object
show all
Defined in:
lib/eac_ruby_utils/listable/list.rb

Direct Known Subclasses

IntegerList, StringList, SymbolList

Constant Summary collapse

BLANK_VALUE =
nil
BLANK_KEY =
:__blank

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lists, item, labels) ⇒ List

Returns a new instance of List.



13
14
15
16
17
18
# File 'lib/eac_ruby_utils/listable/list.rb', line 13

def initialize(lists, item, labels)
  @lists = lists
  @item = item
  @values = build_values(labels)
  apply_constants
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object



44
45
46
47
# File 'lib/eac_ruby_utils/listable/list.rb', line 44

def method_missing(name, *args, &block)
  list = find_list_by_method(name)
  list || super
end

Instance Attribute Details

#itemObject (readonly)

Returns the value of attribute item.



11
12
13
# File 'lib/eac_ruby_utils/listable/list.rb', line 11

def item
  @item
end

Instance Method Details

#blank_valueObject



20
21
22
# File 'lib/eac_ruby_utils/listable/list.rb', line 20

def blank_value
  @blank_value ||= ::EacRubyUtils::Listable::Value.new(self, BLANK_VALUE, BLANK_KEY, false)
end

#each_value(&block) ⇒ Object



24
25
26
# File 'lib/eac_ruby_utils/listable/list.rb', line 24

def each_value(&block)
  values.each(&block)
end

#hash_keys_validate!(hash, error_class = ::StandardError) ⇒ Object



53
54
55
56
# File 'lib/eac_ruby_utils/listable/list.rb', line 53

def hash_keys_validate!(hash, error_class = ::StandardError)
  hash.each_key { |key| value_validate!(key, error_class) }
  hash
end

#i18n_keyObject



58
59
60
# File 'lib/eac_ruby_utils/listable/list.rb', line 58

def i18n_key
  "eac_ruby_utils.listable.#{class_i18n_key}.#{item}"
end

#instance_value(instance) ⇒ EacRubyUtils::Listable::Value?



63
64
65
66
67
68
69
70
# File 'lib/eac_ruby_utils/listable/list.rb', line 63

def instance_value(instance)
  v = instance.send(item)
  return blank_value if v.blank?
  return @values[v] if @values.key?(v)

  raise "List value unkown: \"#{v}\" (Source: #{@lists.source}, Item: #{item}, Instance: " \
    "#{instance.to_debug}, Values: #{@values.keys})"
end

#optionsObject



36
37
38
# File 'lib/eac_ruby_utils/listable/list.rb', line 36

def options
  @values.values.map(&:to_option)
end

#options_with_blankObject



40
41
42
# File 'lib/eac_ruby_utils/listable/list.rb', line 40

def options_with_blank
  [blank_value.to_option] + options
end

#respond_to_missing?(name, include_all = false) ⇒ Boolean

Returns:



49
50
51
# File 'lib/eac_ruby_utils/listable/list.rb', line 49

def respond_to_missing?(name, include_all = false)
  find_list_by_method(name) || super
end

#value_valid?(value) ⇒ Boolean

Returns:



72
73
74
# File 'lib/eac_ruby_utils/listable/list.rb', line 72

def value_valid?(value)
  values.include?(value)
end

#value_validate!(value, error_class = ::StandardError) ⇒ Object

Raises:

  • (error_class)


76
77
78
79
80
# File 'lib/eac_ruby_utils/listable/list.rb', line 76

def value_validate!(value, error_class = ::StandardError)
  return value if value_valid?(value)

  raise(error_class, "Invalid value: \"#{value}\" (Valid: #{values_to_s})")
end

#valuesObject



28
29
30
# File 'lib/eac_ruby_utils/listable/list.rb', line 28

def values
  @values.values.map(&:value)
end

#values_to_sObject



82
83
84
# File 'lib/eac_ruby_utils/listable/list.rb', line 82

def values_to_s
  values.map { |v| "\"#{v}\"" }.join(', ')
end

#values_with_blankObject



32
33
34
# File 'lib/eac_ruby_utils/listable/list.rb', line 32

def values_with_blank
  [blank_value.value] + values
end