relaton 1.8.0 → 1.9.2

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +1 -11
  3. data/.rubocop.yml +1 -1
  4. data/docs/README.adoc +7 -6
  5. data/lib/relaton/db.rb +36 -3
  6. data/lib/relaton/processor.rb +13 -2
  7. data/lib/relaton/registry.rb +12 -0
  8. data/lib/relaton/version.rb +1 -1
  9. data/relaton.gemspec +22 -22
  10. data/spec/relaton/db_spec.rb +4 -2
  11. data/spec/relaton/processor_spec.rb +4 -0
  12. data/spec/relaton/{regirtry_spec.rb → registry_spec.rb} +14 -0
  13. data/spec/relaton_spec.rb +26 -12
  14. data/spec/vcr_cassetes/api_relaton_org.yml +57 -0
  15. data/spec/vcr_cassetes/api_relaton_org_unavailable.yml +198 -0
  16. data/spec/vcr_cassetes/async_fetch.yml +1572 -1416
  17. data/spec/vcr_cassetes/bsi_bs_en_iso_8848.yml +113 -114
  18. data/spec/vcr_cassetes/cc_dir_10005_2019.yml +20 -20
  19. data/spec/vcr_cassetes/cen_en_10160_1999.yml +249 -0
  20. data/spec/vcr_cassetes/cie_001_1980.yml +8 -8
  21. data/spec/vcr_cassetes/ecma_6.yml +8 -8
  22. data/spec/vcr_cassetes/fisp_140.yml +6 -59
  23. data/spec/vcr_cassetes/gb_t_20223_2006.yml +8 -8
  24. data/spec/vcr_cassetes/iec_60050_102_2007.yml +28 -28
  25. data/spec/vcr_cassetes/iec_combined_included.yml +100 -100
  26. data/spec/vcr_cassetes/ieee_528_2019.yml +37 -37
  27. data/spec/vcr_cassetes/iho_b_11.yml +8 -8
  28. data/spec/vcr_cassetes/iso_111111119115_1.yml +45 -26
  29. data/spec/vcr_cassetes/iso_19115_1.yml +57 -41
  30. data/spec/vcr_cassetes/iso_19115_1_2.yml +113 -81
  31. data/spec/vcr_cassetes/iso_19115_all_parts.yml +198 -0
  32. data/spec/vcr_cassetes/iso_19133_2005.yml +198 -0
  33. data/spec/vcr_cassetes/iso_cd_14093.yml +202 -0
  34. data/spec/vcr_cassetes/iso_combined_applied.yml +114 -82
  35. data/spec/vcr_cassetes/iso_combined_included.yml +112 -80
  36. data/spec/vcr_cassetes/itu_combined_included.yml +315 -199
  37. data/spec/vcr_cassetes/ogc_19_025r1.yml +14 -13074
  38. data/spec/vcr_cassetes/omg_ami4ccm_1_0.yml +4 -4
  39. data/spec/vcr_cassetes/rfc_8341.yml +8 -8
  40. data/spec/vcr_cassetes/sp_800_38b.yml +6 -59
  41. data/spec/vcr_cassetes/un_rtade_cefact_2004_32.yml +34 -36
  42. data/spec/vcr_cassetes/w3c_json_ld11.yml +12 -12
  43. metadata +96 -54
  44. data/spec/vcr_cassetes/19133_2005.yml +0 -182
  45. data/spec/vcr_cassetes/hist_cmbined_included.yml +0 -105
  46. data/spec/vcr_cassetes/iso_19115.yml +0 -182
  47. data/spec/vcr_cassetes/iso_awi_14093.yml +0 -182
  48. data/spec/vcr_cassetes/iso_iec_guide_2.yml +0 -232
  49. data/spec/vcr_cassetes/rfc_unsuccess.yml +0 -70
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da9850bded053378f5adfddf9df94595b2fc5f7bf332a683c6ef179ffc3e8526
4
- data.tar.gz: 024d0ed9038f3d3cfd71d31e69037f22c7fe6a2bfcdb51b6ab3f0a1d83e4c919
3
+ metadata.gz: 00617ed8db3b679a9c44d7b8854b17c16d48f10b84a30bbc2e175113d02e9025
4
+ data.tar.gz: 198a87943ebe8f2ffdeabfc0c1ec12a9499ec9642d90ca393a8c26440f3acf3f
5
5
  SHA512:
6
- metadata.gz: 2b3222bf273ef4b5391394c85754d1feaacc123c420f4ee868b1f76b930f62f9532b9970d3e40de64127a1f743a27ad6d5ed0f473fc4b6269a144a930d500555
7
- data.tar.gz: 95895e7ab8061bf0d492efaf02b0f5c049b37bef5c7c21617a477bcd122d00d2a381fd05427856266a87631917a07f08a008518d0692141ce7aefede8d1e78e0
6
+ metadata.gz: 2bf33ca669f3b719eea8e9add8a107e9f54e86ffcfda53d3845fe5dd109f08cde651b08024dda622f5d3438f8dce51d142c8b1f886e5b45b7ef481242b9212ea
7
+ data.tar.gz: bf242855dfb87ff3920907cf69616b2831c8ce35e65342327d0cfee3182b252bbceca244fbd30cdb097f09befc90769c9c4b72847b52cea852ddd3dc9c2d7441
@@ -16,19 +16,9 @@ jobs:
16
16
  strategy:
17
17
  fail-fast: false
18
18
  matrix:
19
- ruby: [ '2.7', '2.6', '2.5', '2.4' ]
19
+ ruby: [ '3.0', '2.7', '2.6', '2.5' ]
20
20
  os: [ ubuntu-latest, windows-latest, macos-latest ]
21
21
  experimental: [ false ]
22
- include:
23
- - ruby: '3.0'
24
- os: 'ubuntu-latest'
25
- experimental: true
26
- - ruby: '3.0'
27
- os: 'windows-latest'
28
- experimental: true
29
- - ruby: '3.0'
30
- os: 'macos-latest'
31
- experimental: true
32
22
  steps:
33
23
  - uses: actions/checkout@v2
34
24
  with:
data/.rubocop.yml CHANGED
@@ -5,6 +5,6 @@
5
5
  inherit_from:
6
6
  - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
7
  AllCops:
8
- TargetRubyVersion: 2.4
8
+ TargetRubyVersion: 2.5
9
9
  Rails:
10
10
  Enabled: false
data/docs/README.adoc CHANGED
@@ -182,20 +182,21 @@ x = db.fetch_db("ISO 5749")
182
182
  # prepare queue for results
183
183
  results = Queue.new
184
184
 
185
- # references ot fetch
185
+ # references to fetch
186
186
  refs = ["ISO 19011", "ISO 19115"]
187
187
 
188
188
  # fetch documents
189
189
  refs.each do |ref|
190
- db.fetch_async(ref) do |doc|
191
- results << [ref, doc]
190
+ db.fetch_async(ref, ref: ref) do |doc, other_args|
191
+ results << [doc, other_args[:ref]]
192
192
  end
193
193
  end
194
194
 
195
- # wait until documets fetching
195
+ # wait until all the documents fetching
196
196
  refs.size.times do
197
- ref, doc = results.pop
198
- # do thatever you need with result x
197
+ doc, ref = results.pop
198
+ # do whatever you need with the result
199
+ # in case request error doc will be instance of Relaton::RequestError
199
200
  end
200
201
  ----
201
202
 
data/lib/relaton/db.rb CHANGED
@@ -99,16 +99,20 @@ module Relaton
99
99
  end
100
100
 
101
101
  # Fetch asynchronously
102
- def fetch_async(code, year = nil, opts = {}, &_block) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
102
+ def fetch_async(code, year = nil, opts = {}, **others, &_block) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
103
103
  stdclass = standard_class code
104
104
  if stdclass
105
105
  unless @queues[stdclass]
106
106
  processor = @registry.processors[stdclass]
107
- wp = WorkersPool.new(processor.threads) { |args| yield fetch *args }
107
+ wp = WorkersPool.new(processor.threads) do |args|
108
+ yield fetch(*args[0..2]), **args[3]
109
+ rescue RelatonBib::RequestError => e
110
+ yield e, **args[3]
111
+ end
108
112
  @queues[stdclass] = { queue: Queue.new, workers_pool: wp }
109
113
  Thread.new { process_queue @queues[stdclass] }
110
114
  end
111
- @queues[stdclass][:queue] << [code, year, opts]
115
+ @queues[stdclass][:queue] << [code, year, opts, others]
112
116
  else yield nil
113
117
  end
114
118
  end
@@ -469,5 +473,34 @@ module Relaton
469
473
  def process_queue(qwp)
470
474
  while args = qwp[:queue].pop; qwp[:workers_pool] << args end
471
475
  end
476
+
477
+ class << self
478
+ # Initialse and return relaton instance, with local and global cache names
479
+ # local_cache: local cache name; none created if nil; "relaton" created
480
+ # if empty global_cache: boolean to create global_cache
481
+ # flush_caches: flush caches
482
+ def init_bib_caches(**opts) # rubocop:disable Metrics/CyclomaticComplexity
483
+ globalname = global_bibliocache_name if opts[:global_cache]
484
+ localname = local_bibliocache_name(opts[:local_cache])
485
+ flush_caches globalname, localname if opts[:flush_caches]
486
+ Relaton::Db.new(globalname, localname)
487
+ end
488
+
489
+ private
490
+
491
+ def flush_caches(gcache, lcache)
492
+ FileUtils.rm_rf gcache unless gcache.nil?
493
+ FileUtils.rm_rf lcache unless lcache.nil?
494
+ end
495
+
496
+ def global_bibliocache_name
497
+ "#{Dir.home}/.relaton/cache"
498
+ end
499
+
500
+ def local_bibliocache_name(cachename)
501
+ cachename = "relaton" if cachename.nil? || cachename.empty?
502
+ "#{cachename}/cache"
503
+ end
504
+ end
472
505
  end
473
506
  end
@@ -1,9 +1,16 @@
1
1
  module Relaton
2
2
  class Processor
3
+ # @rerurn [Symbol]
3
4
  attr_reader :short
4
- attr_reader :prefix
5
+
6
+ # @return [String]
7
+ attr_reader :prefix, :idtype
8
+
9
+ # @return [Regexp]
5
10
  attr_reader :defaultprefix
6
- attr_reader :idtype
11
+
12
+ # @return [Array<String>]
13
+ attr_reader :datasets
7
14
 
8
15
  def initialize
9
16
  raise "This is an abstract class!"
@@ -13,6 +20,10 @@ module Relaton
13
20
  raise "This is an abstract class!"
14
21
  end
15
22
 
23
+ def fetch_data(_source, _opts)
24
+ raise "This is an abstract class!"
25
+ end
26
+
16
27
  def from_xml(_xml)
17
28
  raise "This is an abstract class!"
18
29
  end
@@ -9,6 +9,7 @@ module Relaton
9
9
  relaton_gb relaton_iec relaton_ietf relaton_iso relaton_itu relaton_nist
10
10
  relaton_ogc relaton_calconnect relaton_omg relaton_un relaton_w3c
11
11
  relaton_ieee relaton_iho relaton_bipm relaton_ecma relaton_cie relaton_bsi
12
+ relaton_cen
12
13
  ].freeze
13
14
 
14
15
  include Singleton
@@ -53,6 +54,17 @@ module Relaton
53
54
  processors.keys
54
55
  end
55
56
 
57
+ #
58
+ # Search a rpocessos by dataset name
59
+ #
60
+ # @param [String] dataset
61
+ #
62
+ # @return [Relaton::Processor, nil]
63
+ #
64
+ def find_processor_by_dataset(dataset)
65
+ processors.values.detect { |p| p.datasets&.include? dataset }
66
+ end
67
+
56
68
  #
57
69
  # Find processor by type
58
70
  #
@@ -1,3 +1,3 @@
1
1
  module Relaton
2
- VERSION = "1.8.0".freeze
2
+ VERSION = "1.9.2".freeze
3
3
  end
data/relaton.gemspec CHANGED
@@ -27,37 +27,37 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ["lib"]
28
28
  spec.files = `git ls-files`.split("\n")
29
29
  spec.test_files = `git ls-files -- {spec}/*`.split("\n")
30
- spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
30
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
31
31
 
32
- # spec.add_dependency "algoliasearch"
33
- spec.add_dependency "relaton-bipm", "~> 1.8.0"
34
- spec.add_dependency "relaton-bsi", "~> 1.8.0"
35
- spec.add_dependency "relaton-calconnect", "~> 1.8.0"
36
- spec.add_dependency "relaton-cie", "~> 1.8.0"
37
- spec.add_dependency "relaton-ecma", "~> 1.8.0"
38
- spec.add_dependency "relaton-gb", "~> 1.8.0"
39
- spec.add_dependency "relaton-iec", ">= 1.8.0"
40
- spec.add_dependency "relaton-ieee", "~> 1.8.0"
41
- spec.add_dependency "relaton-ietf", "~> 1.8.0"
42
- spec.add_dependency "relaton-iho", "~> 1.8.0"
43
- spec.add_dependency "relaton-iso", ">= 1.8.0"
44
- spec.add_dependency "relaton-itu", ">= 1.8.0"
45
- spec.add_dependency "relaton-nist", ">= 1.8.0"
46
- spec.add_dependency "relaton-ogc", "~> 1.8.0"
47
- spec.add_dependency "relaton-omg", "~> 1.8.0"
48
- spec.add_dependency "relaton-un", "~> 1.8.0"
49
- spec.add_dependency "relaton-w3c", "~> 1.8.0"
32
+ spec.add_dependency "relaton-bipm", "~> 1.9.0"
33
+ spec.add_dependency "relaton-bsi", "~> 1.9.0"
34
+ spec.add_dependency "relaton-calconnect", "~> 1.9.0"
35
+ spec.add_dependency "relaton-cen", "~> 1.9.0"
36
+ spec.add_dependency "relaton-cie", "~> 1.9.0"
37
+ spec.add_dependency "relaton-ecma", "~> 1.9.0"
38
+ spec.add_dependency "relaton-gb", "~> 1.9.0"
39
+ spec.add_dependency "relaton-iec", "~> 1.9.0"
40
+ spec.add_dependency "relaton-ieee", "~> 1.9.0"
41
+ spec.add_dependency "relaton-ietf", "~> 1.9.0"
42
+ spec.add_dependency "relaton-iho", "~> 1.9.0"
43
+ spec.add_dependency "relaton-iso", "~> 1.9.0"
44
+ spec.add_dependency "relaton-itu", "~> 1.9.0"
45
+ spec.add_dependency "relaton-nist", ">= 1.9.2"
46
+ spec.add_dependency "relaton-ogc", "~> 1.9.0"
47
+ spec.add_dependency "relaton-omg", "~> 1.9.0"
48
+ spec.add_dependency "relaton-un", "~> 1.9.0"
49
+ spec.add_dependency "relaton-w3c", "~> 1.9.0"
50
50
 
51
51
  spec.add_development_dependency "byebug", "~> 11.0"
52
- # spec.add_development_dependency "debase"
53
52
  spec.add_development_dependency "equivalent-xml", "~> 0.6"
54
53
  spec.add_development_dependency "guard", "~> 2.14"
55
54
  spec.add_development_dependency "guard-rspec", "~> 4.7"
56
55
  spec.add_development_dependency "pry-byebug", "~> 3.9.0"
57
56
  spec.add_development_dependency "rake", "~> 13.0"
58
57
  spec.add_development_dependency "rspec", "~> 3.6"
59
- spec.add_development_dependency "rubocop", "= 0.54.0"
60
- # spec.add_development_dependency "ruby-debug-ide"
58
+ spec.add_development_dependency "rubocop", "~> 1.17.0"
59
+ spec.add_development_dependency "rubocop-performance", "~> 1.11.0"
60
+ spec.add_development_dependency "rubocop-rails", "~> 2.10.0"
61
61
  spec.add_development_dependency "simplecov", "~> 0.15"
62
62
  spec.add_development_dependency "timecop", "~> 0.9"
63
63
  spec.add_development_dependency "vcr", "~> 5"
@@ -163,14 +163,16 @@ RSpec.describe Relaton::Db do
163
163
  results = []
164
164
  VCR.use_cassette "async_fetch", match_requests_on: %i[method uri body] do
165
165
  refs.each do |ref|
166
- db.fetch_async(ref) { |r| queue << r }
166
+ db.fetch_async(ref, ref: ref) do |r, otherargs|
167
+ queue << [r, otherargs[:ref]]
168
+ end
167
169
  end
168
170
  Timeout.timeout(60) do
169
171
  refs.size.times { results << queue.pop }
170
172
  end
171
173
  end
172
174
  results.each do |result|
173
- expect(result).to be_instance_of RelatonItu::ItuBibliographicItem
175
+ expect(result[0]).to be_instance_of RelatonItu::ItuBibliographicItem
174
176
  end
175
177
  end
176
178
 
@@ -16,6 +16,10 @@ RSpec.describe Relaton::Processor do
16
16
  expect { subject.get "code", nil, {} }.to raise_error StandardError
17
17
  end
18
18
 
19
+ it "fetch_data method should be implemented" do
20
+ expect { subject.fetch_data "cource", {} }.to raise_error StandardError
21
+ end
22
+
19
23
  it "from_xml method should be implemented" do
20
24
  expect { subject.from_xml "" }.to raise_error StandardError
21
25
  end
@@ -79,5 +79,19 @@ RSpec.describe Relaton::Registry do
79
79
  it "CIE" do
80
80
  expect(Relaton::Registry.instance.by_type("CIE")).to be_instance_of RelatonCie::Processor
81
81
  end
82
+
83
+ it "BSI" do
84
+ expect(Relaton::Registry.instance.by_type("BSI")).to be_instance_of RelatonBsi::Processor
85
+ end
86
+
87
+ it "CEN" do
88
+ expect(Relaton::Registry.instance.by_type("CEN")).to be_instance_of RelatonCen::Processor
89
+ end
90
+ end
91
+
92
+ it "find processot by dataset" do
93
+ expect(Relaton::Registry.instance
94
+ .find_processor_by_dataset("nist-tech-pubs"))
95
+ .to be_instance_of RelatonNist::Processor
82
96
  end
83
97
  end
data/spec/relaton_spec.rb CHANGED
@@ -15,15 +15,15 @@ RSpec.describe Relaton::Db do
15
15
  VCR.use_cassette "iso_19115_1" do
16
16
  bib = @db.fetch("ISO 19115-1", nil, {})
17
17
  expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
18
- expect(bib.to_xml(bibdata: true)).to include "<project-number>"\
18
+ expect(bib.to_xml(bibdata: true)).to include "<project-number part=\"1\">"\
19
19
  "ISO 19115</project-number>"
20
20
  expect(File.exist?("testcache")).to be true
21
21
  expect(File.exist?("testcache2")).to be true
22
22
  testcache = Relaton::DbCache.new "testcache"
23
- expect(testcache["ISO(ISO 19115-1)"]).to include "<project-number>"\
23
+ expect(testcache["ISO(ISO 19115-1)"]).to include "<project-number part=\"1\">"\
24
24
  "ISO 19115</project-number>"
25
25
  testcache = Relaton::DbCache.new "testcache2"
26
- expect(testcache["ISO(ISO 19115-1)"]).to include "<project-number>"\
26
+ expect(testcache["ISO(ISO 19115-1)"]).to include "<project-number part=\"1\">"\
27
27
  "ISO 19115</project-number>"
28
28
  end
29
29
  bib = @db.fetch("ISO 19115-1", nil, {})
@@ -31,7 +31,7 @@ RSpec.describe Relaton::Db do
31
31
  end
32
32
 
33
33
  it "with year in code" do
34
- VCR.use_cassette "19133_2005" do
34
+ VCR.use_cassette "iso_19133_2005" do
35
35
  bib = @db.fetch("ISO 19133:2005")
36
36
  expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
37
37
  expect(bib.to_xml).to include '<bibitem id="ISO19133-2005" '\
@@ -45,24 +45,24 @@ RSpec.describe Relaton::Db do
45
45
 
46
46
  context "all parts" do
47
47
  it "implicity" do
48
- VCR.use_cassette "iso_19115" do
49
- bib = @db.fetch("ISO 19115", nil, {})
48
+ VCR.use_cassette "iso_19115_all_parts" do
49
+ bib = @db.fetch("ISO 19115", nil, all_parts: true)
50
50
  expect(bib.docidentifier[0].id).to eq "ISO 19115 (all parts)"
51
51
  end
52
52
  end
53
53
 
54
54
  it "explicity" do
55
- VCR.use_cassette "iso_19115" do
56
- bib = @db.fetch("ISO 19115 (all parts)", nil, {})
55
+ VCR.use_cassette "iso_19115_all_parts" do
56
+ bib = @db.fetch("ISO 19115 (all parts)")
57
57
  expect(bib.docidentifier[0].id).to eq "ISO 19115 (all parts)"
58
58
  end
59
59
  end
60
60
  end
61
61
 
62
- it "gets sn ISO/AWI reference" do
63
- VCR.use_cassette "iso_awi_14093" do
64
- bib = @db.fetch "ISO/AWI 14093"
65
- expect(bib).not_to be_nil
62
+ it "gets sn ISO/CD reference" do
63
+ VCR.use_cassette "iso_cd_14093" do
64
+ bib = @db.fetch "ISO/CD 14093"
65
+ expect(bib.docidentifier[0].id).to eq "ISO/CD 14093"
66
66
  end
67
67
  end
68
68
  end
@@ -204,6 +204,13 @@ RSpec.describe Relaton::Db do
204
204
  end
205
205
 
206
206
  it "get OGC refrence and cache it" do
207
+ cc_fr = /\.relaton\/ogc\/bibliography\.json/
208
+ allow(File).to receive(:exist?).with(cc_fr).and_return false
209
+ allow(File).to receive(:exist?).with(/etag\.txt/).and_return false
210
+ expect(File).to receive(:exist?).and_call_original.at_least :once
211
+ expect(File).to receive(:write).with(cc_fr, kind_of(String), kind_of(Hash))
212
+ .at_most :once
213
+ allow(File).to receive(:write).and_call_original
207
214
  VCR.use_cassette "ogc_19_025r1" do
208
215
  bib = @db.fetch "OGC 19-025r1", nil, {}
209
216
  expect(bib).to be_instance_of RelatonOgc::OgcBibliographicItem
@@ -285,6 +292,13 @@ RSpec.describe Relaton::Db do
285
292
  end
286
293
  end
287
294
 
295
+ it "get CEN reference" do
296
+ VCR.use_cassette "cen_en_10160_1999" do
297
+ bib = @db.fetch "CEN EN 10160:1999"
298
+ expect(bib).to be_instance_of RelatonIsoBib::IsoBibliographicItem
299
+ end
300
+ end
301
+
288
302
  context "get combined documents" do
289
303
  context "ISO" do
290
304
  it "included" do
@@ -0,0 +1,57 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.relaton.org/api/v1/document?code=ISO%2019115-2&year=2019
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ Host:
17
+ - api.relaton.org
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Content-Type:
24
+ - text/xml
25
+ Content-Length:
26
+ - '2963'
27
+ Connection:
28
+ - keep-alive
29
+ Date:
30
+ - Mon, 23 Aug 2021 12:02:12 GMT
31
+ X-Amzn-Requestid:
32
+ - '098ad305-defa-47c8-ab52-48343ab03fa8'
33
+ Access-Control-Allow-Origin:
34
+ - "*"
35
+ Access-Control-Allow-Headers:
36
+ - Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
37
+ X-Amz-Apigw-Id:
38
+ - EhMocHeAoAMFtlg=
39
+ Access-Control-Allow-Methods:
40
+ - GET, POST, OPTIONS
41
+ X-Amzn-Trace-Id:
42
+ - Root=1-61238e35-5a78c6585f0a12aa03ef6ad2;Sampled=0
43
+ X-Cache:
44
+ - Miss from cloudfront
45
+ Via:
46
+ - 1.1 a65cc3f0f56427b7099c895c026d63f0.cloudfront.net (CloudFront)
47
+ X-Amz-Cf-Pop:
48
+ - ZAG50-C1
49
+ X-Amz-Cf-Id:
50
+ - AQ2ZtJn4PYqRprdqa7s-risSYgyC2fp3TfB26w8gi7l_4N7BHW252w==
51
+ body:
52
+ encoding: ASCII-8BIT
53
+ string: !binary |-
54
+ PGJpYmRhdGEgdHlwZT0ic3RhbmRhcmQiPgogIDxmZXRjaGVkPjIwMjEtMDctMTE8L2ZldGNoZWQ+CiAgPHRpdGxlIHR5cGU9InRpdGxlLWludHJvIiBmb3JtYXQ9InRleHQvcGxhaW4iIGxhbmd1YWdlPSJlbiIgc2NyaXB0PSJMYXRuIj5HZW9ncmFwaGljIGluZm9ybWF0aW9uPC90aXRsZT4KICA8dGl0bGUgdHlwZT0idGl0bGUtbWFpbiIgZm9ybWF0PSJ0ZXh0L3BsYWluIiBsYW5ndWFnZT0iZW4iIHNjcmlwdD0iTGF0biI+TWV0YWRhdGE8L3RpdGxlPgogIDx0aXRsZSB0eXBlPSJ0aXRsZS1wYXJ0IiBmb3JtYXQ9InRleHQvcGxhaW4iIGxhbmd1YWdlPSJlbiIgc2NyaXB0PSJMYXRuIj5QYXJ0IDI6IEV4dGVuc2lvbnMgZm9yIGFjcXVpc2l0aW9uIGFuZCBwcm9jZXNzaW5nPC90aXRsZT4KICA8dGl0bGUgdHlwZT0ibWFpbiIgZm9ybWF0PSJ0ZXh0L3BsYWluIiBsYW5ndWFnZT0iZW4iIHNjcmlwdD0iTGF0biI+R2VvZ3JhcGhpYyBpbmZvcm1hdGlvbiAtIE1ldGFkYXRhIC0gUGFydCAyOiBFeHRlbnNpb25zIGZvciBhY3F1aXNpdGlvbiBhbmQgcHJvY2Vzc2luZzwvdGl0bGU+CiAgPHRpdGxlIHR5cGU9InRpdGxlLWludHJvIiBmb3JtYXQ9InRleHQvcGxhaW4iIGxhbmd1YWdlPSJmciIgc2NyaXB0PSJMYXRuIj5JbmZvcm1hdGlvbiBnw6lvZ3JhcGhpcXVlPC90aXRsZT4KICA8dGl0bGUgdHlwZT0idGl0bGUtbWFpbiIgZm9ybWF0PSJ0ZXh0L3BsYWluIiBsYW5ndWFnZT0iZnIiIHNjcmlwdD0iTGF0biI+TcOpdGFkb25uw6llczwvdGl0bGU+CiAgPHRpdGxlIHR5cGU9InRpdGxlLXBhcnQiIGZvcm1hdD0idGV4dC9wbGFpbiIgbGFuZ3VhZ2U9ImZyIiBzY3JpcHQ9IkxhdG4iPlBhcnRpZSAyOiBFeHRlbnNpb25zIHBvdXIgbCdhY3F1aXNpdGlvbiBldCBsZSB0cmFpdGVtZW50PC90aXRsZT4KICA8dGl0bGUgdHlwZT0ibWFpbiIgZm9ybWF0PSJ0ZXh0L3BsYWluIiBsYW5ndWFnZT0iZnIiIHNjcmlwdD0iTGF0biI+SW5mb3JtYXRpb24gZ8Opb2dyYXBoaXF1ZSAtIE3DqXRhZG9ubsOpZXMgLSBQYXJ0aWUgMjogRXh0ZW5zaW9ucyBwb3VyIGwnYWNxdWlzaXRpb24gZXQgbGUgdHJhaXRlbWVudDwvdGl0bGU+CiAgPHVyaSB0eXBlPSJzcmMiPmh0dHBzOi8vd3d3Lmlzby5vcmcvc3RhbmRhcmQvNjcwMzkuaHRtbDwvdXJpPgogIDx1cmkgdHlwZT0ib2JwIj5odHRwczovL3d3dy5pc28ub3JnL29icC91aS8jIWlzbzpzdGQ6NjcwMzk6ZW48L3VyaT4KICA8dXJpIHR5cGU9InJzcyI+aHR0cHM6Ly93d3cuaXNvLm9yZy9jb250ZW50cy9kYXRhL3N0YW5kYXJkLzA2LzcwLzY3MDM5LmRldGFpbC5yc3M8L3VyaT4KICA8ZG9jaWRlbnRpZmllciB0eXBlPSJJU08iPklTTyAxOTExNS0yOjIwMTk8L2RvY2lkZW50aWZpZXI+CiAgPGRvY2lkZW50aWZpZXIgdHlwZT0iVVJOIj51cm46aXNvOnN0ZDppc286MTkxMTU6LTI6c3RhZ2UtNjAuNjA6ZWQtMjplbixmcjwvZG9jaWRlbnRpZmllcj4KICA8ZG9jbnVtYmVyPjE5MTE1PC9kb2NudW1iZXI+CiAgPGRhdGUgdHlwZT0icHVibGlzaGVkIj4KICAgIDxvbj4yMDE5LTAxPC9vbj4KICA8L2RhdGU+CiAgPGNvbnRyaWJ1dG9yPgogICAgPHJvbGUgdHlwZT0icHVibGlzaGVyIi8+CiAgICA8b3JnYW5pemF0aW9uPgogICAgICA8bmFtZT5JbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uPC9uYW1lPgogICAgICA8YWJicmV2aWF0aW9uPklTTzwvYWJicmV2aWF0aW9uPgogICAgICA8dXJpPnd3dy5pc28ub3JnPC91cmk+CiAgICA8L29yZ2FuaXphdGlvbj4KICA8L2NvbnRyaWJ1dG9yPgogIDxlZGl0aW9uPjI8L2VkaXRpb24+CiAgPGxhbmd1YWdlPmVuPC9sYW5ndWFnZT4KICA8bGFuZ3VhZ2U+ZnI8L2xhbmd1YWdlPgogIDxzY3JpcHQ+TGF0bjwvc2NyaXB0PgogIDxzdGF0dXM+CiAgICA8c3RhZ2U+NjA8L3N0YWdlPgogICAgPHN1YnN0YWdlPjYwPC9zdWJzdGFnZT4KICA8L3N0YXR1cz4KICA8Y29weXJpZ2h0PgogICAgPGZyb20+MjAxOTwvZnJvbT4KICAgIDxvd25lcj4KICAgICAgPG9yZ2FuaXphdGlvbj4KICAgICAgICA8bmFtZT5JU088L25hbWU+CiAgICAgIDwvb3JnYW5pemF0aW9uPgogICAgPC9vd25lcj4KICA8L2NvcHlyaWdodD4KICA8cmVsYXRpb24gdHlwZT0ib2Jzb2xldGVzIj4KICAgIDxiaWJpdGVtIHR5cGU9InN0YW5kYXJkIj4KICAgICAgPGZvcm1hdHRlZHJlZiBmb3JtYXQ9InRleHQvcGxhaW4iPklTTyAxOTExNS0yOjIwMDk8L2Zvcm1hdHRlZHJlZj4KICAgIDwvYmliaXRlbT4KICA8L3JlbGF0aW9uPgogIDxyZWxhdGlvbiB0eXBlPSJ1cGRhdGVzIj4KICAgIDxiaWJpdGVtIHR5cGU9InN0YW5kYXJkIj4KICAgICAgPGZvcm1hdHRlZHJlZiBmb3JtYXQ9InRleHQvcGxhaW4iPklTTyAxOTExNS0yOjIwMTkvUFJGIEFtZCAxPC9mb3JtYXR0ZWRyZWY+CiAgICAgIDxkYXRlIHR5cGU9ImNpcmN1bGF0ZWQiPgogICAgICAgIDxvbj4yMDE5LTAxLTEwPC9vbj4KICAgICAgPC9kYXRlPgogICAgPC9iaWJpdGVtPgogIDwvcmVsYXRpb24+CiAgPHBsYWNlPkdlbmV2YTwvcGxhY2U+CiAgPGV4dD4KICAgIDxkb2N0eXBlPmludGVybmF0aW9uYWwtc3RhbmRhcmQ8L2RvY3R5cGU+CiAgICA8ZWRpdG9yaWFsZ3JvdXA+CiAgICAgIDx0ZWNobmljYWwtY29tbWl0dGVlIG51bWJlcj0iMjExIiB0eXBlPSJUQyI+SVNPL1RDIDIxMUdlb2dyYXBoaWMgaW5mb3JtYXRpb24vR2VvbWF0aWNzPC90ZWNobmljYWwtY29tbWl0dGVlPgogICAgPC9lZGl0b3JpYWxncm91cD4KICAgIDxpY3M+CiAgICAgIDxjb2RlPjM1LjI0MC43MDwvY29kZT4KICAgICAgPHRleHQ+SVQgYXBwbGljYXRpb25zIGluIHNjaWVuY2U8L3RleHQ+CiAgICA8L2ljcz4KICAgIDxzdHJ1Y3R1cmVkaWRlbnRpZmllciB0eXBlPSJJU08iPgogICAgICA8cHJvamVjdC1udW1iZXI+SVNPIDE5MTE1PC9wcm9qZWN0LW51bWJlcj4KICAgIDwvc3RydWN0dXJlZGlkZW50aWZpZXI+CiAgPC9leHQ+CjwvYmliZGF0YT4=
55
+ http_version:
56
+ recorded_at: Mon, 23 Aug 2021 12:02:12 GMT
57
+ recorded_with: VCR 5.1.0