ejson-rails 0.2.1 → 0.2.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +3 -3
- data/.rubocop.yml +0 -1
- data/.ruby-version +1 -1
- data/Gemfile.lock +47 -46
- data/README.md +38 -2
- data/ejson-rails.gemspec +2 -2
- data/gemfiles/Gemfile.rails-min +1 -1
- data/lib/ejson/rails/railtie.rb +13 -4
- data/lib/ejson/rails/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d6d62b4bf362a99bed1a71b0a16cc83bd610157b8e3a06d8998a8c4d1a9479f9
|
|
4
|
+
data.tar.gz: b74ef1b02227276aed05fc815d876218046bdef4533013d4ca61c0287a79e22a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d8d136c6ef01aaf7011c0f8edb1f301654e813de2de0cff764422dabb929cea9b8df2e73eea3cb5f5a991a67166004f6bd62f0c0419984071fa8bc8b3009d549
|
|
7
|
+
data.tar.gz: 325e1a3e46fb0abfdd33b85002359768318dfac8fa6682cc9c09a17130604aa445aa98efcce57156a94cf9abda1d5bbec1315b4178b8830fe1e5e1d0f596f98a
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -10,13 +10,13 @@ jobs:
|
|
|
10
10
|
matrix:
|
|
11
11
|
entry:
|
|
12
12
|
- name: Minimum Rails
|
|
13
|
-
ruby: '
|
|
13
|
+
ruby: '3.1'
|
|
14
14
|
gemfile: Gemfile.rails-min
|
|
15
15
|
- name: Latest Rails
|
|
16
|
-
ruby: '3.
|
|
16
|
+
ruby: '3.3'
|
|
17
17
|
gemfile: Gemfile.rails-latest
|
|
18
18
|
- name: Edge Rails
|
|
19
|
-
ruby: '3.
|
|
19
|
+
ruby: '3.3'
|
|
20
20
|
gemfile: "Gemfile.rails-edge"
|
|
21
21
|
|
|
22
22
|
name: ${{ matrix.entry.name }}
|
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.3.0
|
data/Gemfile.lock
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
ejson-rails (0.2.
|
|
4
|
+
ejson-rails (0.2.2)
|
|
5
5
|
ejson
|
|
6
|
-
railties (>=
|
|
6
|
+
railties (>= 6.1)
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
actionpack (7.1.2)
|
|
12
|
-
actionview (= 7.1.2)
|
|
13
|
-
activesupport (= 7.1.2)
|
|
11
|
+
actionpack (7.1.3.2)
|
|
12
|
+
actionview (= 7.1.3.2)
|
|
13
|
+
activesupport (= 7.1.3.2)
|
|
14
14
|
nokogiri (>= 1.8.5)
|
|
15
15
|
racc
|
|
16
16
|
rack (>= 2.2.4)
|
|
@@ -18,13 +18,13 @@ GEM
|
|
|
18
18
|
rack-test (>= 0.6.3)
|
|
19
19
|
rails-dom-testing (~> 2.2)
|
|
20
20
|
rails-html-sanitizer (~> 1.6)
|
|
21
|
-
actionview (7.1.2)
|
|
22
|
-
activesupport (= 7.1.2)
|
|
21
|
+
actionview (7.1.3.2)
|
|
22
|
+
activesupport (= 7.1.3.2)
|
|
23
23
|
builder (~> 3.1)
|
|
24
24
|
erubi (~> 1.11)
|
|
25
25
|
rails-dom-testing (~> 2.2)
|
|
26
26
|
rails-html-sanitizer (~> 1.6)
|
|
27
|
-
activesupport (7.1.2)
|
|
27
|
+
activesupport (7.1.3.2)
|
|
28
28
|
base64
|
|
29
29
|
bigdecimal
|
|
30
30
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
@@ -36,14 +36,13 @@ GEM
|
|
|
36
36
|
tzinfo (~> 2.0)
|
|
37
37
|
ast (2.4.2)
|
|
38
38
|
base64 (0.2.0)
|
|
39
|
-
bigdecimal (3.1.
|
|
39
|
+
bigdecimal (3.1.6)
|
|
40
40
|
builder (3.2.4)
|
|
41
|
-
concurrent-ruby (1.2.
|
|
41
|
+
concurrent-ruby (1.2.3)
|
|
42
42
|
connection_pool (2.4.1)
|
|
43
43
|
crass (1.0.6)
|
|
44
|
-
diff-lcs (1.
|
|
45
|
-
drb (2.2.
|
|
46
|
-
ruby2_keywords
|
|
44
|
+
diff-lcs (1.5.1)
|
|
45
|
+
drb (2.2.1)
|
|
47
46
|
ejson (1.4.1)
|
|
48
47
|
erubi (1.12.0)
|
|
49
48
|
i18n (1.14.1)
|
|
@@ -52,23 +51,25 @@ GEM
|
|
|
52
51
|
irb (1.10.0)
|
|
53
52
|
rdoc
|
|
54
53
|
reline (>= 0.3.8)
|
|
55
|
-
json (2.
|
|
54
|
+
json (2.7.1)
|
|
55
|
+
language_server-protocol (3.17.0.3)
|
|
56
56
|
loofah (2.22.0)
|
|
57
57
|
crass (~> 1.0.2)
|
|
58
58
|
nokogiri (>= 1.12.0)
|
|
59
59
|
mini_portile2 (2.8.5)
|
|
60
|
-
minitest (5.
|
|
60
|
+
minitest (5.22.2)
|
|
61
61
|
mutex_m (0.2.0)
|
|
62
|
-
nokogiri (1.15.
|
|
62
|
+
nokogiri (1.15.6)
|
|
63
63
|
mini_portile2 (~> 2.8.2)
|
|
64
64
|
racc (~> 1.4)
|
|
65
|
-
parallel (1.
|
|
66
|
-
parser (3.
|
|
65
|
+
parallel (1.24.0)
|
|
66
|
+
parser (3.3.0.5)
|
|
67
67
|
ast (~> 2.4.1)
|
|
68
|
-
|
|
68
|
+
racc
|
|
69
|
+
psych (5.1.2)
|
|
69
70
|
stringio
|
|
70
71
|
racc (1.7.3)
|
|
71
|
-
rack (3.0.
|
|
72
|
+
rack (3.0.9.1)
|
|
72
73
|
rack-session (2.0.0)
|
|
73
74
|
rack (>= 3.0.0)
|
|
74
75
|
rack-test (2.1.0)
|
|
@@ -83,9 +84,9 @@ GEM
|
|
|
83
84
|
rails-html-sanitizer (1.6.0)
|
|
84
85
|
loofah (~> 2.21)
|
|
85
86
|
nokogiri (~> 1.14)
|
|
86
|
-
railties (7.1.2)
|
|
87
|
-
actionpack (= 7.1.2)
|
|
88
|
-
activesupport (= 7.1.2)
|
|
87
|
+
railties (7.1.3.2)
|
|
88
|
+
actionpack (= 7.1.3.2)
|
|
89
|
+
activesupport (= 7.1.3.2)
|
|
89
90
|
irb
|
|
90
91
|
rackup (>= 1.0.0)
|
|
91
92
|
rake (>= 12.2)
|
|
@@ -93,46 +94,46 @@ GEM
|
|
|
93
94
|
zeitwerk (~> 2.6)
|
|
94
95
|
rainbow (3.1.1)
|
|
95
96
|
rake (13.0.6)
|
|
96
|
-
rdoc (6.6.
|
|
97
|
+
rdoc (6.6.3.1)
|
|
97
98
|
psych (>= 4.0.0)
|
|
98
|
-
regexp_parser (2.
|
|
99
|
+
regexp_parser (2.9.0)
|
|
99
100
|
reline (0.4.1)
|
|
100
101
|
io-console (~> 0.5)
|
|
101
|
-
rexml (3.2.
|
|
102
|
-
rspec (3.
|
|
103
|
-
rspec-core (~> 3.
|
|
104
|
-
rspec-expectations (~> 3.
|
|
105
|
-
rspec-mocks (~> 3.
|
|
106
|
-
rspec-core (3.
|
|
107
|
-
rspec-support (~> 3.
|
|
108
|
-
rspec-expectations (3.
|
|
102
|
+
rexml (3.2.6)
|
|
103
|
+
rspec (3.12.0)
|
|
104
|
+
rspec-core (~> 3.12.0)
|
|
105
|
+
rspec-expectations (~> 3.12.0)
|
|
106
|
+
rspec-mocks (~> 3.12.0)
|
|
107
|
+
rspec-core (3.12.2)
|
|
108
|
+
rspec-support (~> 3.12.0)
|
|
109
|
+
rspec-expectations (3.12.3)
|
|
109
110
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
110
|
-
rspec-support (~> 3.
|
|
111
|
-
rspec-mocks (3.
|
|
111
|
+
rspec-support (~> 3.12.0)
|
|
112
|
+
rspec-mocks (3.12.6)
|
|
112
113
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
113
|
-
rspec-support (~> 3.
|
|
114
|
-
rspec-support (3.
|
|
115
|
-
rubocop (1.
|
|
114
|
+
rspec-support (~> 3.12.0)
|
|
115
|
+
rspec-support (3.12.1)
|
|
116
|
+
rubocop (1.62.1)
|
|
116
117
|
json (~> 2.3)
|
|
118
|
+
language_server-protocol (>= 3.17.0)
|
|
117
119
|
parallel (~> 1.10)
|
|
118
|
-
parser (>= 3.
|
|
120
|
+
parser (>= 3.3.0.2)
|
|
119
121
|
rainbow (>= 2.2.2, < 4.0)
|
|
120
122
|
regexp_parser (>= 1.8, < 3.0)
|
|
121
123
|
rexml (>= 3.2.5, < 4.0)
|
|
122
|
-
rubocop-ast (>= 1.
|
|
124
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
|
123
125
|
ruby-progressbar (~> 1.7)
|
|
124
126
|
unicode-display_width (>= 2.4.0, < 3.0)
|
|
125
|
-
rubocop-ast (1.
|
|
126
|
-
parser (>= 3.
|
|
127
|
+
rubocop-ast (1.31.2)
|
|
128
|
+
parser (>= 3.3.0.4)
|
|
127
129
|
rubocop-shopify (2.11.1)
|
|
128
130
|
rubocop (~> 1.42)
|
|
129
|
-
ruby-progressbar (1.
|
|
130
|
-
ruby2_keywords (0.0.5)
|
|
131
|
+
ruby-progressbar (1.13.0)
|
|
131
132
|
stringio (3.1.0)
|
|
132
133
|
thor (1.3.0)
|
|
133
134
|
tzinfo (2.0.6)
|
|
134
135
|
concurrent-ruby (~> 1.0)
|
|
135
|
-
unicode-display_width (2.
|
|
136
|
+
unicode-display_width (2.5.0)
|
|
136
137
|
webrick (1.8.1)
|
|
137
138
|
zeitwerk (2.6.12)
|
|
138
139
|
|
|
@@ -147,4 +148,4 @@ DEPENDENCIES
|
|
|
147
148
|
rubocop-shopify
|
|
148
149
|
|
|
149
150
|
BUNDLED WITH
|
|
150
|
-
2.
|
|
151
|
+
2.5.7
|
data/README.md
CHANGED
|
@@ -20,11 +20,42 @@ Or install it yourself as:
|
|
|
20
20
|
|
|
21
21
|
$ gem install ejson-rails
|
|
22
22
|
|
|
23
|
+
## Configuration
|
|
24
|
+
|
|
25
|
+
By default, the gem will look for decrypted secrets in `project/config/secrets.json` or `project/config/secrets.{current_rails_environment}.json` if that doesn't exist.
|
|
26
|
+
|
|
27
|
+
If your application or environment has a unique way of retrieving decrypted secrets, you can do so by setting `EJSON::Rails::Railtie.ejson_secret_source` to a callable object in `config/application.rb`. For example:
|
|
28
|
+
|
|
29
|
+
```ruby
|
|
30
|
+
# config/application.rb
|
|
31
|
+
|
|
32
|
+
# This must be placed BEFORE your application constant which inherits from Rails::Application
|
|
33
|
+
EJSON::Rails::Railtie.ejson_secret_source = FooBar::SecretCredentialReader
|
|
34
|
+
|
|
35
|
+
# Custom credential reader that lives somewhere else
|
|
36
|
+
module FooBar
|
|
37
|
+
class SecretCredentialReader
|
|
38
|
+
class << self
|
|
39
|
+
def call
|
|
40
|
+
'{"secret": "secret_from_ejson_secret_source"}'
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For simple cases, you can use a `proc`:
|
|
48
|
+
|
|
49
|
+
```ruby
|
|
50
|
+
EJSON::Rails::Railtie.ejson_secret_source = proc { '{"secret": "secret_from_ejson_secret_source"}' }
|
|
51
|
+
```
|
|
52
|
+
|
|
23
53
|
## Usage
|
|
24
54
|
|
|
25
|
-
Decrypted secrets and credentials
|
|
55
|
+
Decrypted secrets and credentials will be accessible via `Rails.application.secrets`. For example:
|
|
26
56
|
|
|
27
57
|
`# project/config/secrets.json`
|
|
58
|
+
|
|
28
59
|
```json
|
|
29
60
|
{ "some_secret": "key" }
|
|
30
61
|
```
|
|
@@ -42,6 +73,7 @@ NOTE: This gem does not decrypt ejson for you. You will need to configure this a
|
|
|
42
73
|
Rails 7.1 has deprecated application secrets in favor of credentials. ejson-rails can migrate secrets to application credentials.
|
|
43
74
|
|
|
44
75
|
Even before running Rails 7.1, you can migrate your secrets in several steps:
|
|
76
|
+
|
|
45
77
|
1. Convert secrets from YAML to JSON
|
|
46
78
|
2. Move any ERB embedded within the YAML to the corresponding environment file
|
|
47
79
|
3. Use `Rails.application.credentials` in place of Rails secrets
|
|
@@ -71,6 +103,7 @@ YAML supports ERB while JSON secrets do not. If your secrets contain ERB, you wi
|
|
|
71
103
|
**Before**:
|
|
72
104
|
|
|
73
105
|
`config/secrets.yml`
|
|
106
|
+
|
|
74
107
|
```yaml
|
|
75
108
|
development:
|
|
76
109
|
some_external_service:
|
|
@@ -79,7 +112,8 @@ development:
|
|
|
79
112
|
|
|
80
113
|
**After**:
|
|
81
114
|
|
|
82
|
-
`config/secrets.json` as generated by the
|
|
115
|
+
`config/secrets.json` as generated by the _recommended_ command above.
|
|
116
|
+
|
|
83
117
|
```json
|
|
84
118
|
{
|
|
85
119
|
"some_external_service": {
|
|
@@ -90,6 +124,7 @@ development:
|
|
|
90
124
|
```
|
|
91
125
|
|
|
92
126
|
`config/environments/development.rb`
|
|
127
|
+
|
|
93
128
|
```ruby
|
|
94
129
|
Rails.application.configure do
|
|
95
130
|
# elided
|
|
@@ -100,6 +135,7 @@ end
|
|
|
100
135
|
```
|
|
101
136
|
|
|
102
137
|
#### Rails 7.0 Note
|
|
138
|
+
|
|
103
139
|
> [!NOTE]
|
|
104
140
|
> In Rails 7.0, credentials are accessed as a Hash with [] and []=.. This is important because the dynamic accessor methods will set values in a different object, and credentials will behave inconsistently after that:
|
|
105
141
|
|
data/ejson-rails.gemspec
CHANGED
|
@@ -23,10 +23,10 @@ Gem::Specification.new do |spec|
|
|
|
23
23
|
|
|
24
24
|
spec.metadata = { "allowed_push_host" => "https://rubygems.org" }
|
|
25
25
|
|
|
26
|
-
spec.required_ruby_version = ">=
|
|
26
|
+
spec.required_ruby_version = ">= 3.1.0"
|
|
27
27
|
|
|
28
28
|
spec.add_dependency("ejson")
|
|
29
|
-
spec.add_dependency("railties", ">=
|
|
29
|
+
spec.add_dependency("railties", ">= 6.1")
|
|
30
30
|
|
|
31
31
|
spec.add_development_dependency("rake", "~> 13.0")
|
|
32
32
|
spec.add_development_dependency("rspec", "~> 3.0")
|
data/gemfiles/Gemfile.rails-min
CHANGED
data/lib/ejson/rails/railtie.rb
CHANGED
|
@@ -6,14 +6,15 @@ module EJSON
|
|
|
6
6
|
private_constant :Rails
|
|
7
7
|
|
|
8
8
|
class Railtie < Rails::Railtie
|
|
9
|
-
singleton_class.attr_accessor(:set_secrets)
|
|
9
|
+
singleton_class.attr_accessor(:ejson_secret_source, :set_secrets)
|
|
10
10
|
@set_secrets = true
|
|
11
11
|
|
|
12
12
|
config.before_configuration do
|
|
13
|
-
|
|
14
|
-
next unless
|
|
13
|
+
secrets = load_secrets_from_config || load_secrets_from_disk
|
|
14
|
+
next unless secrets
|
|
15
|
+
|
|
16
|
+
secrets = JSON.parse(secrets, symbolize_names: true)
|
|
15
17
|
|
|
16
|
-
secrets = JSON.parse(json_file.read, symbolize_names: true)
|
|
17
18
|
Rails.application.secrets.deep_merge!(secrets) if set_secrets
|
|
18
19
|
# Merging into `credentials.config` because in Rails 7.0, reading a credential with
|
|
19
20
|
# Rails.application.credentials[:some_credential] won't work otherwise.
|
|
@@ -32,6 +33,14 @@ module EJSON
|
|
|
32
33
|
class << self
|
|
33
34
|
private
|
|
34
35
|
|
|
36
|
+
def load_secrets_from_config
|
|
37
|
+
ejson_secret_source&.call
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def load_secrets_from_disk
|
|
41
|
+
json_files.detect { |file| valid?(file) }&.read
|
|
42
|
+
end
|
|
43
|
+
|
|
35
44
|
def valid?(pathname)
|
|
36
45
|
pathname.exist?
|
|
37
46
|
end
|
data/lib/ejson/rails/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ejson-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gannon McGibbon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2024-05-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: ejson
|
|
@@ -30,14 +30,14 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
33
|
+
version: '6.1'
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
40
|
+
version: '6.1'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rake
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,14 +109,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
109
109
|
requirements:
|
|
110
110
|
- - ">="
|
|
111
111
|
- !ruby/object:Gem::Version
|
|
112
|
-
version:
|
|
112
|
+
version: 3.1.0
|
|
113
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
115
|
- - ">="
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
117
|
version: '0'
|
|
118
118
|
requirements: []
|
|
119
|
-
rubygems_version: 3.
|
|
119
|
+
rubygems_version: 3.5.10
|
|
120
120
|
signing_key:
|
|
121
121
|
specification_version: 4
|
|
122
122
|
summary: Asymmetric keywise encryption for JSON on Rails
|