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.



27737
27738
27739
27740
27741
27742
27743
27744
27745
27746
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27737

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)
  @params = nil
  @body = nil
  @auth = nil
  @headers = {}
  @header_keys_lower_case = []
end

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path.



27735
27736
27737
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27735

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



27794
27795
27796
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27794

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

#do_request(klass) ⇒ Object



27818
27819
27820
27821
27822
27823
27824
27825
27826
27827
27828
27829
27830
27831
27832
27833
27834
27835
27836
27837
27838
27839
27840
27841
27842
27843
27844
27845
27846
27847
27848
27849
27850
27851
27852
27853
27854
27855
27856
27857
27858
27859
27860
27861
27862
27863
27864
27865
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27818

def do_request(klass)
  Preconditions.assert_class('klass', klass, Class)

  uri = path.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



27790
27791
27792
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27790

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

#options(&block) ⇒ Object



27798
27799
27800
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27798

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

#patch(&block) ⇒ Object



27814
27815
27816
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27814

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

#post(&block) ⇒ Object



27802
27803
27804
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27802

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

#put(&block) ⇒ Object



27806
27807
27808
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27806

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

#with_auth(auth) ⇒ Object



27758
27759
27760
27761
27762
27763
27764
27765
27766
27767
27768
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27758

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



27784
27785
27786
27787
27788
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27784

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

#with_header(name, value) ⇒ Object



27748
27749
27750
27751
27752
27753
27754
27755
27756
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27748

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



27779
27780
27781
27782
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27779

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

#with_query(params) ⇒ Object



27770
27771
27772
27773
27774
27775
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 27770

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