module Hawkei
  ##
  # == Hawkei \Store
  #
  # Store environment data
  #
  class Store
    class << self

      def store
        Thread.current[:request_store] ||= {}
      end

      def clear!
        Thread.current[:request_store] = {}
      end

      def load_from_hash(object = {})
        clear!
        bulk_set(Util.deep_symbolize_key(object)) if object.is_a?(Hash)
      end

      def get(key)
        store[key]
      end
      alias [] get

      def set(key, value)
        store[key] = value
      end
      alias []= set

      def bulk_set(attributes = {})
        attributes.each do |(key, value)|
          set(key, value)
        end
      end

      def exist?(key)
        store.key?(key)
      end

      def delete(key, &block)
        store.delete(key, &block)
      end

    end
  end
end