flowcommerce 0.1.22 → 0.1.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1842b096c2da037d9f4f7d4fb266bf5843e244e3
4
- data.tar.gz: 45701273b18873308ddb1556a2f1ffb4615c2ee2
3
+ metadata.gz: 0754634abaa88c538758514d93837c807d6668c9
4
+ data.tar.gz: 498950a55b09d06d15580dac8d02ca0a97ca1a28
5
5
  SHA512:
6
- metadata.gz: 9f11ea891ca18b1dafe753c8db3ec7d34f8116b9f961d31a94cc1fd2f584da8a4b9177ea21000fa35e6f841ef69e787447387a073cb79a298b40f35158fb922f
7
- data.tar.gz: 4735c0c33eed10a4d33fe74ff492d2ab8ee64c94a15fac952b0f7f7f7ad9132ae743739f7d35f39ea56ba4518d3da7664dc05bbafb99ab48d095c5b6a5382944
6
+ metadata.gz: 509f5bad7cc26ce4be51514c05148c3034a8e20963f523fda9dc338ba06addf1276798caefa05f0b496578672b6edc2c67dacedcfbd83e83501b7c11c8dad258
7
+ data.tar.gz: 2f5597d0c73b79e0d3240770942e6a458c03881fd679410854932a403a87e963bd9f0855c15d53f55377f551f5e3b81ac99ce86abedcb57bf15b99d831edaae4
@@ -13,6 +13,7 @@ module FlowCommerce
13
13
  def FlowCommerce.instance(opts={})
14
14
  base_url = opts[:base_url].to_s.strip
15
15
  token = opts[:token].to_s.strip
16
+ http_handler = opts[:http_handler]
16
17
 
17
18
  if token.empty?
18
19
  token = ENV['FLOW_TOKEN'].to_s.strip
@@ -38,9 +39,9 @@ module FlowCommerce
38
39
  auth = Io::Flow::V0::HttpClient::Authorization.basic(token)
39
40
 
40
41
  if base_url.empty?
41
- Io::Flow::V0::Client.at_base_url(:authorization => auth)
42
+ Io::Flow::V0::Client.at_base_url(:authorization => auth, :http_handler => http_handler)
42
43
  else
43
- Io::Flow::V0::Client.new(base_url, :authorization => auth)
44
+ Io::Flow::V0::Client.new(base_url, :authorization => auth, :http_handler => http_handler)
44
45
  end
45
46
  end
46
47
 
@@ -1,6 +1,6 @@
1
1
  # Generated by apidoc - http://www.apidoc.me
2
2
  # Service version: 0.2.79
3
- # apidoc:0.11.74 http://www.apidoc.me/flow/api/0.2.80/ruby_client
3
+ # apidoc:0.11.75 http://www.apidoc.me/flow/api/0.2.80/ruby_client
4
4
 
5
5
  require 'cgi'
6
6
  require 'net/http'
@@ -25,7 +25,7 @@ module Io
25
25
 
26
26
  BASE_URL = 'https://api.flow.io' unless defined?(Constants::BASE_URL)
27
27
  NAMESPACE = 'io.flow.v0' unless defined?(Constants::NAMESPACE)
28
- USER_AGENT = 'apidoc:0.11.74 http://www.apidoc.me/flow/api/0.2.80/ruby_client' unless defined?(Constants::USER_AGENT)
28
+ USER_AGENT = 'apidoc:0.11.75 http://www.apidoc.me/flow/api/0.2.80/ruby_client' unless defined?(Constants::USER_AGENT)
29
29
  VERSION = '0.2.79' unless defined?(Constants::VERSION)
30
30
  VERSION_MAJOR = 0 unless defined?(VERSION_MAJOR)
31
31
 
@@ -35,8 +35,11 @@ module Io
35
35
 
36
36
  def initialize(url, opts={})
37
37
  @url = HttpClient::Preconditions.assert_class('url', url, String)
38
+ @base_url = URI(url)
38
39
  @authorization = HttpClient::Preconditions.assert_class_or_nil('authorization', opts.delete(:authorization), HttpClient::Authorization)
39
40
  @default_headers = HttpClient::Preconditions.assert_class('default_headers', opts.delete(:default_headers) || {}, Hash)
41
+ @http_handler = opts.delete(:http_handler) || HttpClient::DefaultHttpHandler.new
42
+
40
43
  HttpClient::Preconditions.assert_empty_opts(opts)
41
44
  HttpClient::Preconditions.check_state(url.match(/http.+/i), "URL[%s] must start with http" % url)
42
45
  end
@@ -48,7 +51,7 @@ module Io
48
51
 
49
52
  def request(path=nil)
50
53
  HttpClient::Preconditions.assert_class_or_nil('path', path, String)
51
- request = HttpClient::Request.new(URI.parse(@url + path.to_s)).with_header('User-Agent', Constants::USER_AGENT).with_header('X-Apidoc-Version', Constants::VERSION).with_header('X-Apidoc-Version-Major', Constants::VERSION_MAJOR)
54
+ request = HttpClient::Request.new(@http_handler, @base_url, path.to_s).with_header('User-Agent', Constants::USER_AGENT).with_header('X-Apidoc-Version', Constants::VERSION).with_header('X-Apidoc-Version-Major', Constants::VERSION_MAJOR)
52
55
 
53
56
  @default_headers.each do |key, value|
54
57
  request = request.with_header(key, value)
@@ -22949,10 +22952,86 @@ module Io
22949
22952
  # ===== END OF SERVICE DEFINITION =====
22950
22953
  module HttpClient
22951
22954
 
22955
+ class HttpHandler
22956
+
22957
+ # Returns a client instance to use
22958
+ #
22959
+ # @param base_uri The base URI for this API
22960
+ # @param path the Requested full http path (including any query strings)
22961
+ def instance(base_uri, path)
22962
+ raise "Override in subclass"
22963
+ end
22964
+
22965
+ end
22966
+
22967
+ class HttpHandlerInstance
22968
+
22969
+ # Executes a request. The provided request object will be an
22970
+ # instance of Net::HTTP (e.g. Net::HTTP::Get)
22971
+ def execute(request)
22972
+ raise "Override in subclass"
22973
+ end
22974
+
22975
+ end
22976
+
22977
+ class DefaultHttpHandler < HttpHandler
22978
+
22979
+ def instance(base_uri, path)
22980
+ DefaultHttpHandlerInstance.new(base_uri)
22981
+ end
22982
+
22983
+ end
22984
+
22985
+ class DefaultHttpHandlerInstance < HttpHandlerInstance
22986
+
22987
+ attr_reader :client
22988
+
22989
+ def initialize(base_uri)
22990
+ @base_uri = Preconditions.assert_class('base_uri', base_uri, URI)
22991
+ @client = Net::HTTP.new(@base_uri.host, @base_uri.port)
22992
+ if @base_uri.scheme == "https"
22993
+ configure_ssl
22994
+ end
22995
+ end
22996
+
22997
+ def execute(request)
22998
+ response = begin
22999
+ @client.request(request)
23000
+ rescue SocketError => e
23001
+ raise Exception.new("Error accessing uri[#{full_uri(request.path)}]: #{e}")
23002
+ end
23003
+
23004
+ case response
23005
+ when Net::HTTPSuccess
23006
+ response.body
23007
+ else
23008
+ body = response.body rescue nil
23009
+ raise HttpClient::ServerError.new(response.code.to_i, response.message, :body => body, :uri => full_uri(request.path).to_s)
23010
+ end
23011
+ end
23012
+
23013
+ def full_uri(path)
23014
+ File.join(@base_uri.to_s, path)
23015
+ end
23016
+
23017
+ # Called to configure SSL if the base uri requires it
23018
+ def configure_ssl
23019
+ @client.use_ssl = true
23020
+ @client.verify_mode = OpenSSL::SSL::VERIFY_PEER
23021
+ @client.cert_store = OpenSSL::X509::Store.new
23022
+ @client.cert_store.set_default_paths
23023
+ end
23024
+
23025
+ end
23026
+
22952
23027
  class Request
22953
23028
 
22954
- def initialize(uri)
22955
- @uri = Preconditions.assert_class('uri', uri, URI)
23029
+ attr_reader :path
23030
+
23031
+ def initialize(http_handler, base_uri, path)
23032
+ @http_handler = http_handler
23033
+ @base_uri = Preconditions.assert_class('base_uri', base_uri, URI)
23034
+ @path = Preconditions.assert_class('path', path, String)
22956
23035
  @params = nil
22957
23036
  @body = nil
22958
23037
  @auth = nil
@@ -23002,26 +23081,6 @@ module Io
23002
23081
  self
23003
23082
  end
23004
23083
 
23005
- # Creates a new Net:HTTP client. The client returned should be
23006
- # fully configured to make a request.
23007
- def new_http_client
23008
- client = Net::HTTP.new(@uri.host, @uri.port)
23009
- if @uri.scheme == "https"
23010
- configure_ssl(client)
23011
- end
23012
- client
23013
- end
23014
-
23015
- # If HTTPS is required, this method accepts an HTTP Client and configures SSL
23016
- def configure_ssl(http)
23017
- Preconditions.assert_class('http', http, Net::HTTP)
23018
- http.use_ssl = true
23019
- http.ssl_version = :TLSv1_2
23020
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
23021
- http.cert_store = OpenSSL::X509::Store.new
23022
- http.cert_store.set_default_paths
23023
- end
23024
-
23025
23084
  def get(&block)
23026
23085
  do_request(Net::HTTP::Get, &block)
23027
23086
  end
@@ -23053,7 +23112,7 @@ module Io
23053
23112
  def do_request(klass)
23054
23113
  Preconditions.assert_class('klass', klass, Class)
23055
23114
 
23056
- uri = @uri.to_s
23115
+ uri = path.dup
23057
23116
  if q = to_query(@params)
23058
23117
  uri += "?%s" % q
23059
23118
  end
@@ -23086,10 +23145,10 @@ module Io
23086
23145
  request.add_field(key, value)
23087
23146
  }
23088
23147
 
23089
- curl << "'%s'" % uri
23148
+ curl << "'%s%s'" % [@base_uri, path]
23090
23149
  # DEBUG puts curl.join(" ")
23091
23150
 
23092
- raw_response = http_request(request)
23151
+ raw_response = @http_handler.instance(@base_uri, request.path).execute(request)
23093
23152
  response = raw_response.to_s == "" ? nil : JSON.parse(raw_response)
23094
23153
 
23095
23154
  if block_given?
@@ -23111,21 +23170,6 @@ module Io
23111
23170
  parts.empty? ? nil : parts.join("&")
23112
23171
  end
23113
23172
 
23114
- def http_request(request)
23115
- response = begin
23116
- new_http_client.request(request)
23117
- rescue SocketError => e
23118
- raise Exception.new("Error accessing uri[#{@uri}]: #{e}")
23119
- end
23120
-
23121
- case response
23122
- when Net::HTTPSuccess
23123
- response.body
23124
- else
23125
- body = response.body rescue nil
23126
- raise HttpClient::ServerError.new(response.code.to_i, response.message, :body => body, :uri => @uri.to_s)
23127
- end
23128
- end
23129
23173
  end
23130
23174
 
23131
23175
  class ServerError < StandardError
data/lib/flowcommerce.rb CHANGED
@@ -2,3 +2,4 @@ dir = File.dirname(__FILE__)
2
2
 
3
3
  load File.join(dir, 'flow_commerce/flow_api_v0_client.rb')
4
4
  load File.join(dir, 'flow_commerce/client.rb')
5
+
@@ -0,0 +1,39 @@
1
+ require 'logger'
2
+ require 'time'
3
+
4
+ class LoggingHttpClient < ::Io::Flow::V0::HttpClient::DefaultHttpHandler
5
+
6
+ def initialize(base_uri, path)
7
+ super(base_uri)
8
+ @logger = Logger.new(path)
9
+ end
10
+
11
+ def execute(request)
12
+ original_open = client.open_timeout
13
+ original_read = client.read_timeout
14
+
15
+ start_time = Time.now.utc.round(10)
16
+ @logger.info "start %s %s" % [request.method, request.path]
17
+
18
+ if request.path.start_with?("/organizations")
19
+ # Contrived example to show how client settings can be adjusted
20
+ client.open_timeout = 60
21
+ client.read_timeout = 60
22
+ end
23
+
24
+ begin
25
+ super
26
+ ensure
27
+ client.open_timeout = original_open
28
+ client.read_timeout = original_read
29
+
30
+ end_time = Time.now.utc.round(10)
31
+ duration = ((end_time - start_time)*1000).round(0)
32
+ @logger.info "complete %s %s %s ms" % [request.method, request.path, duration]
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flowcommerce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.22
4
+ version: 0.1.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flow Commerce, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-18 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bigdecimal
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Native ruby client for the Flow REST API. Detailed information at http://apidoc.me/flow
@@ -48,6 +48,7 @@ files:
48
48
  - lib/flow_commerce/client.rb
49
49
  - lib/flow_commerce/flow_api_v0_client.rb
50
50
  - lib/flowcommerce.rb
51
+ - lib/logging_http_client.rb
51
52
  homepage: https://github.com/flowcommerce/ruby-sdk
52
53
  licenses:
53
54
  - MIT
@@ -58,17 +59,17 @@ require_paths:
58
59
  - lib
59
60
  required_ruby_version: !ruby/object:Gem::Requirement
60
61
  requirements:
61
- - - ">="
62
+ - - '>='
62
63
  - !ruby/object:Gem::Version
63
64
  version: '0'
64
65
  required_rubygems_version: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - ">="
67
+ - - '>='
67
68
  - !ruby/object:Gem::Version
68
69
  version: '0'
69
70
  requirements: []
70
71
  rubyforge_project:
71
- rubygems_version: 2.6.8
72
+ rubygems_version: 2.0.14.1
72
73
  signing_key:
73
74
  specification_version: 4
74
75
  summary: Native ruby client for the Flow REST API.