Sha256: 772a53e152a89915449a873681e0b678ee88f82831dfd30ca8585117ebb4d247

Contents?: true

Size: 1.63 KB

Versions: 6

Compression:

Stored size: 1.63 KB

Contents

# -*- encoding : utf-8 -*-
require_dependency 'card/cache'
require_dependency 'card/name'

class Card
  class Codename

    @@codehash=nil

    class << self
      # returns codename for id and vice versa.  not in love with this api --efm
      def [] key
        if !key.nil?
          key = key.to_sym unless Integer===key
          codehash[key]
        end
      end

      def codehash
        @@codehash || load_hash
      end

      def reset_cache
        @@codehash = nil
        cache.write 'CODEHASH', nil
      end

      #only used in migration
      def bootdata hash
        @@codehash = hash
      end


      private

      def cache
        Card::Cache[Codename]
      end

      def load_hash
        @@codehash = cache.read('CODEHASH') || begin
          codehash = {}
          sql = 'select id, codename from cards where codename is not NULL'
          ActiveRecord::Base.connection.select_all(sql).each do |row|
            #FIXME: remove duplicate checks, put them in other tools
            code, cid = row['codename'].to_sym, row['id'].to_i
            if codehash.has_key?(code) or codehash.has_key?(cid)
              warn "dup code ID:#{cid} (#{codehash[code]}), CD:#{code} (#{codehash[cid]})"
            end
            codehash[code] = cid; codehash[cid] = code
          end
          cache.write 'CODEHASH', codehash
        end
      end
    end

  end


  def self.const_missing const
    if const.to_s =~ /^([A-Z]\S*)ID$/ and code=$1.underscore.to_sym
      if card_id = Codename[code]
        const_set const, card_id
      else
        raise "Missing codename #{code} (#{const})"
      end
    else
      super
    end
  end

end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
card-1.16.14 lib/card/codename.rb
card-1.16.13 lib/card/codename.rb
card-1.16.12 lib/card/codename.rb
card-1.16.11 lib/card/codename.rb
card-1.16.10 lib/card/codename.rb
card-1.16.9 lib/card/codename.rb