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.



28681
28682
28683
28684
28685
28686
28687
28688
28689
28690
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28681

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.



28679
28680
28681
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28679

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



28738
28739
28740
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28738

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

#do_request(klass) ⇒ Object



28762
28763
28764
28765
28766
28767
28768
28769
28770
28771
28772
28773
28774
28775
28776
28777
28778
28779
28780
28781
28782
28783
28784
28785
28786
28787
28788
28789
28790
28791
28792
28793
28794
28795
28796
28797
28798
28799
28800
28801
28802
28803
28804
28805
28806
28807
28808
28809
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28762

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



28734
28735
28736
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28734

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

#options(&block) ⇒ Object



28742
28743
28744
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28742

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

#patch(&block) ⇒ Object



28758
28759
28760
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28758

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

#post(&block) ⇒ Object



28746
28747
28748
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28746

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

#put(&block) ⇒ Object



28750
28751
28752
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28750

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

#with_auth(auth) ⇒ Object



28702
28703
28704
28705
28706
28707
28708
28709
28710
28711
28712
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28702

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



28728
28729
28730
28731
28732
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28728

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

#with_header(name, value) ⇒ Object



28692
28693
28694
28695
28696
28697
28698
28699
28700
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28692

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



28723
28724
28725
28726
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28723

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

#with_query(params) ⇒ Object



28714
28715
28716
28717
28718
28719
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 28714

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