Sha256: bd174fa40df13fd9be8b6c740ed63e443aca0fbc515a551740aa4b22b6af947d

Contents?: true

Size: 1.42 KB

Versions: 1

Compression:

Stored size: 1.42 KB

Contents

module Heft
  class Key
    attr_reader :id, :type

    def initialize(opts={})
      @id    = opts[:id]   || fail("You must supply :id")
      @type  = opts[:type] || fail("You must supply :type")
    end
  end
  
  class DataItem
    attr_reader :key, :value

    def initialize(opts={})
      @key    = opts[:key]    || fail("You must supply :key")
      @value = opts[:value] || fail("You must supply :value")
    end
  end
  
  class Data # http://docs.hoi.io/data/overview/api/data-api
    class << self
      def save(item)
        reply = hoist.post(
          :uri => earl(item.key),
          :body => item.value 
        )

        fail "Failed to save item. #{reply.body}" if reply.code > 299
      end

      def get(key)
        reply = hoist.get :uri => earl(key)

        return nil if reply.code === 404

        fail "Failed to fetch item with key <#{key}>. #{reply.body}" if reply.code > 299
        
        JSON.parse reply.body
      end

      def delete(key)
        reply = hoist.delete :uri => earl(key)

        fail "Failed delete item with key <#{key}>. #{reply.body}" if reply.code > 299
      end

      private

      def earl(key)
        "https://data.hoi.io/#{URI.escape(key.type)}/#{URI.escape(key.id)}"
      end

      def hoist
        Heft::Internal::HoistConnection.new :internet => internet, :api_key => ENV['APIKEY'] 
      end

      def internet
        Adapters::Internet.new
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
heft-0.0.2 lib/heft/data.rb