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.



29775
29776
29777
29778
29779
29780
29781
29782
29783
29784
29785
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29775

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.



29773
29774
29775
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29773

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



29773
29774
29775
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29773

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



29773
29774
29775
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29773

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



29833
29834
29835
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29833

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

#do_request(klass) ⇒ Object



29857
29858
29859
29860
29861
29862
29863
29864
29865
29866
29867
29868
29869
29870
29871
29872
29873
29874
29875
29876
29877
29878
29879
29880
29881
29882
29883
29884
29885
29886
29887
29888
29889
29890
29891
29892
29893
29894
29895
29896
29897
29898
29899
29900
29901
29902
29903
29904
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29857

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)

  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



29829
29830
29831
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29829

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

#options(&block) ⇒ Object



29837
29838
29839
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29837

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

#patch(&block) ⇒ Object



29853
29854
29855
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29853

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

#post(&block) ⇒ Object



29841
29842
29843
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29841

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

#put(&block) ⇒ Object



29845
29846
29847
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29845

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

#with_auth(auth) ⇒ Object



29797
29798
29799
29800
29801
29802
29803
29804
29805
29806
29807
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29797

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



29823
29824
29825
29826
29827
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29823

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

#with_header(name, value) ⇒ Object



29787
29788
29789
29790
29791
29792
29793
29794
29795
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29787

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



29818
29819
29820
29821
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29818

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

#with_query(params) ⇒ Object



29809
29810
29811
29812
29813
29814
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 29809

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