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.



43411
43412
43413
43414
43415
43416
43417
43418
43419
43420
43421
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43411

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.



43409
43410
43411
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43409

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



43409
43410
43411
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43409

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



43409
43410
43411
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43409

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



43469
43470
43471
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43469

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

#do_request(klass) ⇒ Object



43493
43494
43495
43496
43497
43498
43499
43500
43501
43502
43503
43504
43505
43506
43507
43508
43509
43510
43511
43512
43513
43514
43515
43516
43517
43518
43519
43520
43521
43522
43523
43524
43525
43526
43527
43528
43529
43530
43531
43532
43533
43534
43535
43536
43537
43538
43539
43540
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43493

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



43465
43466
43467
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43465

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

#options(&block) ⇒ Object



43473
43474
43475
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43473

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

#patch(&block) ⇒ Object



43489
43490
43491
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43489

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

#post(&block) ⇒ Object



43477
43478
43479
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43477

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

#put(&block) ⇒ Object



43481
43482
43483
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43481

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

#with_auth(auth) ⇒ Object



43433
43434
43435
43436
43437
43438
43439
43440
43441
43442
43443
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43433

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



43459
43460
43461
43462
43463
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43459

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

#with_header(name, value) ⇒ Object



43423
43424
43425
43426
43427
43428
43429
43430
43431
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43423

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



43454
43455
43456
43457
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43454

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

#with_query(params) ⇒ Object



43445
43446
43447
43448
43449
43450
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 43445

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