ejson-rails 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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