Class: Io::Flow::Reference::V0::HttpClient::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/flow_reference_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.



991
992
993
994
995
996
997
998
999
1000
1001
# File 'lib/flow_reference_v0_client.rb', line 991

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.



989
990
991
# File 'lib/flow_reference_v0_client.rb', line 989

def base_uri
  @base_uri
end

#full_uriObject (readonly)

Returns the value of attribute full_uri.



989
990
991
# File 'lib/flow_reference_v0_client.rb', line 989

def full_uri
  @full_uri
end

#pathObject (readonly)

Returns the value of attribute path.



989
990
991
# File 'lib/flow_reference_v0_client.rb', line 989

def path
  @path
end

Instance Method Details

#delete(&block) ⇒ Object



1049
1050
1051
# File 'lib/flow_reference_v0_client.rb', line 1049

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

#do_request(klass) ⇒ Object



1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
# File 'lib/flow_reference_v0_client.rb', line 1073

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



1045
1046
1047
# File 'lib/flow_reference_v0_client.rb', line 1045

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

#options(&block) ⇒ Object



1053
1054
1055
# File 'lib/flow_reference_v0_client.rb', line 1053

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

#patch(&block) ⇒ Object



1069
1070
1071
# File 'lib/flow_reference_v0_client.rb', line 1069

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

#post(&block) ⇒ Object



1057
1058
1059
# File 'lib/flow_reference_v0_client.rb', line 1057

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

#put(&block) ⇒ Object



1061
1062
1063
# File 'lib/flow_reference_v0_client.rb', line 1061

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

#with_auth(auth) ⇒ Object



1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
# File 'lib/flow_reference_v0_client.rb', line 1013

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



1039
1040
1041
1042
1043
# File 'lib/flow_reference_v0_client.rb', line 1039

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

#with_header(name, value) ⇒ Object



1003
1004
1005
1006
1007
1008
1009
1010
1011
# File 'lib/flow_reference_v0_client.rb', line 1003

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



1034
1035
1036
1037
# File 'lib/flow_reference_v0_client.rb', line 1034

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

#with_query(params) ⇒ Object



1025
1026
1027
1028
1029
1030
# File 'lib/flow_reference_v0_client.rb', line 1025

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