Sha256: eb591441d7a4bb7ccfddfd34492cc94847564954891accda146c5dcdb36abf81

Contents?: true

Size: 1.53 KB

Versions: 3

Compression:

Stored size: 1.53 KB

Contents

module Entity
  def format=(formats)
    formats = [formats] unless Array === formats
    formats.each do |format|
      Entity.formats[format] ||= self
    end
  end

  class FormatIndex < Hash

    alias orig_include? include?

    def initialize
      @find_cache = {}
    end

    def find(value)
      @find_cache ||= {}

      if @find_cache.include?(value)
        @find_cache[value]
      else
        @find_cache[value] = begin
                               if orig_include? value
                                 value
                               else
                                 value = value.to_s
                                 found = nil
                                 each do |k,v|
                                   if value == k.to_s
                                     found = k
                                     break
                                   elsif value =~ /\(#{Regexp.quote k.to_s}\)/
                                     found = k
                                     break
                                   end
                                 end
                                 found
                               end
                             end
      end
    end

    def [](value)
      res = super
      return res if res
      key = find(value)
      key ? super(key) : nil
    end

    def []=(key,value)
      @find_cache = {}
      super(key, value)
    end

    def include?(value)
      find(value) != nil
    end
  end

  FORMATS ||= FormatIndex.new

  def self.formats
    FORMATS
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
scout-gear-10.7.4 lib/scout/entity/format.rb
scout-gear-10.7.3 lib/scout/entity/format.rb
scout-gear-10.7.2 lib/scout/entity/format.rb