eac_rest 0.4.0 → 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: 310b551efbd64e07427242a6b7cbdcb0678dc65a7220bb9a9ba89b51f5e2ba88
4
- data.tar.gz: 59e382dfaa464246809228f528575a9b50cb75e94a35ce197b82332456ec038a
3
+ metadata.gz: ec5c659c04fb86d3d9764a999b685150bc2ccde5933584fcb36efe95ea98acaf
4
+ data.tar.gz: 60ccb2b06749fdf1a7543871c85b8b6a9e94aae9101284ed84a7d4393b39feb9
5
5
  SHA512:
6
- metadata.gz: 533279ec28aaf77ecda2476afd7d6c34b5bea27bb9530ce4341498f3e06a78610d81591d7acda15928afebdd998de7dbc2ca68e88bd0080f56715cd286de40e3
7
- data.tar.gz: 69d7939a8d2aef108dccc7ebf6d4584e7481ad6e936addfda9a6ca7f30e3057474a300a3c35bd84b4c729f2a015ec58e37c39b6f63908674c5e1c2536d60df1f
6
+ metadata.gz: 532f9ee524f10fa97f41e94b674a3cc1fa01913fb86912e418c5e654fd3a9ab19cb8458aa9968cb7c660fc28360f331b477d13685bac884db2ca902c4c5dd865
7
+ data.tar.gz: 289128a0de9b339b1779cc74c1f4b306de7f5002e902c2776473fd2fd63abfe6b1853d3cd6f1a4b0cf8297abf19c8de5a3ec4a3277eed1ca71ab0108da80c042
data/lib/eac_rest/api.rb CHANGED
@@ -28,12 +28,20 @@ module EacRest
28
28
 
29
29
  # @return [Addressable::URI]
30
30
  def build_service_url(suffix)
31
- 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)
32
35
  r = ::Addressable::URI.parse(root_url)
33
36
  r.path += s.path
34
37
  r.query_values = r.query_values(::Array).if_present([]) +
35
38
  s.query_values(::Array).if_present([])
36
39
  r
37
40
  end
41
+
42
+ # @return [Addressable::URI]
43
+ def build_service_url_suffix(suffix)
44
+ ::Addressable::URI.parse(suffix)
45
+ end
38
46
  end
39
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.4.0'
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.4.0
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: 2022-02-28 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