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.



29691
29692
29693
29694
29695
29696
29697
29698
29699
29700
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29691

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.



29689
29690
29691
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29689

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



29748
29749
29750
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29748

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

#do_request(klass) ⇒ Object



29772
29773
29774
29775
29776
29777
29778
29779
29780
29781
29782
29783
29784
29785
29786
29787
29788
29789
29790
29791
29792
29793
29794
29795
29796
29797
29798
29799
29800
29801
29802
29803
29804
29805
29806
29807
29808
29809
29810
29811
29812
29813
29814
29815
29816
29817
29818
29819
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29772

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



29744
29745
29746
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29744

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

#options(&block) ⇒ Object



29752
29753
29754
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29752

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

#patch(&block) ⇒ Object



29768
29769
29770
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29768

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

#post(&block) ⇒ Object



29756
29757
29758
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29756

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

#put(&block) ⇒ Object



29760
29761
29762
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29760

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

#with_auth(auth) ⇒ Object



29712
29713
29714
29715
29716
29717
29718
29719
29720
29721
29722
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29712

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



29738
29739
29740
29741
29742
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29738

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

#with_header(name, value) ⇒ Object



29702
29703
29704
29705
29706
29707
29708
29709
29710
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29702

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



29733
29734
29735
29736
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29733

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

#with_query(params) ⇒ Object



29724
29725
29726
29727
29728
29729
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29724

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