class SimpleEnum::Persistence::Hasher

Attributes

enum_key[R]
enum_klass[R]
enum_mapping[R]
enum_value[R]

Public Class Methods

call(options)
Alias for: new
new(options) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 8
def initialize options
  @enum_klass = options[0]
  options = options[1] || Hash.new
  @enum_key = options[:key] || :name
  @enum_value = options[:value] || :id

  unless enum_klass.method_defined? :update_enum_hashers
    enum_klass.instance_eval do
      def enum_hashers
        @enum_hashers ||= []
      end

      def update_enum_hashers
        records = all.to_a
        enum_hashers.each do |hasher|
          hasher.enum_replace records
        end
      end
    end

    enum_klass.class_eval do
      def update_enum_hashers
        self.class.update_enum_hashers
      end

      after_commit :update_enum_hashers
    end
  end

  enum_klass.enum_hashers.push self
  enum_replace enum_klass.all
end
Also aliased as: call

Public Instance Methods

[](key)
Alias for: value
each(&block)
Alias for: each_pair
each_pair(&block) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 50
def each_pair &block
  @enum_mapping.each &block
end
Also aliased as: each
enum_hashers() click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 16
def enum_hashers
  @enum_hashers ||= []
end
enum_replace(records) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 41
def enum_replace records
  @enum_mapping = Array.new
  records.each do |record|
    key = record.send(enum_key)
    value =  record.send(enum_value)
    @enum_mapping.push([key, value])
  end
end
freeze() click to toggle source

Do nothing when freeze, cause we have to motify the hash later

# File lib/simple_enum/persistence/hasher.rb, line 87
def freeze
  self
end
key(value) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 63
def key value
  matched = @enum_mapping.find { |k, v| v == value }
  matched[0] if matched
end
key?(key) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 55
def key? key
  @enum_mapping.any? { |k, v| k == key }
end
keys() click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 74
def keys
  @enum_mapping.map { |k, v| k }
end
update_enum_hashers() click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 20
def update_enum_hashers
  records = all.to_a
  enum_hashers.each do |hasher|
    hasher.enum_replace records
  end
end
value(key) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 68
def value key
  matched = @enum_mapping.find { |k, v| k == key }
  matched[1] if matched
end
Also aliased as: []
value?(value) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 59
def value? value
  @enum_mapping.any? { |k, v| v == value }
end
values() click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 78
def values
  @enum_mapping.map { |k, v| v }
end
values_at(*keys) click to toggle source
# File lib/simple_enum/persistence/hasher.rb, line 82
def values_at *keys
  @enum_mapping.select { |k, v| keys.include? k }.map { |k, v| v }
end