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



24485
24486
24487
24488
24489
24490
24491
24492
24493
24494
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24485

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.



24483
24484
24485
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24483

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



24542
24543
24544
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24542

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

#do_request(klass) ⇒ Object



24566
24567
24568
24569
24570
24571
24572
24573
24574
24575
24576
24577
24578
24579
24580
24581
24582
24583
24584
24585
24586
24587
24588
24589
24590
24591
24592
24593
24594
24595
24596
24597
24598
24599
24600
24601
24602
24603
24604
24605
24606
24607
24608
24609
24610
24611
24612
24613
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24566

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



24538
24539
24540
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24538

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

#options(&block) ⇒ Object



24546
24547
24548
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24546

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

#patch(&block) ⇒ Object



24562
24563
24564
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24562

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

#post(&block) ⇒ Object



24550
24551
24552
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24550

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

#put(&block) ⇒ Object



24554
24555
24556
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24554

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

#with_auth(auth) ⇒ Object



24506
24507
24508
24509
24510
24511
24512
24513
24514
24515
24516
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24506

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



24532
24533
24534
24535
24536
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24532

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

#with_header(name, value) ⇒ Object



24496
24497
24498
24499
24500
24501
24502
24503
24504
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24496

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



24527
24528
24529
24530
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24527

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

#with_query(params) ⇒ Object



24518
24519
24520
24521
24522
24523
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24518

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