eac_rest 0.3.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5875fa870a5d59b882698adc7efcc61d87fc1d365588e243279afd142c2f4c8e
4
- data.tar.gz: 788339b30bf71f9d61ac459329ae31668dda46be19f1958db604a13135c23253
3
+ metadata.gz: 9e61a282ddea34e4c91a02b4e00029ebe618d6b4ec6e0e8e19341efd1133a495
4
+ data.tar.gz: 27459c0f50091b22a719a9e969e775caf90946c539147ca97189f0202279fd87
5
5
  SHA512:
6
- metadata.gz: 8c7fb1df021bf9452e6b631177444d84aa63f81d7ec954c0f15baa20a67eb5d881ffd1c483e896b9d34d54aebbaed905338052582d3be86ebb1a2ded8ec4469d
7
- data.tar.gz: 70f2b301425aa6c9172de2e87ef319205e7200f6fa998d01254acbec3da06b1987b654f67189da50ea715618c3a7a0f342fdb4af83e7734343be59d3c7700148
6
+ metadata.gz: 4d0c93473149b8688bd9ae95ed4079609f5c48b8a6d5d1a0ce26de10af8577055c2966a18428482cb80b407e6c478eda0390172e972e6b3d698dba0c40916c09
7
+ data.tar.gz: 689cd7e948b2b59b3e2c0a5e530eb14e16c59bfdad5fb148c681b64e1cab1825ee2b1502fedc6f619af5be4deb0be0adcbc6f086ffcae452faad2deccf34d0fa
data/lib/eac_rest/api.rb CHANGED
@@ -8,11 +8,14 @@ module EacRest
8
8
  # * self.issue_get_url_suffix(provider_issue_id)
9
9
  class Api
10
10
  require_sub __FILE__, include_modules: true
11
- common_constructor :root_url, :username, :password, default: [nil, nil]
11
+ attr_accessor :ssl_verify
12
+ common_constructor :root_url, :username, :password, default: [nil, nil] do
13
+ self.ssl_verify = true
14
+ end
12
15
 
13
16
  def request(service_url_suffix, headers = {}, &body_data_proc)
14
17
  r = ::EacRest::Request.new(build_service_url(service_url_suffix),
15
- body_data_proc)
18
+ body_data_proc).ssl_verify(ssl_verify)
16
19
  headers.each { |name, value| r = r.header(name, value) }
17
20
  r = r.autenticate(username, password) if username.present?
18
21
  r
@@ -26,13 +29,22 @@ module EacRest
26
29
  end
27
30
  end
28
31
 
32
+ # @return [Addressable::URI]
29
33
  def build_service_url(suffix)
30
- s = ::Addressable::URI.parse(suffix)
34
+ r = ::Addressable::URI.parse(suffix)
35
+ return r if r.scheme.present?
36
+
37
+ s = build_service_url_suffix(suffix)
31
38
  r = ::Addressable::URI.parse(root_url)
32
39
  r.path += s.path
33
40
  r.query_values = r.query_values(::Array).if_present([]) +
34
41
  s.query_values(::Array).if_present([])
35
- r.to_s
42
+ r
43
+ end
44
+
45
+ # @return [Addressable::URI]
46
+ def build_service_url_suffix(suffix)
47
+ ::Addressable::URI.parse(suffix)
36
48
  end
37
49
  end
38
50
  end
@@ -7,11 +7,13 @@ require 'ostruct'
7
7
 
8
8
  module EacRest
9
9
  class Request
10
+ BOOLEAN_MODIFIERS = %w[ssl_verify ssl_verify_peer ssl_verify_host].freeze
10
11
  COMMON_MODIFIERS = %w[auth body_data verb].freeze
11
12
  HASH_MODIFIERS = %w[header].freeze
12
- MODIFIERS = COMMON_MODIFIERS + HASH_MODIFIERS.map(&:pluralize)
13
+ MODIFIERS = COMMON_MODIFIERS + BOOLEAN_MODIFIERS + HASH_MODIFIERS.map(&:pluralize)
13
14
 
14
15
  enable_immutable
16
+ immutable_accessor(*BOOLEAN_MODIFIERS, type: :boolean)
15
17
  immutable_accessor(*COMMON_MODIFIERS, type: :common)
16
18
  immutable_accessor(*HASH_MODIFIERS, type: :hash)
17
19
 
@@ -56,6 +58,25 @@ module EacRest
56
58
  curl.headers.merge!(headers)
57
59
  end
58
60
 
61
+ def build_curl_ssl_verify(curl)
62
+ return if ssl_verify?.nil?
63
+
64
+ curl.ssl_verify_host = ssl_verify?
65
+ curl.ssl_verify_peer = ssl_verify?
66
+ end
67
+
68
+ def build_curl_ssl_verify_peer(curl)
69
+ return if ssl_verify_peer?.nil?
70
+
71
+ curl.ssl_verify_peer = ssl_verify_peer?
72
+ end
73
+
74
+ def build_curl_ssl_verify_host(curl)
75
+ return if ssl_verify_host?.nil?
76
+
77
+ curl.ssl_verify_peer = ssl_verify_host?
78
+ end
79
+
59
80
  def build_curl_verb(curl)
60
81
  curl.set(
61
82
  :customrequest,
@@ -6,6 +6,18 @@ require 'json'
6
6
 
7
7
  module EacRest
8
8
  class Response < ::StandardError
9
+ HEADER_LINE_PARSER = /\A([^:]+):(.*)\z/.to_parser do |m|
10
+ [m[1].strip, m[2].strip]
11
+ end
12
+
13
+ # https://www.w3.org/wiki/LinkHeader
14
+ LINKS_HEADER_NAME = 'Link'
15
+
16
+ # https://www.w3.org/wiki/LinkHeader
17
+ LINK_PARSER = /\A\<(.+)\>\s*;\s*rel\s*=\s*\"(.*)\"\z/.to_parser do |m|
18
+ [m[2], m[1]]
19
+ end
20
+
9
21
  common_constructor :curl, :body_data_proc
10
22
 
11
23
  def body_data
@@ -23,7 +35,7 @@ module EacRest
23
35
  body_data
24
36
  end
25
37
 
26
- delegate :body_str, :headers, to: :performed_curl
38
+ delegate :body_str, to: :performed_curl
27
39
 
28
40
  def body_str_or_raise
29
41
  raise_unless_200
@@ -31,6 +43,26 @@ module EacRest
31
43
  body_str
32
44
  end
33
45
 
46
+ def header(name)
47
+ hash_search(headers, name)
48
+ end
49
+
50
+ def headers
51
+ performed_curl.header_str.each_line.map(&:strip)[1..-1].reject(&:blank?)
52
+ .map { |header_line| HEADER_LINE_PARSER.parse!(header_line) }
53
+ .to_h
54
+ end
55
+
56
+ def link(rel)
57
+ hash_search(links, rel)
58
+ end
59
+
60
+ def links
61
+ header(LINKS_HEADER_NAME).if_present({}) do |v|
62
+ v.split(',').map { |w| LINK_PARSER.parse!(w.strip) }.to_h
63
+ end
64
+ end
65
+
34
66
  def raise_unless_200
35
67
  return nil if status == 200
36
68
 
@@ -57,6 +89,14 @@ module EacRest
57
89
  Hash.from_xml(body_str)
58
90
  end
59
91
 
92
+ def hash_search(hash, key)
93
+ key = key.to_s.downcase
94
+ hash.each do |k, v|
95
+ return v if k.to_s.downcase == key
96
+ end
97
+ nil
98
+ end
99
+
60
100
  def perform
61
101
  @perform ||= begin
62
102
  curl.perform || raise("CURL perform failed for #{url}")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EacRest
4
- VERSION = '0.3.4'
4
+ VERSION = '0.6.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eac_rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo H. Bogoni
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-25 00:00:00.000000000 Z
11
+ date: 2022-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_ruby_utils