Class: Etsy::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/etsy/request.rb

Overview

Request

A basic wrapper around GET requests to the Etsy JSON API

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(resource_path, parameters = {}) ⇒ Request

Create a new request for the resource with optional parameters



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/etsy/request.rb', line 34

def initialize(resource_path, parameters = {})
  parameters = parameters.dup
  @token = parameters.delete(:access_token) || Etsy.credentials[:access_token]
  @secret = parameters.delete(:access_secret) || Etsy.credentials[:access_secret]
  raise("Secure connection required. Please provide your OAuth credentials via :access_token and :access_secret in the parameters") if parameters.delete(:require_secure) && !secure?
  @multipart_request = parameters.delete(:multipart)
  @resource_path = resource_path
  @resources = parameters.delete(:includes)
  if @resources.class == String
    @resources = @resources.split(',').map {|r| {:resource => r}}
  elsif @resources.class == Array
    @resources = @resources.map do |r|
      if r.class == String
        {:resource => r}
      else
        r
      end
    end
  end
  parameters = parameters.merge(:api_key => Etsy.api_key) unless secure?
  @parameters = parameters
end

Class Method Details

.delete(resource_path, parameters = {}) ⇒ Object



26
27
28
29
# File 'lib/etsy/request.rb', line 26

def self.delete(resource_path, parameters = {})
  request = Request.new(resource_path, parameters)
  Response.new(request.delete)
end

.get(resource_path, parameters = {}) ⇒ Object

Perform a GET request for the resource with optional parameters - returns A Response object with the payload data



11
12
13
14
# File 'lib/etsy/request.rb', line 11

def self.get(resource_path, parameters = {})
  request = Request.new(resource_path, parameters)
  Response.new(request.get)
end

.post(resource_path, parameters = {}) ⇒ Object



16
17
18
19
# File 'lib/etsy/request.rb', line 16

def self.post(resource_path, parameters = {})
  request = Request.new(resource_path, parameters)
  Response.new(request.post)
end

.put(resource_path, parameters = {}) ⇒ Object



21
22
23
24
# File 'lib/etsy/request.rb', line 21

def self.put(resource_path, parameters = {})
  request = Request.new(resource_path, parameters)
  Response.new(request.put)
end

Instance Method Details

#association(options = {}) ⇒ Object

:nodoc:



111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/etsy/request.rb', line 111

def association(options={}) # :nodoc:
  s = options[:resource].dup

  if options.include? :fields
    s << "(#{[options[:fields]].flatten.join(',')})"
  end

  if options.include?(:limit) || options.include?(:offset)
    s << ":#{options.fetch(:limit, 25)}:#{options.fetch(:offset, 0)}"
  end

  s
end

#base_pathObject

:nodoc:



57
58
59
# File 'lib/etsy/request.rb', line 57

def base_path # :nodoc:
  "/v2"
end

#clientObject

:nodoc:



83
84
85
# File 'lib/etsy/request.rb', line 83

def client # :nodoc:
  @client ||= secure? ? secure_client : basic_client
end

#deleteObject



79
80
81
# File 'lib/etsy/request.rb', line 79

def delete
  client.delete(endpoint_url)
end

#endpoint_url(options = {}) ⇒ Object

:nodoc:



125
126
127
128
129
# File 'lib/etsy/request.rb', line 125

def endpoint_url(options = {}) # :nodoc:
  url = "#{base_path}#{@resource_path}"
  url += "?#{query}" if options.fetch(:include_query, true)
  url
end

#getObject

Perform a GET request against the API endpoint and return the raw response data



63
64
65
# File 'lib/etsy/request.rb', line 63

def get
  client.get(endpoint_url)
end

#multipart?Boolean

Returns:

  • (Boolean)


131
132
133
# File 'lib/etsy/request.rb', line 131

def multipart?
  !!@multipart_request
end

#parametersObject

:nodoc:



87
88
89
# File 'lib/etsy/request.rb', line 87

def parameters # :nodoc:
  @parameters
end

#postObject



67
68
69
70
71
72
73
# File 'lib/etsy/request.rb', line 67

def post
  if multipart?
    client.post_multipart(endpoint_url(:include_query => false), @parameters)
  else
    client.post(endpoint_url)
  end
end

#putObject



75
76
77
# File 'lib/etsy/request.rb', line 75

def put
  client.put(endpoint_url)
end

#queryObject

:nodoc:



95
96
97
# File 'lib/etsy/request.rb', line 95

def query # :nodoc:
  to_url(parameters.merge(:includes => resources.to_a.map { |r| association(r) }))
end

#resourcesObject

:nodoc:



91
92
93
# File 'lib/etsy/request.rb', line 91

def resources # :nodoc:
  @resources
end

#to_url(val) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
# File 'lib/etsy/request.rb', line 99

def to_url(val)
  if val.is_a? Array
    to_url(val.join(','))
  elsif val.is_a? Hash
    val.reject { |k, v|
      k.nil? || v.nil? || (k.respond_to?(:empty?) && k.empty?) || (v.respond_to?(:empty?) && v.empty?)
    }.map { |k, v| "#{to_url(k.to_s)}=#{to_url(v)}" }.join('&')
  else
    URI.escape(val.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
  end
end