Class: Io::Flow::V0::HttpClient::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/flow_commerce/flow_api_v0_client.rb

Defined Under Namespace

Classes: PATCH

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(http_handler, base_uri, path) ⇒ Request

Returns a new instance of Request.



53046
53047
53048
53049
53050
53051
53052
53053
53054
53055
53056
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53046

def initialize(http_handler, base_uri, path)
  @http_handler = http_handler
  @base_uri = Preconditions.assert_class('base_uri', base_uri, URI)
  @path = Preconditions.assert_class('path', path, String)
  @full_uri = @base_uri.to_s + @path
  @params = nil
  @body = nil
  @auth = nil
  @headers = {}
  @header_keys_lower_case = []
end

Instance Attribute Details

#base_uriObject (readonly)

Returns the value of attribute base_uri.



53044
53045
53046
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53044

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



53044
53045
53046
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53044

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



53044
53045
53046
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53044

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



53104
53105
53106
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53104

def delete(&block)
  do_request(Net::HTTP::Delete, &block)
end

#do_request(klass) ⇒ Object



53128
53129
53130
53131
53132
53133
53134
53135
53136
53137
53138
53139
53140
53141
53142
53143
53144
53145
53146
53147
53148
53149
53150
53151
53152
53153
53154
53155
53156
53157
53158
53159
53160
53161
53162
53163
53164
53165
53166
53167
53168
53169
53170
53171
53172
53173
53174
53175
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53128

def do_request(klass)
  Preconditions.assert_class('klass', klass, Class)

  uri = @full_uri.dup
  if q = to_query(@params)
    uri += "?%s" % q
  end

  request = klass.send(:new, uri)

  # DEBUG curl = ['curl']
  # DEBUG if klass != Net::HTTP::Get
  # DEBUG  curl << "-X%s" % klass.name.split("::").last.upcase
  # DEBUG end

  if @body
    # DEBUG tmpfile = "/tmp/rest_client.tmp"
    # DEBUG File.open(tmpfile, "w") { |os| os << @body.to_s }
    # DEBUG curl << "-d@%s" % tmpfile
    request.body = @body
  end

  if @auth
    # DEBUG curl << "-u \"%s:%s\"" % [@auth.username, @auth.password]
    Preconditions.check_state(!@header_keys_lower_case.include?("authorization"),
                              "Cannot specify both an Authorization header and an auth instance")
    user_pass = "%s:%s" % [@auth.username, @auth.password]
    encoded = Base64.encode64(user_pass).to_s.split("\n").map(&:strip).join
    request.add_field("Authorization", "Basic %s" % encoded)
  end

  @headers.each { |key, value|
    # DEBUG curl <<  "-H \"%s: %s\"" % [key, value]
    request.add_field(key, value)
  }

  # DEBUG curl << "'%s%s'" % [@base_uri, path]
  # DEBUG puts curl.join(" ")

  raw_response = @http_handler.instance(@base_uri, request.path).execute(request)
  response = raw_response.to_s == "" ? nil : JSON.parse(raw_response)

  if block_given?
    yield response
  else
    response
  end
end

#get(&block) ⇒ Object



53100
53101
53102
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53100

def get(&block)
  do_request(Net::HTTP::Get, &block)
end

#options(&block) ⇒ Object



53108
53109
53110
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53108

def options(&block)
  do_request(Net::HTTP::Options, &block)
end

#patch(&block) ⇒ Object



53124
53125
53126
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53124

def patch(&block)
  do_request(PATCH, &block)
end

#post(&block) ⇒ Object



53112
53113
53114
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53112

def post(&block)
  do_request(Net::HTTP::Post, &block)
end

#put(&block) ⇒ Object



53116
53117
53118
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53116

def put(&block)
  do_request(Net::HTTP::Put, &block)
end

#with_auth(auth) ⇒ Object



53068
53069
53070
53071
53072
53073
53074
53075
53076
53077
53078
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53068

def with_auth(auth)
  Preconditions.assert_class('auth', auth, HttpClient::Authorization)
  Preconditions.check_state(@auth.nil?, "auth previously set")

  if auth.scheme.name == AuthScheme::BASIC.name
    @auth = auth
  else
    raise "Auth Scheme[#{auth.scheme.name}] not supported"
  end
  self
end

#with_body(body) ⇒ Object



53094
53095
53096
53097
53098
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53094

def with_body(body)
  Preconditions.check_not_blank('body', body)
  @body = body
  self
end

#with_header(name, value) ⇒ Object



53058
53059
53060
53061
53062
53063
53064
53065
53066
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53058

def with_header(name, value)
  Preconditions.check_not_blank('name', name, "Header name is required")
  Preconditions.check_not_blank('value', value, "Header value is required")
  Preconditions.check_state(!@headers.has_key?(name),
                            "Duplicate header named[%s]" % name)
  @headers[name] = value
  @header_keys_lower_case << name.downcase
  self
end

#with_json(json) ⇒ Object

Wrapper to set Content-Type header to application/json and set the provided json document as the body



53089
53090
53091
53092
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53089

def with_json(json)
  @headers['Content-Type'] ||= 'application/json; charset=UTF-8'
  with_body(json)
end

#with_query(params) ⇒ Object



53080
53081
53082
53083
53084
53085
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 53080

def with_query(params)
  Preconditions.assert_class('params', params, Hash)
  Preconditions.check_state(@params.nil?, "Already have query parameters")
  @params = params
  self
end