vault-rails 0.3.1 → 0.7.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.
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Vault::Rails::JSONSerializer do
4
+ [
5
+ nil,
6
+ false,
7
+ true,
8
+ "",
9
+ "foo",
10
+ {},
11
+ { "foo" => "bar" },
12
+ [],
13
+ ["foo", "bar"],
14
+ 0,
15
+ 123,
16
+ 0.0,
17
+ 0.123,
18
+ 0xff,
19
+ 123e123
20
+ ].each do |object|
21
+ it "encodes and decodes #{object.inspect}" do
22
+ encoded = described_class.encode(object)
23
+ expect(encoded).to be_a(String)
24
+ decoded = described_class.decode(encoded)
25
+ expect(decoded).to eq(object)
26
+ end
27
+ end
28
+
29
+ describe ".decode" do
30
+ subject(:decoded) { described_class.decode(raw) }
31
+
32
+ context "with nil" do
33
+ let(:raw) { nil }
34
+ it { is_expected.to eq(nil) }
35
+ end
36
+
37
+ context "with an empty string (only possible if column has a default)" do
38
+ let(:raw) { "" }
39
+ it { is_expected.to eq(nil) }
40
+ end
41
+ end
42
+ end
@@ -3,12 +3,31 @@ require "vault/rails"
3
3
 
4
4
  require "rspec"
5
5
 
6
+ def vault_version_string
7
+ @vault_version_string ||= `vault --version`
8
+ end
9
+
10
+ TEST_VAULT_VERSION = Gem::Version.new(vault_version_string.match(/(\d+\.\d+\.\d+)/)[1])
11
+
6
12
  RSpec.configure do |config|
7
13
  # Prohibit using the should syntax
8
14
  config.expect_with :rspec do |spec|
9
15
  spec.syntax = :expect
10
16
  end
11
17
 
18
+ # Allow tests to isolate a specific test using +focus: true+. If nothing
19
+ # is focused, then all tests are executed.
20
+ config.filter_run_when_matching :focus
21
+ config.filter_run_excluding vault: lambda { |v|
22
+ !vault_meets_requirements?(v)
23
+ }
24
+ config.filter_run_excluding ent_vault: lambda { |v|
25
+ !vault_is_enterprise? || !vault_meets_requirements?(v)
26
+ }
27
+ config.filter_run_excluding non_ent_vault: lambda { |v|
28
+ vault_is_enterprise? || !vault_meets_requirements?(v)
29
+ }
30
+
12
31
  # Allow tests to isolate a specific test using +focus: true+. If nothing
13
32
  # is focused, then all tests are executed.
14
33
  config.filter_run(focus: true)
@@ -21,4 +40,12 @@ RSpec.configure do |config|
21
40
  config.order = 'random'
22
41
  end
23
42
 
43
+ def vault_is_enterprise?
44
+ !!vault_version_string.match(/\+(?:ent|prem)/)
45
+ end
46
+
47
+ def vault_meets_requirements?(v)
48
+ Gem::Requirement.new(v).satisfied_by?(TEST_VAULT_VERSION)
49
+ end
50
+
24
51
  require File.expand_path("../dummy/config/environment.rb", __FILE__)
@@ -20,6 +20,12 @@ describe Vault::EncryptedModel do
20
20
  }.to raise_error(Vault::Rails::ValidationFailedError)
21
21
  end
22
22
 
23
+ it "raises an exception if a proc is passed to :context without an arity of 1" do
24
+ expect {
25
+ klass.vault_attribute(:foo, context: ->() { })
26
+ }.to raise_error(Vault::Rails::ValidationFailedError, /1 argument/i)
27
+ end
28
+
23
29
  it "defines a getter" do
24
30
  klass.vault_attribute(:foo)
25
31
  expect(klass.instance_methods).to include(:foo)
@@ -36,10 +42,9 @@ describe Vault::EncryptedModel do
36
42
  end
37
43
 
38
44
  it "defines dirty attribute methods" do
39
- klass.vault_attribute(:foo)
40
- expect(klass.instance_methods).to include(:foo_change)
41
- expect(klass.instance_methods).to include(:foo_changed?)
42
- expect(klass.instance_methods).to include(:foo_was)
45
+ expect(Person.new).to respond_to(:ssn_change)
46
+ expect(Person.new).to respond_to(:ssn_changed?)
47
+ expect(Person.new).to respond_to(:ssn_was)
43
48
  end
44
49
  end
45
50
  end
@@ -0,0 +1,118 @@
1
+ require "spec_helper"
2
+
3
+ describe Vault::Rails::Configurable do
4
+ subject do
5
+ Class.new.tap do |c|
6
+ c.class.instance_eval do
7
+ include Vault::Rails::Configurable
8
+ end
9
+ end
10
+ end
11
+
12
+ describe '.application' do
13
+ context 'when unconfigured' do
14
+ it 'raises exception' do
15
+ expect {
16
+ subject.application
17
+ }.to raise_error(RuntimeError)
18
+ end
19
+ end
20
+
21
+ context 'when configured' do
22
+ before do
23
+ subject.configure do |vault|
24
+ vault.application = "dummy"
25
+ end
26
+ end
27
+
28
+ it 'returns the application' do
29
+ expect(subject.application).to eq "dummy"
30
+ end
31
+ end
32
+
33
+ context 'falls back to ENV' do
34
+ before do
35
+ ENV["VAULT_RAILS_APPLICATION"] = "envdummy"
36
+ end
37
+ after do
38
+ ENV.delete("VAULT_RAILS_APPLICATION")
39
+ end
40
+
41
+ it 'returns the application defined in ENV' do
42
+ expect(subject.application).to eq "envdummy"
43
+ end
44
+ end
45
+ end
46
+
47
+ describe '.enabled' do
48
+ context 'when unconfigured' do
49
+ it 'returns false' do
50
+ expect(subject.enabled?).to eq false
51
+ end
52
+ end
53
+
54
+ context 'when configured' do
55
+ it 'returns true' do
56
+ subject.configure do |vault|
57
+ vault.enabled = true
58
+ end
59
+ expect(subject.enabled?).to eq true
60
+ end
61
+
62
+ it 'returns false' do
63
+ subject.configure do |vault|
64
+ vault.enabled = false
65
+ end
66
+ expect(subject.enabled?).to eq false
67
+ end
68
+ end
69
+
70
+ context 'falls back to ENV' do
71
+ after do
72
+ ENV.delete("VAULT_RAILS_ENABLED")
73
+ end
74
+
75
+ it 'returns false' do
76
+ ENV["VAULT_RAILS_ENABLED"] = "false"
77
+ expect(subject.enabled?).to eq false
78
+ end
79
+
80
+ it 'returns true' do
81
+ ENV["VAULT_RAILS_ENABLED"] = "true"
82
+ expect(subject.enabled?).to eq true
83
+ end
84
+ end
85
+ end
86
+
87
+ describe '.in_memory_warnings_enabled?' do
88
+ context 'when unconfigured' do
89
+ it 'returns true' do
90
+ expect(subject.in_memory_warnings_enabled?).to eq true
91
+ end
92
+ end
93
+
94
+ context 'when configured as on' do
95
+ before do
96
+ subject.configure do |vault|
97
+ vault.in_memory_warnings_enabled = true
98
+ end
99
+ end
100
+
101
+ it 'returns true' do
102
+ expect(subject.in_memory_warnings_enabled?).to eq true
103
+ end
104
+ end
105
+
106
+ context 'when configured as off' do
107
+ before do
108
+ subject.configure do |vault|
109
+ vault.in_memory_warnings_enabled = false
110
+ end
111
+ end
112
+
113
+ it 'returns false' do
114
+ expect(subject.in_memory_warnings_enabled?).to eq false
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Vault::Rails do
4
+ describe "#memory_key_for" do
5
+ input_examples = [
6
+ ["path", "key"],
7
+ ["path", "key", "context"],
8
+ ["a_really_long_path", "a_really_long_key"],
9
+ ["a_really_long_path", "a_really_long_key", "a_really_long_context"],
10
+ ]
11
+
12
+ input_examples.each do |path, key, encryption_context|
13
+ context "with path=#{path}, key=#{key}, context=#{encryption_context}" do
14
+ it "returns exactly 16 bytes as required by OpenSSL AES 128" do
15
+ memory_key = Vault::Rails.send(
16
+ :memory_key_for, path, key, context: encryption_context
17
+ )
18
+ expect(memory_key.bytesize).to eq(16)
19
+ end
20
+ end
21
+ end
22
+
23
+ it "returns unique keys for different paths, keys, and contexts" do
24
+ memory_keys = input_examples.map { |path, key, encryption_context|
25
+ Vault::Rails.send(
26
+ :memory_key_for, path, key, context: encryption_context
27
+ )
28
+ }
29
+
30
+ expect(memory_keys).to match_array(memory_keys.uniq)
31
+ end
32
+ end
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vault-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seth Vargo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-03 00:00:00.000000000 Z
11
+ date: 2020-10-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,44 +16,44 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.0'
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: vault
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.5'
33
+ version: '0.14'
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: '0.5'
40
+ version: '0.14'
41
41
  - !ruby/object:Gem::Dependency
42
- name: appraisal
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '2.1'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '2.1'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: pry
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: pry
70
+ name: pry-byebug
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '10.0'
89
+ version: 12.3.3
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '10.0'
96
+ version: 12.3.3
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -112,16 +112,16 @@ dependencies:
112
112
  name: sqlite3
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 1.3.6
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: 1.3.6
125
125
  description: Official Vault plugin for Rails
126
126
  email:
127
127
  - sethvargo@gmail.com
@@ -136,10 +136,11 @@ files:
136
136
  - lib/vault/rails.rb
137
137
  - lib/vault/rails/configurable.rb
138
138
  - lib/vault/rails/errors.rb
139
- - lib/vault/rails/serializer.rb
139
+ - lib/vault/rails/json_serializer.rb
140
140
  - lib/vault/rails/version.rb
141
141
  - spec/dummy/Rakefile
142
142
  - spec/dummy/app/models/lazy_person.rb
143
+ - spec/dummy/app/models/lazy_single_person.rb
143
144
  - spec/dummy/app/models/person.rb
144
145
  - spec/dummy/bin/bundle
145
146
  - spec/dummy/bin/rails
@@ -163,25 +164,24 @@ files:
163
164
  - spec/dummy/config/locales/en.yml
164
165
  - spec/dummy/config/routes.rb
165
166
  - spec/dummy/config/secrets.yml
166
- - spec/dummy/db/development.sqlite3
167
167
  - spec/dummy/db/migrate/20150428220101_create_people.rb
168
168
  - spec/dummy/db/schema.rb
169
- - spec/dummy/db/test.sqlite3
170
169
  - spec/dummy/lib/binary_serializer.rb
171
- - spec/dummy/log/development.log
172
- - spec/dummy/log/test.log
173
170
  - spec/dummy/public/404.html
174
171
  - spec/dummy/public/422.html
175
172
  - spec/dummy/public/500.html
176
173
  - spec/dummy/public/favicon.ico
177
174
  - spec/integration/rails_spec.rb
175
+ - spec/lib/vault/rails/json_serializer_spec.rb
178
176
  - spec/spec_helper.rb
179
177
  - spec/support/vault_server.rb
180
178
  - spec/unit/encrypted_model_spec.rb
179
+ - spec/unit/rails/configurable_spec.rb
181
180
  - spec/unit/rails_spec.rb
181
+ - spec/unit/vault/rails_spec.rb
182
182
  homepage: https://github.com/hashicorp/vault-rails
183
183
  licenses:
184
- - MPLv3
184
+ - MPL-2.0
185
185
  metadata: {}
186
186
  post_install_message:
187
187
  rdoc_options: []
@@ -198,50 +198,49 @@ required_rubygems_version: !ruby/object:Gem::Requirement
198
198
  - !ruby/object:Gem::Version
199
199
  version: '0'
200
200
  requirements: []
201
- rubyforge_project:
202
- rubygems_version: 2.5.1
201
+ rubygems_version: 3.1.4
203
202
  signing_key:
204
203
  specification_version: 4
205
204
  summary: Official Vault plugin for Rails
206
205
  test_files:
207
- - spec/dummy/app/models/lazy_person.rb
208
- - spec/dummy/app/models/person.rb
206
+ - spec/support/vault_server.rb
207
+ - spec/integration/rails_spec.rb
209
208
  - spec/dummy/bin/bundle
210
- - spec/dummy/bin/rails
211
209
  - spec/dummy/bin/rake
210
+ - spec/dummy/bin/rails
211
+ - spec/dummy/db/schema.rb
212
+ - spec/dummy/db/migrate/20150428220101_create_people.rb
213
+ - spec/dummy/public/404.html
214
+ - spec/dummy/public/422.html
215
+ - spec/dummy/public/500.html
216
+ - spec/dummy/public/favicon.ico
217
+ - spec/dummy/Rakefile
218
+ - spec/dummy/config.ru
219
+ - spec/dummy/app/models/lazy_person.rb
220
+ - spec/dummy/app/models/lazy_single_person.rb
221
+ - spec/dummy/app/models/person.rb
222
+ - spec/dummy/config/environment.rb
223
+ - spec/dummy/config/locales/en.yml
212
224
  - spec/dummy/config/application.rb
225
+ - spec/dummy/config/routes.rb
213
226
  - spec/dummy/config/boot.rb
214
- - spec/dummy/config/database.yml
215
- - spec/dummy/config/environment.rb
216
- - spec/dummy/config/environments/development.rb
227
+ - spec/dummy/config/secrets.yml
217
228
  - spec/dummy/config/environments/test.rb
218
- - spec/dummy/config/initializers/assets.rb
229
+ - spec/dummy/config/environments/development.rb
230
+ - spec/dummy/config/initializers/inflections.rb
231
+ - spec/dummy/config/initializers/vault.rb
219
232
  - spec/dummy/config/initializers/backtrace_silencers.rb
220
- - spec/dummy/config/initializers/cookies_serializer.rb
221
233
  - spec/dummy/config/initializers/filter_parameter_logging.rb
222
- - spec/dummy/config/initializers/inflections.rb
223
- - spec/dummy/config/initializers/mime_types.rb
224
234
  - spec/dummy/config/initializers/session_store.rb
225
- - spec/dummy/config/initializers/vault.rb
235
+ - spec/dummy/config/initializers/mime_types.rb
236
+ - spec/dummy/config/initializers/assets.rb
226
237
  - spec/dummy/config/initializers/wrap_parameters.rb
227
- - spec/dummy/config/locales/en.yml
228
- - spec/dummy/config/routes.rb
229
- - spec/dummy/config/secrets.yml
230
- - spec/dummy/config.ru
231
- - spec/dummy/db/development.sqlite3
232
- - spec/dummy/db/migrate/20150428220101_create_people.rb
233
- - spec/dummy/db/schema.rb
234
- - spec/dummy/db/test.sqlite3
238
+ - spec/dummy/config/initializers/cookies_serializer.rb
239
+ - spec/dummy/config/database.yml
235
240
  - spec/dummy/lib/binary_serializer.rb
236
- - spec/dummy/log/development.log
237
- - spec/dummy/log/test.log
238
- - spec/dummy/public/404.html
239
- - spec/dummy/public/422.html
240
- - spec/dummy/public/500.html
241
- - spec/dummy/public/favicon.ico
242
- - spec/dummy/Rakefile
243
- - spec/integration/rails_spec.rb
244
241
  - spec/spec_helper.rb
245
- - spec/support/vault_server.rb
246
- - spec/unit/encrypted_model_spec.rb
247
242
  - spec/unit/rails_spec.rb
243
+ - spec/unit/vault/rails_spec.rb
244
+ - spec/unit/encrypted_model_spec.rb
245
+ - spec/unit/rails/configurable_spec.rb
246
+ - spec/lib/vault/rails/json_serializer_spec.rb