Sha256: 17b1161ca7895625159d25d47862a767263e6b8c9ede652403e576ce79121159

Contents?: true

Size: 1.08 KB

Versions: 42

Compression:

Stored size: 1.08 KB

Contents

module Edgarj
  # build map: value -> label on-the-fly
  class EnumCache
    include Singleton

    def initialize
      @enum_map = {}

      # for stat
      @hit = @out = @out_of_enum = 0
    end

    # return label of 'rec.attr', where attr is enum value.
    def label(rec, attr, enum = nil)
      if !enum
        enum = rec.class.const_get(attr.to_s.camelize)
        raise(NameError, "wrong constant name #{attr}") if !enum
      end
      if !@enum_map[enum]
        @enum_map[enum] = {}
      end
      value = rec.attributes[attr.to_s]
      if label = @enum_map[enum][value]
        @hit += 1
        label
      else
        member = enum.constants.detect{|m|
                    enum.const_get(m) == value
                 }
        @enum_map[enum][value] = 
            if member
              @out += 1
              rec.class.human_const_name(enum, member)
            else
              @out_of_enum += 1
              '??'
            end
      end
    end

    # return statistic information of hit, out, out_of_enum.
    def stat
      [@hit, @out, @out_of_enum]
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
edgarj-4.06.10 lib/edgarj/enum_cache.rb
edgarj-4.06.09 lib/edgarj/enum_cache.rb
edgarj-4.06.07 lib/edgarj/enum_cache.rb
edgarj-4.06.05 lib/edgarj/enum_cache.rb
edgarj-4.06.04 lib/edgarj/enum_cache.rb
edgarj-4.06.03 lib/edgarj/enum_cache.rb
edgarj-4.06.02 lib/edgarj/enum_cache.rb
edgarj-4.06.01 lib/edgarj/enum_cache.rb
edgarj-4.06.00 lib/edgarj/enum_cache.rb
edgarj-4.05.04 lib/edgarj/enum_cache.rb
edgarj-4.05.03 lib/edgarj/enum_cache.rb
edgarj-4.05.02 lib/edgarj/enum_cache.rb
edgarj-4.05.01 lib/edgarj/enum_cache.rb
edgarj-4.05.00 lib/edgarj/enum_cache.rb
edgarj-4.04.01 lib/edgarj/enum_cache.rb
edgarj-4.04.00 lib/edgarj/enum_cache.rb
edgarj-4.03.00 lib/edgarj/enum_cache.rb
edgarj-4.02.00 lib/edgarj/enum_cache.rb
edgarj-4.01.01 lib/edgarj/enum_cache.rb
edgarj-4.01.00 lib/edgarj/enum_cache.rb