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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69f79981ad2617db5951c38bdef5d9fb77dedd27e52378f3fa460e5af89435b0
4
- data.tar.gz: 7ded0b73fc84ae62c508afa5e2c185f85edd83a12872a326c11a9df91292b577
3
+ metadata.gz: d6d62b4bf362a99bed1a71b0a16cc83bd610157b8e3a06d8998a8c4d1a9479f9
4
+ data.tar.gz: b74ef1b02227276aed05fc815d876218046bdef4533013d4ca61c0287a79e22a
5
5
  SHA512:
6
- metadata.gz: bbe4e714ed9a6f110a781e8f8e1fdde6a26695f949798dd8eabdd9ba59a5321a1928dc6d6b2d6f9b685c89232873b4fa00dbfac0daefd10acc7dee09baf8f2c2
7
- data.tar.gz: 15e2abb7e802deeaa5358ec6cd10f52576a4402bf490bcae5121152fa1cde54d29cafd2899ccb4244274dd809f61b09331ff7e1d4d77dde38ce0fa9813f9ae1c
6
+ metadata.gz: d8d136c6ef01aaf7011c0f8edb1f301654e813de2de0cff764422dabb929cea9b8df2e73eea3cb5f5a991a67166004f6bd62f0c0419984071fa8bc8b3009d549
7
+ data.tar.gz: 325e1a3e46fb0abfdd33b85002359768318dfac8fa6682cc9c09a17130604aa445aa98efcce57156a94cf9abda1d5bbec1315b4178b8830fe1e5e1d0f596f98a
@@ -10,13 +10,13 @@ jobs:
10
10
  matrix:
11
11
  entry:
12
12
  - name: Minimum Rails
13
- ruby: '2.7'
13
+ ruby: '3.1'
14
14
  gemfile: Gemfile.rails-min
15
15
  - name: Latest Rails
16
- ruby: '3.2'
16
+ ruby: '3.3'
17
17
  gemfile: Gemfile.rails-latest
18
18
  - name: Edge Rails
19
- ruby: '3.2'
19
+ ruby: '3.3'
20
20
  gemfile: "Gemfile.rails-edge"
21
21
 
22
22
  name: ${{ matrix.entry.name }}
data/.rubocop.yml CHANGED
@@ -4,6 +4,5 @@ inherit_gem:
4
4
  AllCops:
5
5
  NewCops: disable
6
6
  SuggestExtensions: false
7
- TargetRubyVersion: 3.2
8
7
  Exclude:
9
8
  - vendor/bundle/**/*
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.0
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.1)
4
+ ejson-rails (0.2.2)
5
5
  ejson
6
- railties (>= 5.2)
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.4)
39
+ bigdecimal (3.1.6)
40
40
  builder (3.2.4)
41
- concurrent-ruby (1.2.2)
41
+ concurrent-ruby (1.2.3)
42
42
  connection_pool (2.4.1)
43
43
  crass (1.0.6)
44
- diff-lcs (1.4.4)
45
- drb (2.2.0)
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.6.3)
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.20.0)
60
+ minitest (5.22.2)
61
61
  mutex_m (0.2.0)
62
- nokogiri (1.15.5)
62
+ nokogiri (1.15.6)
63
63
  mini_portile2 (~> 2.8.2)
64
64
  racc (~> 1.4)
65
- parallel (1.22.1)
66
- parser (3.2.0.0)
65
+ parallel (1.24.0)
66
+ parser (3.3.0.5)
67
67
  ast (~> 2.4.1)
68
- psych (5.1.1.1)
68
+ racc
69
+ psych (5.1.2)
69
70
  stringio
70
71
  racc (1.7.3)
71
- rack (3.0.8)
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.0)
97
+ rdoc (6.6.3.1)
97
98
  psych (>= 4.0.0)
98
- regexp_parser (2.6.1)
99
+ regexp_parser (2.9.0)
99
100
  reline (0.4.1)
100
101
  io-console (~> 0.5)
101
- rexml (3.2.5)
102
- rspec (3.10.0)
103
- rspec-core (~> 3.10.0)
104
- rspec-expectations (~> 3.10.0)
105
- rspec-mocks (~> 3.10.0)
106
- rspec-core (3.10.1)
107
- rspec-support (~> 3.10.0)
108
- rspec-expectations (3.10.1)
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.10.0)
111
- rspec-mocks (3.10.2)
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.10.0)
114
- rspec-support (3.10.2)
115
- rubocop (1.43.0)
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.2.0.0)
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.24.1, < 2.0)
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.24.1)
126
- parser (>= 3.1.1.0)
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.11.0)
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.4.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.3.17
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 from `project/config/secrets.json` (or `project/config/secrets.{current_rails_environment}.json` if that doesn't exist) will be accessible via `Rails.application.secrets`. For example:
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 *recommended* command above.
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 = ">= 2.7.0"
26
+ spec.required_ruby_version = ">= 3.1.0"
27
27
 
28
28
  spec.add_dependency("ejson")
29
- spec.add_dependency("railties", ">= 5.2")
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")
@@ -2,4 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  eval_gemfile('../Gemfile')
4
4
 
5
- gem 'railties', '5.2'
5
+ gem 'railties', '6.1'
@@ -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
- json_file = json_files.detect { |file| valid?(file) }
14
- next unless json_file
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module EJSON
4
4
  module Rails
5
- VERSION = "0.2.1"
5
+ VERSION = "0.2.2"
6
6
  end
7
7
  end
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.1
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: 2023-12-04 00:00:00.000000000 Z
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: '5.2'
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: '5.2'
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: 2.7.0
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.4.21
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