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.



52635
52636
52637
52638
52639
52640
52641
52642
52643
52644
52645
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52635

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.



52633
52634
52635
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52633

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



52633
52634
52635
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52633

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



52633
52634
52635
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52633

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



52693
52694
52695
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52693

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

#do_request(klass) ⇒ Object



52717
52718
52719
52720
52721
52722
52723
52724
52725
52726
52727
52728
52729
52730
52731
52732
52733
52734
52735
52736
52737
52738
52739
52740
52741
52742
52743
52744
52745
52746
52747
52748
52749
52750
52751
52752
52753
52754
52755
52756
52757
52758
52759
52760
52761
52762
52763
52764
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52717

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)

  # DEBUG curl = ['curl']
  # DEBUG if klass != Net::HTTP::Get
  # DEBUG  curl << "-X%s" % klass.name.split("::").last.upcase
  # DEBUG end

  if @body
    # DEBUG tmpfile = "/tmp/rest_client.tmp"
    # DEBUG File.open(tmpfile, "w") { |os| os << @body.to_s }
    # DEBUG curl << "-d@%s" % tmpfile
    request.body = @body
  end

  if @auth
    # DEBUG 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|
    # DEBUG curl <<  "-H \"%s: %s\"" % [key, value]
    request.add_field(key, value)
  }

  # DEBUG 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



52689
52690
52691
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52689

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

#options(&block) ⇒ Object



52697
52698
52699
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52697

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

#patch(&block) ⇒ Object



52713
52714
52715
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52713

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

#post(&block) ⇒ Object



52701
52702
52703
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52701

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

#put(&block) ⇒ Object



52705
52706
52707
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52705

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

#with_auth(auth) ⇒ Object



52657
52658
52659
52660
52661
52662
52663
52664
52665
52666
52667
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52657

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



52683
52684
52685
52686
52687
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52683

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

#with_header(name, value) ⇒ Object



52647
52648
52649
52650
52651
52652
52653
52654
52655
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52647

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



52678
52679
52680
52681
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52678

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

#with_query(params) ⇒ Object



52669
52670
52671
52672
52673
52674
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 52669

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