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.



24565
24566
24567
24568
24569
24570
24571
24572
24573
24574
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24565

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.



24563
24564
24565
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24563

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



24622
24623
24624
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24622

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

#do_request(klass) ⇒ Object



24646
24647
24648
24649
24650
24651
24652
24653
24654
24655
24656
24657
24658
24659
24660
24661
24662
24663
24664
24665
24666
24667
24668
24669
24670
24671
24672
24673
24674
24675
24676
24677
24678
24679
24680
24681
24682
24683
24684
24685
24686
24687
24688
24689
24690
24691
24692
24693
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24646

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



24618
24619
24620
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24618

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

#options(&block) ⇒ Object



24626
24627
24628
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24626

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

#patch(&block) ⇒ Object



24642
24643
24644
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24642

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

#post(&block) ⇒ Object



24630
24631
24632
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24630

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

#put(&block) ⇒ Object



24634
24635
24636
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24634

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

#with_auth(auth) ⇒ Object



24586
24587
24588
24589
24590
24591
24592
24593
24594
24595
24596
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24586

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



24612
24613
24614
24615
24616
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24612

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

#with_header(name, value) ⇒ Object



24576
24577
24578
24579
24580
24581
24582
24583
24584
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24576

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



24607
24608
24609
24610
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24607

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

#with_query(params) ⇒ Object



24598
24599
24600
24601
24602
24603
# File 'lib/flow_commerce/flow_api_v0_client.rb', line 24598

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