Sha256: 2f9c846ada94f52577261b2092216bf4cac0c2aea1143abb914d0fea60f20148

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 KB

Contents

require 'httparty'
require 'addressable/uri'
require 'wp/api/endpoints'

module WP::API
  class Client
    include HTTParty
    include Endpoints

    attr_accessor :host

    def initialize(host:, scheme: 'http')
      @scheme = scheme
      @host = host
      fail ':host is required' unless host.is_a?(String) && host.length > 0
    end

    protected

    def get(resource, query = {})
      path = url_for(resource, query)
      response = Client.get(path)
      if response.empty?
        raise WP::API::ResourceNotFoundError
      else
        [ response.parsed_response, response.headers ] # Already parsed.
      end
    end

    private

    def url_for(fragment, query)
      url = "#{@scheme}://#{@host}/wp-json/#{fragment}"
      url << ("?" + params(query)) unless query.empty?

      url
    end

    def params(query)
      uri = Addressable::URI.new
      filter_hash = {}
      query.each do |key, value|
        filter_hash["filter[#{key}]"] = value
      end
      uri.query_values = filter_hash

      uri.query
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wp-api-0.0.3 lib/wp/api/client.rb