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.



56804
56805
56806
56807
56808
56809
56810
56811
56812
56813
56814
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56804

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.



56802
56803
56804
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56802

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



56802
56803
56804
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56802

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



56802
56803
56804
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56802

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



56862
56863
56864
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56862

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

#do_request(klass) ⇒ Object



56886
56887
56888
56889
56890
56891
56892
56893
56894
56895
56896
56897
56898
56899
56900
56901
56902
56903
56904
56905
56906
56907
56908
56909
56910
56911
56912
56913
56914
56915
56916
56917
56918
56919
56920
56921
56922
56923
56924
56925
56926
56927
56928
56929
56930
56931
56932
56933
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56886

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



56858
56859
56860
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56858

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

#options(&block) ⇒ Object



56866
56867
56868
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56866

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

#patch(&block) ⇒ Object



56882
56883
56884
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56882

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

#post(&block) ⇒ Object



56870
56871
56872
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56870

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

#put(&block) ⇒ Object



56874
56875
56876
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56874

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

#with_auth(auth) ⇒ Object



56826
56827
56828
56829
56830
56831
56832
56833
56834
56835
56836
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56826

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



56852
56853
56854
56855
56856
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56852

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

#with_header(name, value) ⇒ Object



56816
56817
56818
56819
56820
56821
56822
56823
56824
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56816

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



56847
56848
56849
56850
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56847

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

#with_query(params) ⇒ Object



56838
56839
56840
56841
56842
56843
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 56838

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