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.



41035
41036
41037
41038
41039
41040
41041
41042
41043
41044
41045
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41035

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.



41033
41034
41035
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41033

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



41033
41034
41035
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41033

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



41033
41034
41035
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41033

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



41093
41094
41095
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41093

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

#do_request(klass) ⇒ Object



41117
41118
41119
41120
41121
41122
41123
41124
41125
41126
41127
41128
41129
41130
41131
41132
41133
41134
41135
41136
41137
41138
41139
41140
41141
41142
41143
41144
41145
41146
41147
41148
41149
41150
41151
41152
41153
41154
41155
41156
41157
41158
41159
41160
41161
41162
41163
41164
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41117

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)

  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



41089
41090
41091
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41089

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

#options(&block) ⇒ Object



41097
41098
41099
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41097

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

#patch(&block) ⇒ Object



41113
41114
41115
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41113

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

#post(&block) ⇒ Object



41101
41102
41103
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41101

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

#put(&block) ⇒ Object



41105
41106
41107
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41105

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

#with_auth(auth) ⇒ Object



41057
41058
41059
41060
41061
41062
41063
41064
41065
41066
41067
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41057

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



41083
41084
41085
41086
41087
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41083

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

#with_header(name, value) ⇒ Object



41047
41048
41049
41050
41051
41052
41053
41054
41055
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41047

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



41078
41079
41080
41081
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41078

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

#with_query(params) ⇒ Object



41069
41070
41071
41072
41073
41074
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 41069

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