prx_access 0.3.0 → 0.4.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 +4 -4
- data/.git-blame-ignore-revs +2 -0
- data/.github/workflows/lint.yml +14 -0
- data/.github/workflows/test.yml +14 -0
- data/.standard.yml +2 -0
- data/.tool-versions +1 -0
- data/Gemfile +1 -1
- data/Rakefile +2 -1
- data/lib/prx_access/prx_hyper_resource.rb +45 -48
- data/lib/prx_access/version.rb +1 -1
- data/prx_access.gemspec +16 -14
- metadata +54 -19
- data/.travis.yml +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 42e0393e6bd18939c03fbe4d196e1a767b8fd421fc2ada47677b98b7a9aaa0d0
|
|
4
|
+
data.tar.gz: de13e62e4a9cf58d1975bf7a87a29f39c7646124ff1eca76c095149fbef7d547
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 342dec3da2d419e58544a17c0e0ffde8d3c4d41fb70668d140e11fde2f3aeb693e51e21956d84eb0a1fe06be9ac47554ddb500f774761d7a97a52f0f45d2d84d
|
|
7
|
+
data.tar.gz: cae8fe83ad8047b3035e76d1cf9f5ae6c42915adae8e9d2cb7a88f4a752ec3fd4d4e74409c4047e634482c6e1002be4c7b73b56b30938ee19f02363034d87962
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: Lint
|
|
2
|
+
on: push
|
|
3
|
+
jobs:
|
|
4
|
+
lint:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
steps:
|
|
7
|
+
- name: Checkout code
|
|
8
|
+
uses: actions/checkout@v7
|
|
9
|
+
- name: Install Ruby and gems
|
|
10
|
+
uses: ruby/setup-ruby@v1
|
|
11
|
+
with:
|
|
12
|
+
bundler-cache: true
|
|
13
|
+
- name: Lint
|
|
14
|
+
run: bundle exec standardrb
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
on: push
|
|
3
|
+
jobs:
|
|
4
|
+
test:
|
|
5
|
+
runs-on: ubuntu-latest
|
|
6
|
+
steps:
|
|
7
|
+
- name: Checkout code
|
|
8
|
+
uses: actions/checkout@v7
|
|
9
|
+
- name: Install Ruby and gems
|
|
10
|
+
uses: ruby/setup-ruby@v1
|
|
11
|
+
with:
|
|
12
|
+
bundler-cache: true
|
|
13
|
+
- name: Run the tests
|
|
14
|
+
run: bundle exec rspec
|
data/.standard.yml
ADDED
data/.tool-versions
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby 4.0.0
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
1
|
+
require "hyperresource"
|
|
2
|
+
require "active_support/core_ext/hash"
|
|
3
|
+
require "oauth2"
|
|
4
|
+
require "faraday/excon"
|
|
4
5
|
|
|
5
6
|
module PRXAccess
|
|
6
|
-
|
|
7
7
|
class PRXHyperResource < HyperResource
|
|
8
8
|
def incoming_body_filter(hash)
|
|
9
9
|
super(hash.deep_transform_keys { |key| key.to_s.underscore })
|
|
@@ -16,104 +16,101 @@ module PRXAccess
|
|
|
16
16
|
class Link < HyperResource::Link
|
|
17
17
|
attr_accessor :type, :profile
|
|
18
18
|
|
|
19
|
-
def initialize(resource, link_spec={})
|
|
19
|
+
def initialize(resource, link_spec = {})
|
|
20
20
|
super
|
|
21
|
-
self.type = link_spec[
|
|
22
|
-
self.profile = link_spec[
|
|
21
|
+
self.type = link_spec["type"]
|
|
22
|
+
self.profile = link_spec["profile"]
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def where(params)
|
|
26
26
|
super.tap do |res|
|
|
27
|
-
res.type =
|
|
28
|
-
res.profile =
|
|
27
|
+
res.type = type
|
|
28
|
+
res.profile = profile
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
|
|
32
32
|
def headers(*args)
|
|
33
33
|
super.tap do |res|
|
|
34
34
|
if args.count > 0
|
|
35
|
-
res.type =
|
|
36
|
-
res.profile =
|
|
35
|
+
res.type = type
|
|
36
|
+
res.profile = profile
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
def post_response(attrs=nil)
|
|
42
|
-
attrs ||=
|
|
43
|
-
attrs = (
|
|
41
|
+
def post_response(attrs = nil)
|
|
42
|
+
attrs ||= resource.attributes
|
|
43
|
+
attrs = (resource.default_attributes || {}).merge(attrs)
|
|
44
44
|
|
|
45
45
|
# adding this line to call outgoing_body_filter
|
|
46
46
|
attrs = resource.outgoing_body_filter(attrs)
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
req.body =
|
|
48
|
+
faraday_connection.post do |req|
|
|
49
|
+
req.body = resource.adapter.serialize(attrs)
|
|
50
50
|
end
|
|
51
|
-
response
|
|
52
51
|
end
|
|
53
52
|
|
|
54
|
-
def put_response(attrs=nil)
|
|
55
|
-
attrs ||=
|
|
56
|
-
attrs = (
|
|
53
|
+
def put_response(attrs = nil)
|
|
54
|
+
attrs ||= resource.attributes
|
|
55
|
+
attrs = (resource.default_attributes || {}).merge(attrs)
|
|
57
56
|
|
|
58
57
|
# adding this line to call outgoing_body_filter
|
|
59
58
|
attrs = resource.outgoing_body_filter(attrs)
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
req.body =
|
|
60
|
+
faraday_connection.put do |req|
|
|
61
|
+
req.body = resource.adapter.serialize(attrs)
|
|
63
62
|
end
|
|
64
|
-
response
|
|
65
63
|
end
|
|
66
64
|
|
|
67
|
-
def patch_response(attrs=nil)
|
|
68
|
-
attrs ||=
|
|
69
|
-
attrs = (
|
|
65
|
+
def patch_response(attrs = nil)
|
|
66
|
+
attrs ||= resource.attributes.changed_attributes
|
|
67
|
+
attrs = (resource.default_attributes || {}).merge(attrs)
|
|
70
68
|
|
|
71
69
|
# adding this line to call outgoing_body_filter
|
|
72
70
|
attrs = resource.outgoing_body_filter(attrs)
|
|
73
71
|
|
|
74
|
-
|
|
75
|
-
req.body =
|
|
72
|
+
faraday_connection.patch do |req|
|
|
73
|
+
req.body = resource.adapter.serialize(attrs)
|
|
76
74
|
end
|
|
77
|
-
response
|
|
78
75
|
end
|
|
79
76
|
end
|
|
80
77
|
end
|
|
81
78
|
|
|
82
79
|
def default_headers
|
|
83
80
|
{
|
|
84
|
-
|
|
85
|
-
|
|
81
|
+
"Content-Type" => "application/json",
|
|
82
|
+
"Accept" => "application/json"
|
|
86
83
|
}
|
|
87
84
|
end
|
|
88
85
|
|
|
89
86
|
def api(options = {})
|
|
90
|
-
opts = {
|
|
91
|
-
if !opts[:headers][
|
|
87
|
+
opts = {root: cms_root, headers: default_headers}.merge(options)
|
|
88
|
+
if !opts[:headers]["Authorization"] && (account = opts.delete(:account))
|
|
92
89
|
token = get_account_token(account, opts.delete(:scope))
|
|
93
|
-
opts[:headers][
|
|
90
|
+
opts[:headers]["Authorization"] = "Bearer #{token}"
|
|
94
91
|
end
|
|
95
92
|
|
|
96
93
|
PRXHyperResource.new(opts)
|
|
97
94
|
end
|
|
98
95
|
|
|
99
96
|
def api_resource(body, root = cms_root)
|
|
100
|
-
href = body[
|
|
97
|
+
href = body["_links"]["self"]["href"]
|
|
101
98
|
resource = api(root: root)
|
|
102
99
|
link = PRXHyperResource::Link.new(resource, href: href)
|
|
103
100
|
PRXHyperResource.new_from(body: body, resource: resource, link: link)
|
|
104
101
|
end
|
|
105
102
|
|
|
106
103
|
def get_account_token(account, scope = nil)
|
|
107
|
-
id = ENV[
|
|
108
|
-
se = ENV[
|
|
104
|
+
id = ENV["PRX_CLIENT_ID"]
|
|
105
|
+
se = ENV["PRX_SECRET"]
|
|
109
106
|
|
|
110
|
-
raise
|
|
111
|
-
raise
|
|
107
|
+
raise "Missing PRX_CLIENT_ID PRX_SECRET ENV vars" if id.nil? || se.nil?
|
|
108
|
+
raise "Missing ID_HOST ENV var" if ENV["ID_HOST"].nil?
|
|
112
109
|
|
|
113
|
-
oauth_options = {
|
|
110
|
+
oauth_options = {site: id_root, token_url: "/token"}
|
|
114
111
|
client = OAuth2::Client.new(id, se, oauth_options) do |faraday|
|
|
115
|
-
faraday.request
|
|
116
|
-
faraday.adapter
|
|
112
|
+
faraday.request :url_encoded
|
|
113
|
+
faraday.adapter :excon
|
|
117
114
|
end
|
|
118
115
|
if scope
|
|
119
116
|
client.client_credentials.get_token(account: account, scope: scope).token
|
|
@@ -123,25 +120,25 @@ module PRXAccess
|
|
|
123
120
|
end
|
|
124
121
|
|
|
125
122
|
def id_root
|
|
126
|
-
root_uri ENV[
|
|
123
|
+
root_uri ENV["ID_HOST"]
|
|
127
124
|
end
|
|
128
125
|
|
|
129
126
|
private
|
|
130
127
|
|
|
131
128
|
def method_missing(method, *args)
|
|
132
|
-
if
|
|
133
|
-
root_uri ENV[method.to_s.sub(/_root$/,
|
|
129
|
+
if /_root$/.match?(method)
|
|
130
|
+
root_uri ENV[method.to_s.sub(/_root$/, "_HOST").upcase], "/api/v1"
|
|
134
131
|
else
|
|
135
132
|
super
|
|
136
133
|
end
|
|
137
134
|
end
|
|
138
135
|
|
|
139
136
|
def respond_to_missing?(method, include_private = false)
|
|
140
|
-
method.to_s.ends_with?(
|
|
137
|
+
method.to_s.ends_with?("_root") || super
|
|
141
138
|
end
|
|
142
139
|
|
|
143
|
-
def root_uri(host, path =
|
|
144
|
-
if
|
|
140
|
+
def root_uri(host, path = "")
|
|
141
|
+
if /\.org|\.tech/.match?(host)
|
|
145
142
|
URI::HTTPS.build(host: host, path: path).to_s
|
|
146
143
|
else
|
|
147
144
|
URI::HTTP.build(host: host, path: path).to_s
|
data/lib/prx_access/version.rb
CHANGED
data/prx_access.gemspec
CHANGED
|
@@ -3,14 +3,14 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
3
3
|
require "prx_access/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
|
-
spec.name
|
|
7
|
-
spec.version
|
|
8
|
-
spec.authors
|
|
9
|
-
spec.email
|
|
6
|
+
spec.name = "prx_access"
|
|
7
|
+
spec.version = PRXAccess::VERSION
|
|
8
|
+
spec.authors = ["Sam Vevang"]
|
|
9
|
+
spec.email = ["sam.vevang@prx.org"]
|
|
10
10
|
|
|
11
|
-
spec.summary
|
|
12
|
-
spec.description
|
|
13
|
-
spec.homepage
|
|
11
|
+
spec.summary = "PRX Access navigates HAL hypermedia resources on PRX services."
|
|
12
|
+
spec.description = "PRX Access is a gem to supply authentication headers and descend the HAL hypermedia link tree on PRX's APIs."
|
|
13
|
+
spec.homepage = "https://github.com/PRX/prx_access"
|
|
14
14
|
|
|
15
15
|
if spec.respond_to?(:metadata)
|
|
16
16
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
@@ -22,21 +22,23 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
25
|
-
spec.files
|
|
25
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
|
26
26
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
27
27
|
end
|
|
28
|
-
spec.bindir
|
|
29
|
-
spec.executables
|
|
28
|
+
spec.bindir = "exe"
|
|
29
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
30
30
|
spec.require_paths = ["lib"]
|
|
31
31
|
|
|
32
32
|
spec.add_dependency "hyperresource", "~> 0.9.4"
|
|
33
33
|
spec.add_dependency "activesupport", ">= 4.0.0"
|
|
34
|
-
spec.add_dependency "oauth2", "~>
|
|
35
|
-
spec.add_dependency "excon", "
|
|
34
|
+
spec.add_dependency "oauth2", "~> 2.0", ">= 2.0.22"
|
|
35
|
+
spec.add_dependency "excon", ">= 1.5.0"
|
|
36
|
+
spec.add_dependency "faraday-excon"
|
|
36
37
|
|
|
37
38
|
spec.add_development_dependency "webmock"
|
|
38
39
|
spec.add_development_dependency "pry"
|
|
39
|
-
spec.add_development_dependency "bundler", "
|
|
40
|
-
spec.add_development_dependency "rake", "~>
|
|
40
|
+
spec.add_development_dependency "bundler", ">= 2.2.26"
|
|
41
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
|
41
42
|
spec.add_development_dependency "rspec", "~> 3.0"
|
|
43
|
+
spec.add_development_dependency "standard"
|
|
42
44
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: prx_access
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sam Vevang
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: hyperresource
|
|
@@ -44,28 +43,48 @@ dependencies:
|
|
|
44
43
|
requirements:
|
|
45
44
|
- - "~>"
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
46
|
+
version: '2.0'
|
|
47
|
+
- - ">="
|
|
48
|
+
- !ruby/object:Gem::Version
|
|
49
|
+
version: 2.0.22
|
|
48
50
|
type: :runtime
|
|
49
51
|
prerelease: false
|
|
50
52
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
53
|
requirements:
|
|
52
54
|
- - "~>"
|
|
53
55
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
56
|
+
version: '2.0'
|
|
57
|
+
- - ">="
|
|
58
|
+
- !ruby/object:Gem::Version
|
|
59
|
+
version: 2.0.22
|
|
55
60
|
- !ruby/object:Gem::Dependency
|
|
56
61
|
name: excon
|
|
57
62
|
requirement: !ruby/object:Gem::Requirement
|
|
58
63
|
requirements:
|
|
59
|
-
- - "
|
|
64
|
+
- - ">="
|
|
60
65
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
66
|
+
version: 1.5.0
|
|
62
67
|
type: :runtime
|
|
63
68
|
prerelease: false
|
|
64
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
70
|
requirements:
|
|
66
|
-
- - "
|
|
71
|
+
- - ">="
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: 1.5.0
|
|
74
|
+
- !ruby/object:Gem::Dependency
|
|
75
|
+
name: faraday-excon
|
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - ">="
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '0'
|
|
81
|
+
type: :runtime
|
|
82
|
+
prerelease: false
|
|
83
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
84
|
+
requirements:
|
|
85
|
+
- - ">="
|
|
67
86
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0
|
|
87
|
+
version: '0'
|
|
69
88
|
- !ruby/object:Gem::Dependency
|
|
70
89
|
name: webmock
|
|
71
90
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -98,30 +117,30 @@ dependencies:
|
|
|
98
117
|
name: bundler
|
|
99
118
|
requirement: !ruby/object:Gem::Requirement
|
|
100
119
|
requirements:
|
|
101
|
-
- - "
|
|
120
|
+
- - ">="
|
|
102
121
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
122
|
+
version: 2.2.26
|
|
104
123
|
type: :development
|
|
105
124
|
prerelease: false
|
|
106
125
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
126
|
requirements:
|
|
108
|
-
- - "
|
|
127
|
+
- - ">="
|
|
109
128
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
129
|
+
version: 2.2.26
|
|
111
130
|
- !ruby/object:Gem::Dependency
|
|
112
131
|
name: rake
|
|
113
132
|
requirement: !ruby/object:Gem::Requirement
|
|
114
133
|
requirements:
|
|
115
134
|
- - "~>"
|
|
116
135
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
136
|
+
version: '13.0'
|
|
118
137
|
type: :development
|
|
119
138
|
prerelease: false
|
|
120
139
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
140
|
requirements:
|
|
122
141
|
- - "~>"
|
|
123
142
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
143
|
+
version: '13.0'
|
|
125
144
|
- !ruby/object:Gem::Dependency
|
|
126
145
|
name: rspec
|
|
127
146
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -136,6 +155,20 @@ dependencies:
|
|
|
136
155
|
- - "~>"
|
|
137
156
|
- !ruby/object:Gem::Version
|
|
138
157
|
version: '3.0'
|
|
158
|
+
- !ruby/object:Gem::Dependency
|
|
159
|
+
name: standard
|
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
|
161
|
+
requirements:
|
|
162
|
+
- - ">="
|
|
163
|
+
- !ruby/object:Gem::Version
|
|
164
|
+
version: '0'
|
|
165
|
+
type: :development
|
|
166
|
+
prerelease: false
|
|
167
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - ">="
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: '0'
|
|
139
172
|
description: PRX Access is a gem to supply authentication headers and descend the
|
|
140
173
|
HAL hypermedia link tree on PRX's APIs.
|
|
141
174
|
email:
|
|
@@ -144,9 +177,13 @@ executables: []
|
|
|
144
177
|
extensions: []
|
|
145
178
|
extra_rdoc_files: []
|
|
146
179
|
files:
|
|
180
|
+
- ".git-blame-ignore-revs"
|
|
181
|
+
- ".github/workflows/lint.yml"
|
|
182
|
+
- ".github/workflows/test.yml"
|
|
147
183
|
- ".gitignore"
|
|
148
184
|
- ".rspec"
|
|
149
|
-
- ".
|
|
185
|
+
- ".standard.yml"
|
|
186
|
+
- ".tool-versions"
|
|
150
187
|
- CODE_OF_CONDUCT.md
|
|
151
188
|
- Gemfile
|
|
152
189
|
- LICENSE
|
|
@@ -163,7 +200,6 @@ licenses: []
|
|
|
163
200
|
metadata:
|
|
164
201
|
homepage_uri: https://github.com/PRX/prx_access
|
|
165
202
|
source_code_uri: https://github.com/PRX/prx_access
|
|
166
|
-
post_install_message:
|
|
167
203
|
rdoc_options: []
|
|
168
204
|
require_paths:
|
|
169
205
|
- lib
|
|
@@ -178,8 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
178
214
|
- !ruby/object:Gem::Version
|
|
179
215
|
version: '0'
|
|
180
216
|
requirements: []
|
|
181
|
-
rubygems_version:
|
|
182
|
-
signing_key:
|
|
217
|
+
rubygems_version: 4.0.3
|
|
183
218
|
specification_version: 4
|
|
184
219
|
summary: PRX Access navigates HAL hypermedia resources on PRX services.
|
|
185
220
|
test_files: []
|