module RailsAttrEnum::Enum::ClassMethods
Public Instance Methods
add(entry)
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 19 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_name()
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 45 def attr_name; @attr_name end
get_key(value)
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 41 def get_key(value) get_from_entries(:key, value) end
get_label(value)
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 37 def get_label(value) get_from_entries(:label, value) end
init_enum(attr_name)
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 12 def init_enum(attr_name) return if @init @attr_name = attr_name @entries = [] @init = true end
keys()
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 46 def keys; mapped(:key) end
label_value_pairs(*keys)
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 26 def label_value_pairs(*keys) if keys.empty? labels.zip(values) else @entries.reduce([]) do |arr, entry| arr << [entry.label, entry.value] if keys.include?(entry.key) arr end end end
labels()
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 48 def labels; mapped(:label) end
to_h(options = {})
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 50 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 = {})
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 90 def to_json(options = {}) to_h(options).to_json end
values()
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 47 def values; mapped(:value) end
Private Instance Methods
get_from_entries(key, value)
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 96 def get_from_entries(key, value) @entries.find { |hash| hash[:value] == value }.try(:[], key) end
mapped(key)
click to toggle source
# File lib/rails_attr_enum/enum.rb, line 100 def mapped(key) @entries.map { |hash| hash[key] } end