restool 0.1.5 → 0.1.6

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
  SHA256:
3
- metadata.gz: b9ce87d4cd969d5298ee7c90baef25ac9f2f2c3b725e4ae241a1b00a1b46114b
4
- data.tar.gz: 45766774466195ec86b84048d1aa659302d8cc4b50771a4a73c19246f15d4ec5
3
+ metadata.gz: 939d1069da8b669efb9bc394a55b641ac6ea7a759d0aecf0502d57fb00c26139
4
+ data.tar.gz: 2638de0068c9129d0aa752a79a94d680f857474f64da8da075c045c77bf245e6
5
5
  SHA512:
6
- metadata.gz: f62e492a295bd06e4f8699b19f98d895a66f5fabfd286ac8c64bcc3907194bc3ea463eed3206ee96567fd2793221a295bee8af2cffefa6698e98fbf61acd6e76
7
- data.tar.gz: 379a2006d01cbc9d35e08030f70e690414f77f9d8ce17fe6dc75a8d97a3493daf3b7153dc1d59cbd6b9a18b749accf5e85238ea2d1763bc2f62e97212e77d3ea
6
+ metadata.gz: 76e3401eced2a728940887af09ce40101bd7aaf460e019dc0d4dedc2f36106f6ba807a932fd68956bb62c283904b86919fc1e49c21b60ba8789d1c372b6d2729
7
+ data.tar.gz: 707282f1b15fda1d97b6a71da5bf429f3eab0969ffffa09a9f94beaa81b0a3d32807161273b9f1ed71cd7753c85d9110101ff8e6874405bdbdb2eecfa7523e27
@@ -1,11 +1,12 @@
1
1
  require_relative 'restool/settings/loader'
2
2
  require_relative 'restool/service/restool_service'
3
3
 
4
+ require_relative 'restool/mock/restool'
4
5
 
5
6
  module Restool
6
7
 
7
- def self.create(service_name, &response_handler)
8
- service_config = Restool::Settings::Loader.load(service_name)
8
+ def self.create(service_name, opts = {}, &response_handler)
9
+ service_config = Restool::Settings::Loader.load(service_name, opts)
9
10
 
10
11
  Restool::Service::RestoolService.new(service_config, response_handler)
11
12
  end
@@ -0,0 +1,47 @@
1
+ module Restool
2
+ class RequestLogger
3
+
4
+ def initialize(host, opts)
5
+ @host = host
6
+ @opts = opts
7
+ end
8
+
9
+ def log(request, &http_request)
10
+ log_request(request) if log?
11
+ response = http_request.call
12
+ log_response(response) if log?
13
+
14
+ response
15
+ end
16
+
17
+ def logger
18
+ @opts[:logger]
19
+ end
20
+
21
+ def log?
22
+ if @opts[:log] != nil
23
+ @opts[:log]
24
+ else
25
+ @opts[:logger] != nil
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def log_request(request)
32
+ logger.info { "Restool Service #{@host}" }
33
+ logger.info { "#{request.method.upcase} #{request.path}" }
34
+ logger.info { format_hash(request.headers) }
35
+ logger.debug { format_hash(request.params) }
36
+ end
37
+
38
+ def log_response(response)
39
+ logger.info { "Restool response (status #{response.code})" }
40
+ logger.debug { response.body }
41
+ end
42
+
43
+ def format_hash(headers)
44
+ headers.map { |key, value| "#{key}: #{value}" }.join(", ")
45
+ end
46
+ end
47
+ end
@@ -1,25 +1,32 @@
1
+ require_relative '../settings/loader'
2
+
1
3
  module Restool
2
4
  module Mock
3
- def self.create(service_name, &response_handler)
4
- service_config = Restool::Settings::Loader.load(service_name)
5
-
6
- # remote_client = Restool::Service::RemoteClient.new(service_config.host,
7
- # service_config.verify_ssl,
8
- # service_config.persistent,
9
- # service_config.timeout)
5
+ def self.create(service_name, operation_responses)
6
+ @operation_responses = operation_responses
7
+ @service_config = Restool::Settings::Loader.load(service_name)
10
8
 
11
- class FakeRemoteClient
12
- def initialize
13
- end
9
+ Service.new(@service_config, operation_responses)
10
+ end
14
11
 
15
- def make_request(path, operation_method, params, headers, basic_auth)
12
+ private
16
13
 
17
- end
14
+ class Service
15
+ def initialize(service_config, operation_responses)
16
+ @service_config = service_config
17
+ @operation_responses = operation_responses
18
18
  end
19
19
 
20
+ def method_missing(method, *args, &block)
21
+ if @service_config.operations.map(&:name).include?(method)
22
+ operation_response = @operation_responses[method]
23
+ response_representation = @service_config.operation.response
24
+ representations = @service_config.representations
20
25
 
21
- remote_client = double(make_request)
22
- Restool::Service::RestoolService.new(service_config, response_handler, remote_client)
26
+ Restool::Traversal::Converter.convert(operation_response, response_representation, representations)
27
+ end
28
+ end
23
29
  end
30
+
24
31
  end
25
32
  end
@@ -0,0 +1,15 @@
1
+ module Restool
2
+ class OperationRequest
3
+
4
+ attr_accessor :http_request, :method, :path, :params, :headers
5
+
6
+ def initialize(http_request, method, path, params, headers)
7
+ @http_request = http_request
8
+ @method = method
9
+ @path = path
10
+ @params = params
11
+ @headers = headers
12
+ end
13
+
14
+ end
15
+ end
@@ -1,12 +1,15 @@
1
1
  require 'persistent_http'
2
2
 
3
3
  require_relative 'request_utils'
4
+ require_relative '../logger/request_logger'
4
5
 
5
6
  module Restool
6
7
  module Service
7
8
  class RemoteClient
8
9
 
9
- def initialize(host, verify_ssl, persistent_connection, timeout)
10
+ def initialize(host, verify_ssl, persistent_connection, timeout, opts)
11
+ @request_logger = Restool::RequestLogger.new(host, opts)
12
+
10
13
  @connection = if persistent_connection
11
14
  PersistentHTTP.new(
12
15
  pool_size: persistent_connection.pool_size,
@@ -21,27 +24,25 @@ module Restool
21
24
  else
22
25
  uri = URI.parse(host)
23
26
  http = Net::HTTP.new(uri.host, uri.port)
24
- http.use_ssl = ssl_implied?(uri)
27
+ http.use_ssl = uri.is_a?(URI::HTTPS)
25
28
  http.verify_mode = verify_ssl?(verify_ssl)
26
29
  http.read_timeout = timeout
27
30
  http.open_timeout = timeout
28
- # http.set_debug_output($stdout)
31
+ http.set_debug_output($stdout) if opts[:debug]
29
32
  http
30
33
  end
31
34
  end
32
35
 
33
36
  def make_request(path, method, request_params, headers, basic_auth)
34
- request = RequestUtils.build_request(method, path, request_params, headers, basic_auth)
37
+ operation_request = RequestUtils.build_request(method, path, request_params, headers, basic_auth)
35
38
 
36
- @connection.request(request)
39
+ @request_logger.log(operation_request) do
40
+ @connection.request(operation_request.http_request)
41
+ end
37
42
  end
38
43
 
39
44
  private
40
45
 
41
- def ssl_implied?(uri)
42
- uri.port == 443 || uri.scheme == 'https'
43
- end
44
-
45
46
  def verify_ssl?(verify_ssl_setting)
46
47
  verify_ssl_setting ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE
47
48
  end
@@ -1,3 +1,5 @@
1
+ require_relative 'operation_request'
2
+
1
3
  module Restool
2
4
  module Service
3
5
  module RequestUtils
@@ -23,7 +25,7 @@ module Restool
23
25
 
24
26
  headers.each { |k, v| request[k] = v } if headers
25
27
 
26
- request
28
+ OperationRequest.new(request, method, path, params, headers)
27
29
  end
28
30
 
29
31
  def self.build_base_request(method, path)
@@ -11,7 +11,7 @@ module Restool
11
11
  @service_config = service_config
12
12
  @response_handler = response_handler
13
13
  @remote_client = Restool::Service::RemoteClient.new(service_config.host, service_config.verify_ssl,
14
- service_config.persistent, service_config.timeout)
14
+ service_config.persistent, service_config.timeout, service_config.opts)
15
15
 
16
16
  define_operations(
17
17
  @service_config, method(:make_request), method(:make_request_with_uri_params)
@@ -11,19 +11,19 @@ module Restool
11
11
  DEFAULT_SSL_VERIFY = false
12
12
 
13
13
 
14
- def self.load(service_name)
14
+ def self.load(service_name, opts)
15
15
  service_config = config['services'].detect do |service|
16
16
  service['name'] == service_name
17
17
  end
18
18
 
19
19
  raise "Service #{service_name} not found in configuration" unless service_config
20
20
 
21
- build_service(service_config)
21
+ build_service(service_config, opts)
22
22
  end
23
23
 
24
24
  private
25
25
 
26
- def self.build_service(service_config)
26
+ def self.build_service(service_config, opts)
27
27
  representations = if service_config['representations']
28
28
  build_representations(service_config['representations'])
29
29
  else
@@ -53,7 +53,8 @@ module Restool
53
53
  service_config['timeout'] || DEFAULT_TIMEOUT,
54
54
  representations,
55
55
  basic_auth,
56
- service_config['ssl_verify'] || DEFAULT_SSL_VERIFY
56
+ service_config['ssl_verify'] || DEFAULT_SSL_VERIFY,
57
+ opts
57
58
  )
58
59
  end
59
60
 
@@ -4,7 +4,7 @@ module Restool
4
4
 
5
5
  Operation = Struct.new(:name, :path, :method, :uri_params, :response)
6
6
  OperationResponse = Struct.new(:fields)
7
- Service = Struct.new(:name, :host, :operations, :persistent, :timeout, :representations, :basic_auth, :verify_ssl)
7
+ Service = Struct.new(:name, :host, :operations, :persistent, :timeout, :representations, :basic_auth, :verify_ssl, :opts)
8
8
  Representation = Struct.new(:name, :fields)
9
9
  RepresentationField = Struct.new(:key, :metonym, :type)
10
10
  BasicAuthentication = Struct.new(:user, :password)
@@ -1,3 +1,3 @@
1
1
  module Restool
2
- VERSION = '0.1.5'
2
+ VERSION = '0.1.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Andres Zeni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-29 00:00:00.000000000 Z
11
+ date: 2020-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: persistent_http
@@ -33,8 +33,10 @@ extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
35
  - lib/restool.rb
36
+ - lib/restool/logger/request_logger.rb
36
37
  - lib/restool/mock/restool.rb
37
38
  - lib/restool/service/operation_definer.rb
39
+ - lib/restool/service/operation_request.rb
38
40
  - lib/restool/service/remote_client.rb
39
41
  - lib/restool/service/remote_connector.rb
40
42
  - lib/restool/service/request_utils.rb