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



28599
28600
28601
28602
28603
28604
28605
28606
28607
28608
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28599

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.



28597
28598
28599
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28597

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



28656
28657
28658
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28656

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

#do_request(klass) ⇒ Object



28680
28681
28682
28683
28684
28685
28686
28687
28688
28689
28690
28691
28692
28693
28694
28695
28696
28697
28698
28699
28700
28701
28702
28703
28704
28705
28706
28707
28708
28709
28710
28711
28712
28713
28714
28715
28716
28717
28718
28719
28720
28721
28722
28723
28724
28725
28726
28727
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28680

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



28652
28653
28654
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28652

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

#options(&block) ⇒ Object



28660
28661
28662
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28660

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

#patch(&block) ⇒ Object



28676
28677
28678
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28676

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

#post(&block) ⇒ Object



28664
28665
28666
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28664

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

#put(&block) ⇒ Object



28668
28669
28670
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28668

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

#with_auth(auth) ⇒ Object



28620
28621
28622
28623
28624
28625
28626
28627
28628
28629
28630
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28620

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



28646
28647
28648
28649
28650
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28646

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

#with_header(name, value) ⇒ Object



28610
28611
28612
28613
28614
28615
28616
28617
28618
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28610

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



28641
28642
28643
28644
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28641

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

#with_query(params) ⇒ Object



28632
28633
28634
28635
28636
28637
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28632

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