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.



42599
42600
42601
42602
42603
42604
42605
42606
42607
42608
42609
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42599

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.



42597
42598
42599
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42597

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



42597
42598
42599
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42597

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



42597
42598
42599
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42597

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



42657
42658
42659
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42657

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

#do_request(klass) ⇒ Object



42681
42682
42683
42684
42685
42686
42687
42688
42689
42690
42691
42692
42693
42694
42695
42696
42697
42698
42699
42700
42701
42702
42703
42704
42705
42706
42707
42708
42709
42710
42711
42712
42713
42714
42715
42716
42717
42718
42719
42720
42721
42722
42723
42724
42725
42726
42727
42728
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42681

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



42653
42654
42655
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42653

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

#options(&block) ⇒ Object



42661
42662
42663
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42661

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

#patch(&block) ⇒ Object



42677
42678
42679
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42677

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

#post(&block) ⇒ Object



42665
42666
42667
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42665

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

#put(&block) ⇒ Object



42669
42670
42671
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42669

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

#with_auth(auth) ⇒ Object



42621
42622
42623
42624
42625
42626
42627
42628
42629
42630
42631
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42621

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



42647
42648
42649
42650
42651
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42647

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

#with_header(name, value) ⇒ Object



42611
42612
42613
42614
42615
42616
42617
42618
42619
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42611

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



42642
42643
42644
42645
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42642

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

#with_query(params) ⇒ Object



42633
42634
42635
42636
42637
42638
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 42633

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