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.



33833
33834
33835
33836
33837
33838
33839
33840
33841
33842
33843
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33833

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.



33831
33832
33833
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33831

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



33831
33832
33833
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33831

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



33831
33832
33833
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33831

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



33891
33892
33893
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33891

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

#do_request(klass) ⇒ Object



33915
33916
33917
33918
33919
33920
33921
33922
33923
33924
33925
33926
33927
33928
33929
33930
33931
33932
33933
33934
33935
33936
33937
33938
33939
33940
33941
33942
33943
33944
33945
33946
33947
33948
33949
33950
33951
33952
33953
33954
33955
33956
33957
33958
33959
33960
33961
33962
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33915

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



33887
33888
33889
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33887

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

#options(&block) ⇒ Object



33895
33896
33897
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33895

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

#patch(&block) ⇒ Object



33911
33912
33913
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33911

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

#post(&block) ⇒ Object



33899
33900
33901
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33899

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

#put(&block) ⇒ Object



33903
33904
33905
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33903

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

#with_auth(auth) ⇒ Object



33855
33856
33857
33858
33859
33860
33861
33862
33863
33864
33865
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33855

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



33881
33882
33883
33884
33885
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33881

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

#with_header(name, value) ⇒ Object



33845
33846
33847
33848
33849
33850
33851
33852
33853
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33845

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



33876
33877
33878
33879
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33876

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

#with_query(params) ⇒ Object



33867
33868
33869
33870
33871
33872
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 33867

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