eac_rest 0.3.3 → 0.5.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: 275b7cb77a0cf2c309381dcd4759579584b53663a05fd1844e8bf7fb40430066
4
- data.tar.gz: 50fde4de859dcdcb38af6b8d3c808e6b2dc0ab328079f6faae8c39cc296b2021
3
+ metadata.gz: ec5c659c04fb86d3d9764a999b685150bc2ccde5933584fcb36efe95ea98acaf
4
+ data.tar.gz: 60ccb2b06749fdf1a7543871c85b8b6a9e94aae9101284ed84a7d4393b39feb9
5
5
  SHA512:
6
- metadata.gz: b4402b89378a23d574ee3137d379c94af5e541ee70d7a9cec55235722231eb51c1380f9a5a1d2ec22745b3133b5ee1b32136bc479332e588bc10210fab4ff4c8
7
- data.tar.gz: 8679dc9886b157040d7f05da6849b304c123c1fc0e97ec33be35f39e0fefd03eda5629a73691003c0773b9b7a067da396c4cd38632918ea0955fb31b261f0b6f
6
+ metadata.gz: 532f9ee524f10fa97f41e94b674a3cc1fa01913fb86912e418c5e654fd3a9ab19cb8458aa9968cb7c660fc28360f331b477d13685bac884db2ca902c4c5dd865
7
+ data.tar.gz: 289128a0de9b339b1779cc74c1f4b306de7f5002e902c2776473fd2fd63abfe6b1853d3cd6f1a4b0cf8297abf19c8de5a3ec4a3277eed1ca71ab0108da80c042
data/lib/eac_rest/api.rb CHANGED
@@ -26,13 +26,22 @@ module EacRest
26
26
  end
27
27
  end
28
28
 
29
+ # @return [Addressable::URI]
29
30
  def build_service_url(suffix)
30
- s = ::Addressable::URI.parse(suffix)
31
+ r = ::Addressable::URI.parse(suffix)
32
+ return r if r.scheme.present?
33
+
34
+ s = build_service_url_suffix(suffix)
31
35
  r = ::Addressable::URI.parse(root_url)
32
36
  r.path += s.path
33
37
  r.query_values = r.query_values(::Array).if_present([]) +
34
38
  s.query_values(::Array).if_present([])
35
- r.to_s
39
+ r
40
+ end
41
+
42
+ # @return [Addressable::URI]
43
+ def build_service_url_suffix(suffix)
44
+ ::Addressable::URI.parse(suffix)
36
45
  end
37
46
  end
38
47
  end
@@ -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.3'
4
+ VERSION = '0.5.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.3
4
+ version: 0.5.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-24 00:00:00.000000000 Z
11
+ date: 2022-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eac_ruby_utils
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.46'
19
+ version: '0.70'
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
- version: '0.46'
26
+ version: '0.70'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: eac_ruby_gem_support
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.2'
33
+ version: '0.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.2'
40
+ version: '0.3'
41
41
  description:
42
42
  email:
43
43
  executables: []