vault-rails 0.3.2 → 0.7.1

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
data/spec/spec_helper.rb CHANGED
@@ -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
@@ -9,6 +9,81 @@ describe Vault::Rails::Configurable do
9
9
  end
10
10
  end
11
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
+
12
87
  describe '.in_memory_warnings_enabled?' do
13
88
  context 'when unconfigured' do
14
89
  it 'returns true' do
@@ -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,59 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vault-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.7.1
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-05-11 00:00:00.000000000 Z
11
+ date: 2021-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
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
@@ -171,11 +172,13 @@ files:
171
172
  - spec/dummy/public/500.html
172
173
  - spec/dummy/public/favicon.ico
173
174
  - spec/integration/rails_spec.rb
175
+ - spec/lib/vault/rails/json_serializer_spec.rb
174
176
  - spec/spec_helper.rb
175
177
  - spec/support/vault_server.rb
176
178
  - spec/unit/encrypted_model_spec.rb
177
179
  - spec/unit/rails/configurable_spec.rb
178
180
  - spec/unit/rails_spec.rb
181
+ - spec/unit/vault/rails_spec.rb
179
182
  homepage: https://github.com/hashicorp/vault-rails
180
183
  licenses:
181
184
  - MPL-2.0
@@ -195,13 +198,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
198
  - !ruby/object:Gem::Version
196
199
  version: '0'
197
200
  requirements: []
198
- rubyforge_project:
199
- rubygems_version: 2.6.10
201
+ rubygems_version: 3.2.3
200
202
  signing_key:
201
203
  specification_version: 4
202
204
  summary: Official Vault plugin for Rails
203
205
  test_files:
206
+ - spec/dummy/Rakefile
204
207
  - spec/dummy/app/models/lazy_person.rb
208
+ - spec/dummy/app/models/lazy_single_person.rb
205
209
  - spec/dummy/app/models/person.rb
206
210
  - spec/dummy/bin/bundle
207
211
  - spec/dummy/bin/rails
@@ -232,10 +236,11 @@ test_files:
232
236
  - spec/dummy/public/422.html
233
237
  - spec/dummy/public/500.html
234
238
  - spec/dummy/public/favicon.ico
235
- - spec/dummy/Rakefile
236
239
  - spec/integration/rails_spec.rb
240
+ - spec/lib/vault/rails/json_serializer_spec.rb
237
241
  - spec/spec_helper.rb
238
242
  - spec/support/vault_server.rb
239
243
  - spec/unit/encrypted_model_spec.rb
240
244
  - spec/unit/rails/configurable_spec.rb
241
245
  - spec/unit/rails_spec.rb
246
+ - spec/unit/vault/rails_spec.rb