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.



33056
33057
33058
33059
33060
33061
33062
33063
33064
33065
33066
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33056

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.



33054
33055
33056
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33054

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



33054
33055
33056
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33054

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



33054
33055
33056
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33054

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



33114
33115
33116
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33114

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

#do_request(klass) ⇒ Object



33138
33139
33140
33141
33142
33143
33144
33145
33146
33147
33148
33149
33150
33151
33152
33153
33154
33155
33156
33157
33158
33159
33160
33161
33162
33163
33164
33165
33166
33167
33168
33169
33170
33171
33172
33173
33174
33175
33176
33177
33178
33179
33180
33181
33182
33183
33184
33185
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33138

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



33110
33111
33112
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33110

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

#options(&block) ⇒ Object



33118
33119
33120
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33118

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

#patch(&block) ⇒ Object



33134
33135
33136
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33134

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

#post(&block) ⇒ Object



33122
33123
33124
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33122

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

#put(&block) ⇒ Object



33126
33127
33128
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33126

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

#with_auth(auth) ⇒ Object



33078
33079
33080
33081
33082
33083
33084
33085
33086
33087
33088
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33078

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



33104
33105
33106
33107
33108
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33104

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

#with_header(name, value) ⇒ Object



33068
33069
33070
33071
33072
33073
33074
33075
33076
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33068

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



33099
33100
33101
33102
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33099

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

#with_query(params) ⇒ Object



33090
33091
33092
33093
33094
33095
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33090

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