Module: RailsAttrEnum::Enum::ClassMethods

Defined in:
lib/rails_attr_enum/enum.rb

Instance Method Summary collapse

Instance Method Details

#add(entry) ⇒ Object



17
18
19
20
21
22
# File 'lib/rails_attr_enum/enum.rb', line 17

def add(entry)
  const_name = entry[:key].to_s.upcase
  const_set(const_name, entry[:value])
  const_set("#{const_name}_LABEL", entry[:label])
  @entries << entry
end

#attr_nameObject



36
# File 'lib/rails_attr_enum/enum.rb', line 36

def attr_name; @attr_name end

#get_key(value) ⇒ Object



32
33
34
# File 'lib/rails_attr_enum/enum.rb', line 32

def get_key(value)
  get_from_entries(:key, value)
end

#get_label(value) ⇒ Object



28
29
30
# File 'lib/rails_attr_enum/enum.rb', line 28

def get_label(value)
  get_from_entries(:label, value)
end

#init_enum(attr_name) ⇒ Object



10
11
12
13
14
15
# File 'lib/rails_attr_enum/enum.rb', line 10

def init_enum(attr_name)
  return if @init
  @attr_name = attr_name
  @entries = []
  @init = true
end

#keysObject



37
# File 'lib/rails_attr_enum/enum.rb', line 37

def keys;   mapped(:key) end

#label_value_pairsObject



24
25
26
# File 'lib/rails_attr_enum/enum.rb', line 24

def label_value_pairs
  labels.zip values
end

#labelsObject



39
# File 'lib/rails_attr_enum/enum.rb', line 39

def labels; mapped(:label) end

#to_h(options = {}) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/rails_attr_enum/enum.rb', line 41

def to_h(options = {})
  default_to_include = [:key, :value, :label]

  [:only, :except].each do |key|
    if options.include?(key)
      if options[key].is_a?(Symbol)
        options[key] = [options[key]]
      elsif options[key].empty?
        options[key] = nil
      end

      unless options[key].nil? || (options[key] - default_to_include).empty?
        raise 'Unknown keys for enum'
      end
    end
  end

  to_include =
    if !options[:only].nil?
      default_to_include & options[:only]
    elsif !options[:except].nil?
      default_to_include - options[:except]
    else
      default_to_include
    end

  builder =
    if to_include.size == 1
      to_include = to_include.first
      proc { |entry| [entry.const_name, entry.send(to_include)]}
    else
      proc do |entry|
        value = Hash[entry.to_h.select { |(key, _)| to_include.include?(key) }]
        [entry.const_name, value]
      end
    end

  Hash[@entries.map(&builder)]
end

#to_json(options = {}) ⇒ Object



81
82
83
# File 'lib/rails_attr_enum/enum.rb', line 81

def to_json(options = {})
  to_h(options).to_json
end

#valuesObject



38
# File 'lib/rails_attr_enum/enum.rb', line 38

def values; mapped(:value) end