Sha256: a93761d1a28c71fc2ed4c9f5f88fe8e6d1ef06b40a3527bf9012c7d4ea363abc

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 KB

Contents

require 'uri'
require 'delegate'
require 'pact/hal/link'

module Pact
  module Hal
    class Entity
      def initialize(data, http_client, response = nil)
        @data = data
        @links = (@data || {}).fetch("_links", {})
        @client = http_client
        @response = response
      end

      def get(key, *args)
        _link(key).get(*args)
      end

      def post(key, *args)
        _link(key).post(*args)
      end

      def put(key, *args)
        _link(key).put(*args)
      end

      def can?(key)
        @links.key? key.to_s
      end

      def follow(key, http_method, *args)
        Link.new(@links[key].merge(method: http_method), @client).run(*args)
      end

      def _link(key)
        if @links[key]
          Link.new(@links[key], @client)
        else
          nil
        end
      end

      def success?
        true
      end

      def response
        @response
      end

      def fetch(key)
        @links[key]
      end

      def method_missing(method_name, *args, &block)
        if @data.key?(method_name.to_s)
          @data[method_name.to_s]
        elsif @links.key?(method_name)
          Link.new(@links[method_name], @client).run(*args)
        else
          super
        end
      end

      def respond_to_missing?(method_name, include_private = false)
        @data.key?(method_name) || @links.key?(method_name)
      end
    end

    class ErrorEntity < Entity

      def initialize(data, http_client, response = nil)
        @data = data
        @links = {}
        @client = http_client
        @response = response
      end

      def success?
        false
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pact-1.28.0 lib/pact/hal/entity.rb
pact-1.28.0.rc1 lib/pact/hal/entity.rb