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.



26752
26753
26754
26755
26756
26757
26758
26759
26760
26761
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26752

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.



26750
26751
26752
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26750

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



26809
26810
26811
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26809

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

#do_request(klass) ⇒ Object



26833
26834
26835
26836
26837
26838
26839
26840
26841
26842
26843
26844
26845
26846
26847
26848
26849
26850
26851
26852
26853
26854
26855
26856
26857
26858
26859
26860
26861
26862
26863
26864
26865
26866
26867
26868
26869
26870
26871
26872
26873
26874
26875
26876
26877
26878
26879
26880
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26833

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



26805
26806
26807
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26805

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

#options(&block) ⇒ Object



26813
26814
26815
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26813

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

#patch(&block) ⇒ Object



26829
26830
26831
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26829

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

#post(&block) ⇒ Object



26817
26818
26819
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26817

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

#put(&block) ⇒ Object



26821
26822
26823
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26821

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

#with_auth(auth) ⇒ Object



26773
26774
26775
26776
26777
26778
26779
26780
26781
26782
26783
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26773

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



26799
26800
26801
26802
26803
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26799

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

#with_header(name, value) ⇒ Object



26763
26764
26765
26766
26767
26768
26769
26770
26771
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26763

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



26794
26795
26796
26797
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26794

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

#with_query(params) ⇒ Object



26785
26786
26787
26788
26789
26790
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 26785

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