ecfr 1.0.8 → 1.0.9
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/lib/ecfr/admin_service/base.rb +4 -2
- data/lib/ecfr/client.rb +1 -1
- data/lib/ecfr/configuration.rb +9 -0
- data/lib/ecfr/default_documentation_setup.rb +1 -1
- data/lib/ecfr/default_status_setup.rb +1 -1
- data/lib/ecfr/diff_service/base.rb +4 -2
- data/lib/ecfr/diff_service/status.rb +1 -1
- data/lib/ecfr/ofr_profile_service/base.rb +6 -4
- data/lib/ecfr/prince_xml_service/base.rb +4 -2
- data/lib/ecfr/prince_xml_service/status.rb.bak +33 -0
- data/lib/ecfr/renderer_service/base.rb +5 -3
- data/lib/ecfr/search_service/base.rb +4 -2
- data/lib/ecfr/subscriptions_service/base.rb +4 -2
- data/lib/ecfr/version.rb +1 -1
- data/lib/ecfr/versioner_service/base.rb +4 -2
- data/lib/ecfr/versioner_service/structure.rb +2 -2
- data/lib/ecfr/versioner_service/xml_content.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cadbb3387da1a9a32e94246031dd6330160ad2aa8891d6fee6a78fd334553b6b
|
4
|
+
data.tar.gz: 58d7b650c1e6406d1ce1a9b6faf76e649762c3bf90a0305a38a5f0dd63580a28
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e8feba398bf9e8aac36468a6292682526a1d95b412a8ac46b898d7c7a71c144081b5aca4cca2d386f24e359399d1e13599ff95f219047257a038c176d063959
|
7
|
+
data.tar.gz: 1cd02d613ead3929fe1957bade79bac560f37ccdfc531c59a4710524ccb781ca23c0fff44f3bc0e42f58126e0da9265f23874d41db4847c20bb5a328de669714
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.0.9] - 2023-05-12
|
4
|
+
### Additions
|
5
|
+
- Add support for configuring the service path. This supports blue/green style deployments where the same service may be running but accessible at different subpaths.
|
6
|
+
|
3
7
|
## [1.0.8] - 2023-05-05
|
4
8
|
### Updates
|
5
9
|
- Update Ecfr::RenderService::Diff to rescue expected error types and raise more specific diff errors
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Ecfr
|
2
2
|
|
3
|
-
Provides a Ruby API client for the eCFR.gov APIs.
|
3
|
+
Provides a Ruby API client for the eCFR.gov APIs. Not all services and API endpoints in this gem are publically available. See https://www.ecfr.gov/developers/documentation/api/v1 for public endpoint documentation.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -12,12 +12,14 @@ module Ecfr
|
|
12
12
|
require_relative "issue"
|
13
13
|
require_relative "site_notification"
|
14
14
|
|
15
|
-
SERVICE_PATH = "/admin/api/admin"
|
16
|
-
|
17
15
|
def self.base_url
|
18
16
|
Ecfr.config.admin_service_url || Ecfr.config.base_url
|
19
17
|
end
|
20
18
|
|
19
|
+
def self.service_path
|
20
|
+
Ecfr.config.admin_service_path || "/admin/api/admin"
|
21
|
+
end
|
22
|
+
|
21
23
|
def self.service_name
|
22
24
|
"Admin Service"
|
23
25
|
end
|
data/lib/ecfr/client.rb
CHANGED
@@ -121,7 +121,7 @@ module Ecfr
|
|
121
121
|
# response_status set.
|
122
122
|
#
|
123
123
|
def self.perform(method, path, params: {}, client_options: {}, perform_options: {})
|
124
|
-
path = [
|
124
|
+
path = [service_path, path].compact.join("/")
|
125
125
|
|
126
126
|
default_perform_options = {parse_response: true}
|
127
127
|
perform_options = default_perform_options.merge(perform_options)
|
data/lib/ecfr/configuration.rb
CHANGED
@@ -11,14 +11,23 @@ module Ecfr
|
|
11
11
|
ofr_profile_service_base_url: "https://www.federalregister.gov/my/profile",
|
12
12
|
# service url overrides
|
13
13
|
admin_service_url: nil,
|
14
|
+
admin_service_path: nil,
|
14
15
|
diff_service_url: nil,
|
16
|
+
diff_service_path: nil,
|
15
17
|
ofr_profile_service_url: nil,
|
18
|
+
ofr_profile_service_path: nil,
|
16
19
|
prince_xml_service_url: nil,
|
20
|
+
prince_xml_service_path: nil,
|
17
21
|
renderer_service_url: nil,
|
22
|
+
renderer_service_path: nil,
|
18
23
|
search_service_url: nil,
|
24
|
+
search_service_path: nil,
|
19
25
|
subscriptions_service_url: nil,
|
26
|
+
subscriptions_service_path: nil,
|
20
27
|
varnish_cache_service_url: nil,
|
28
|
+
varnish_cache_service_path: nil,
|
21
29
|
versioner_service_url: nil,
|
30
|
+
versioner_service_path: nil,
|
22
31
|
# basic auth - some endpoints require auth
|
23
32
|
ecfr_basic_auth_username: nil,
|
24
33
|
ecfr_basic_auth_password: nil,
|
@@ -3,12 +3,14 @@ module Ecfr
|
|
3
3
|
class Base < Ecfr::Base
|
4
4
|
require_relative "status"
|
5
5
|
|
6
|
-
SERVICE_PATH = "/api/diff"
|
7
|
-
|
8
6
|
def self.base_url
|
9
7
|
Ecfr.config.diff_service_url || Ecfr.config.base_url
|
10
8
|
end
|
11
9
|
|
10
|
+
def self.service_path
|
11
|
+
Ecfr.config.diff_service_path || "/api/diff"
|
12
|
+
end
|
13
|
+
|
12
14
|
def self.service_name
|
13
15
|
"Diff Service"
|
14
16
|
end
|
@@ -3,13 +3,15 @@ module Ecfr
|
|
3
3
|
class Base < Ecfr::Base
|
4
4
|
require_relative "status"
|
5
5
|
|
6
|
+
def self.base_url
|
7
|
+
Ecfr.config.ofr_profile_service_url || Ecfr.config.ofr_profile_service_base_url
|
8
|
+
end
|
9
|
+
|
6
10
|
# path is relative because we expect the ofr profile
|
7
11
|
# api to be mounted at a subpath and an absolute url
|
8
12
|
# here will cause the path in the config to be lost
|
9
|
-
|
10
|
-
|
11
|
-
def self.base_url
|
12
|
-
Ecfr.config.ofr_profile_service_url || Ecfr.config.ofr_profile_service_base_url
|
13
|
+
def self.service_path
|
14
|
+
Ecfr.config.ofr_profile_service_path || "api/profile"
|
13
15
|
end
|
14
16
|
|
15
17
|
def self.service_name
|
@@ -3,12 +3,14 @@ module Ecfr
|
|
3
3
|
class Base < Ecfr::Base
|
4
4
|
require_relative "pdf"
|
5
5
|
|
6
|
-
SERVICE_PATH = ""
|
7
|
-
|
8
6
|
def self.base_url
|
9
7
|
Ecfr.config.prince_xml_service_url || Ecfr.config.base_url
|
10
8
|
end
|
11
9
|
|
10
|
+
def self.service_path
|
11
|
+
Ecfr.config.prince_xml_service_path || ""
|
12
|
+
end
|
13
|
+
|
12
14
|
def self.service_name
|
13
15
|
"Prince XML Service"
|
14
16
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Ecfr
|
2
|
+
module PrinceXmlService
|
3
|
+
class Status < Base
|
4
|
+
include DefaultStatusSetup
|
5
|
+
|
6
|
+
STATUS_PATH = "status"
|
7
|
+
|
8
|
+
def self.status
|
9
|
+
perform(
|
10
|
+
status_config[:method],
|
11
|
+
STATUS_PATH,
|
12
|
+
perform_options: {parse_response: false}
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
# .status_config is provided to support use cases
|
17
|
+
# in which the user wants to construct their own
|
18
|
+
# handling of status checks, e.g. to wrap in custom
|
19
|
+
# errors or run in parallel
|
20
|
+
def status_config
|
21
|
+
{
|
22
|
+
url: [
|
23
|
+
base_url,
|
24
|
+
service_path,
|
25
|
+
STATUS_PATH
|
26
|
+
].reject(&:blank?).join("/"),
|
27
|
+
method: :get,
|
28
|
+
response_type: "html"
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -7,12 +7,14 @@ module Ecfr
|
|
7
7
|
require_relative "diff"
|
8
8
|
require_relative "origin"
|
9
9
|
|
10
|
-
SERVICE_PATH = "/api/renderer"
|
11
|
-
|
12
10
|
def self.base_url
|
13
11
|
Ecfr.config.renderer_service_url || Ecfr.config.base_url
|
14
12
|
end
|
15
13
|
|
14
|
+
def self.service_path
|
15
|
+
Ecfr.config.renderer_service_path || "/api/renderer"
|
16
|
+
end
|
17
|
+
|
16
18
|
def self.service_name
|
17
19
|
"Renderer Service"
|
18
20
|
end
|
@@ -23,7 +25,7 @@ module Ecfr
|
|
23
25
|
# content retrieval doesn't make use of the .perform worflow
|
24
26
|
# and so we need to add service path here.
|
25
27
|
def self.content_path(date, title_number, view_mode: "enhanced")
|
26
|
-
"#{
|
28
|
+
"#{service_path}/#{HTML_PATH}/#{view_mode}/#{date}/title-#{title_number}"
|
27
29
|
end
|
28
30
|
private_class_method :content_path
|
29
31
|
end
|
@@ -9,12 +9,14 @@ module Ecfr
|
|
9
9
|
require_relative "date_facet"
|
10
10
|
require_relative "title_facet"
|
11
11
|
|
12
|
-
SERVICE_PATH = "/api/search"
|
13
|
-
|
14
12
|
def self.base_url
|
15
13
|
Ecfr.config.search_service_url || Ecfr.config.base_url
|
16
14
|
end
|
17
15
|
|
16
|
+
def self.service_path
|
17
|
+
Ecfr.config.search_service_path || "/api/search"
|
18
|
+
end
|
19
|
+
|
18
20
|
def self.service_name
|
19
21
|
"Search Service"
|
20
22
|
end
|
@@ -5,12 +5,14 @@ module Ecfr
|
|
5
5
|
|
6
6
|
require_relative "subscription"
|
7
7
|
|
8
|
-
SERVICE_PATH = "/api/subscriptions"
|
9
|
-
|
10
8
|
def self.base_url
|
11
9
|
Ecfr.config.subscriptions_service_url || Ecfr.config.base_url
|
12
10
|
end
|
13
11
|
|
12
|
+
def self.service_path
|
13
|
+
Ecfr.config.subscriptions_service_path || "/api/subscriptions"
|
14
|
+
end
|
15
|
+
|
14
16
|
def self.service_name
|
15
17
|
"Subscriptions Service"
|
16
18
|
end
|
data/lib/ecfr/version.rb
CHANGED
@@ -10,12 +10,14 @@ module Ecfr
|
|
10
10
|
require_relative "title"
|
11
11
|
require_relative "xml_content"
|
12
12
|
|
13
|
-
SERVICE_PATH = "/api/versioner"
|
14
|
-
|
15
13
|
def self.base_url
|
16
14
|
Ecfr.config.versioner_service_url || Ecfr.config.base_url
|
17
15
|
end
|
18
16
|
|
17
|
+
def self.service_path
|
18
|
+
Ecfr.config.versioner_service_path || "/api/versioner"
|
19
|
+
end
|
20
|
+
|
19
21
|
def self.service_name
|
20
22
|
"Versioner Service"
|
21
23
|
end
|
@@ -45,7 +45,7 @@ module Ecfr
|
|
45
45
|
options = default_options.merge(options.symbolize_keys)
|
46
46
|
|
47
47
|
format = options.delete(:format)
|
48
|
-
path = [
|
48
|
+
path = [service_path, structure_path(date, title_number, format)].join("/")
|
49
49
|
|
50
50
|
client.build_url(path, options).to_s
|
51
51
|
end
|
@@ -109,7 +109,7 @@ module Ecfr
|
|
109
109
|
date = split[-2]
|
110
110
|
title_number = split[-1].split("-")[1]
|
111
111
|
|
112
|
-
path = "#{self.class
|
112
|
+
path = "#{self.class.service_path}/#{self.class.send(:structure_path, date, title_number)}"
|
113
113
|
|
114
114
|
params = request_data[:params].except(:structure, :metadata)
|
115
115
|
|
@@ -51,7 +51,7 @@ module Ecfr
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def self.xml_content_path(date, title_number)
|
54
|
-
"#{
|
54
|
+
"#{service_path}/#{XML_PATH}/#{date}/title-#{title_number}.xml"
|
55
55
|
end
|
56
56
|
private_class_method :xml_content_path
|
57
57
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecfr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peregrinator
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -292,6 +292,7 @@ files:
|
|
292
292
|
- lib/ecfr/parallel_client.rb
|
293
293
|
- lib/ecfr/prince_xml_service/base.rb
|
294
294
|
- lib/ecfr/prince_xml_service/pdf.rb
|
295
|
+
- lib/ecfr/prince_xml_service/status.rb.bak
|
295
296
|
- lib/ecfr/renderer_service/base.rb
|
296
297
|
- lib/ecfr/renderer_service/content.rb
|
297
298
|
- lib/ecfr/renderer_service/diff.rb
|