class RailsAttrEnum::EnumAccumulator
Class to build up enum values
Attributes
entries[R]
validation_rules[R]
Public Class Methods
new()
click to toggle source
# File lib/rails_attr_enum/enum_accumulator.rb, line 9 def initialize @entries = [] @validation_rules = {} @values = SortedSet.new end
Public Instance Methods
add(key)
click to toggle source
# File lib/rails_attr_enum/enum_accumulator.rb, line 15 def add(key) if key.is_a?(Hash) key, value = key.first case value when String label = value value = next_free_value when Hash label = value[:label] || key.to_s.titleize value = value[:value] || next_free_value when Numeric label = key.to_s.titleize end else value = next_free_value label = key.to_s.titleize end const_name = key.to_s.upcase add_entry(const_name, key, value, label) end
validates(rules = {})
click to toggle source
# File lib/rails_attr_enum/enum_accumulator.rb, line 39 def validates(rules = {}) @validation_rules = rules end
Private Instance Methods
add_entry(const_name, key, value, label)
click to toggle source
# File lib/rails_attr_enum/enum_accumulator.rb, line 45 def add_entry(const_name, key, value, label) Entry.new(const_name, key, value, label).tap do |entry| revalue_entries!(value) @entries << entry @values << value end end
next_free_value()
click to toggle source
# File lib/rails_attr_enum/enum_accumulator.rb, line 61 def next_free_value counter = 0 value = if @values.empty? 0 else @values.each do |v| next if v < 0 break if v != counter counter += 1 end counter end value end
next_free_value!()
click to toggle source
# File lib/rails_attr_enum/enum_accumulator.rb, line 78 def next_free_value! next_free_value.tap { |v| @values << v } end
revalue_entries!(value)
click to toggle source
# File lib/rails_attr_enum/enum_accumulator.rb, line 53 def revalue_entries!(value) @entries.each do |entry| if entry.value == value entry.value = next_free_value! end end end