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.



67873
67874
67875
67876
67877
67878
67879
67880
67881
67882
67883
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67873

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.



67871
67872
67873
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67871

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



67871
67872
67873
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67871

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



67871
67872
67873
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67871

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



67931
67932
67933
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67931

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

#do_request(klass) ⇒ Object



67955
67956
67957
67958
67959
67960
67961
67962
67963
67964
67965
67966
67967
67968
67969
67970
67971
67972
67973
67974
67975
67976
67977
67978
67979
67980
67981
67982
67983
67984
67985
67986
67987
67988
67989
67990
67991
67992
67993
67994
67995
67996
67997
67998
67999
68000
68001
68002
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67955

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



67927
67928
67929
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67927

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

#options(&block) ⇒ Object



67935
67936
67937
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67935

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

#patch(&block) ⇒ Object



67951
67952
67953
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67951

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

#post(&block) ⇒ Object



67939
67940
67941
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67939

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

#put(&block) ⇒ Object



67943
67944
67945
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67943

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

#with_auth(auth) ⇒ Object



67895
67896
67897
67898
67899
67900
67901
67902
67903
67904
67905
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67895

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



67921
67922
67923
67924
67925
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67921

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

#with_header(name, value) ⇒ Object



67885
67886
67887
67888
67889
67890
67891
67892
67893
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67885

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



67916
67917
67918
67919
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67916

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

#with_query(params) ⇒ Object



67907
67908
67909
67910
67911
67912
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 67907

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