eac_rest 0.4.0 → 0.5.0

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: 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