Sha256: 8d0067bf57776b1b88a9b232370a84ea983dd78c36c58c97cf8bb06ac67270f4

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

module Characterizable
  class Snapshot < BetterHash
    attr_reader :universe
    def initialize(universe)
      @universe = universe
      _take_snapshot
    end
    def _take_snapshot
      universe.characterizable_base.characteristics.each do |_, c|
        if c.known?(universe)
          if c.effective?(universe)
            self[c.name] = c.value(universe)
          elsif c.trumped?(universe)
            trumped_keys.push c.name
          elsif !c.revealed?(universe)
            wasted_keys.push c.name
            lacking_keys.push c.prerequisite
          end
        end
      end
    end
    def []=(key, value)
      universe.expire_snapshot!
      super
    end
    def wasted_keys
      @wasted_keys ||= Array.new
    end
    def trumped_keys
      @trumped_keys ||= Array.new
    end
    def lacking_keys
      @lacking_keys ||= Array.new
    end
    def effective
      universe.characterizable_base.characteristics.select { |_, c| c.effective?(self) }
    end
    def potential
      universe.characterizable_base.characteristics.select { |_, c| c.potential?(self) }
    end
    def wasted
      universe.characterizable_base.characteristics.slice(*wasted_keys)
    end
    def lacking
      universe.characterizable_base.characteristics.slice(*(lacking_keys - wasted_keys))
    end
    def trumped
      universe.characterizable_base.characteristics.slice(*trumped_keys)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
characterizable-0.1.2 lib/characterizable/snapshot.rb
characterizable-0.1.1 lib/characterizable/snapshot.rb
characterizable-0.1.0 lib/characterizable/snapshot.rb