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.



25050
25051
25052
25053
25054
25055
25056
25057
25058
25059
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25050

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)
  @params = nil
  @body = nil
  @auth = nil
  @headers = {}
  @header_keys_lower_case = []
end

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path.



25048
25049
25050
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25048

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



25107
25108
25109
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25107

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

#do_request(klass) ⇒ Object



25131
25132
25133
25134
25135
25136
25137
25138
25139
25140
25141
25142
25143
25144
25145
25146
25147
25148
25149
25150
25151
25152
25153
25154
25155
25156
25157
25158
25159
25160
25161
25162
25163
25164
25165
25166
25167
25168
25169
25170
25171
25172
25173
25174
25175
25176
25177
25178
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25131

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

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

  request = klass.send(:new, uri)

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

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

  if @auth
    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|
    curl <<  "-H \"%s: %s\"" % [key, value]
    request.add_field(key, value)
  }

  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



25103
25104
25105
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25103

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

#options(&block) ⇒ Object



25111
25112
25113
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25111

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

#patch(&block) ⇒ Object



25127
25128
25129
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25127

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

#post(&block) ⇒ Object



25115
25116
25117
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25115

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

#put(&block) ⇒ Object



25119
25120
25121
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25119

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

#with_auth(auth) ⇒ Object



25071
25072
25073
25074
25075
25076
25077
25078
25079
25080
25081
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25071

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



25097
25098
25099
25100
25101
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25097

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

#with_header(name, value) ⇒ Object



25061
25062
25063
25064
25065
25066
25067
25068
25069
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25061

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



25092
25093
25094
25095
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25092

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

#with_query(params) ⇒ Object



25083
25084
25085
25086
25087
25088
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 25083

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