mongoid-encrypted-fields 1.2.1 → 1.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 +15 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +1 -0
- data/.travis.yml +9 -0
- data/CHANGLOG.md +6 -3
- data/Gemfile +11 -2
- data/README.md +4 -0
- data/Rakefile +14 -5
- data/lib/mongoid-encrypted-fields/validations/uniqueness.rb +3 -6
- data/lib/mongoid-encrypted-fields/version.rb +1 -1
- data/mongoid-encrypted-fields.gemspec +13 -12
- data/spec/mongoid-encrypted-fields/validations/uniqueness_spec.rb +54 -2
- data/spec/spec_helper.rb +7 -1
- data/spec/support/models/person.rb +2 -0
- metadata +21 -25
- data/.rspec +0 -2
- data/.rvmrc +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZmZkZTFkMzNjYzIwYTBkYWMxYzVmNzBlNjg2MjdiMWU4OGE2Njc0OA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YmVjZTZmNGU4NDFiNzIwOTA4ZDdjZWE2M2I2Yjg0MThhMjYwOGU4Nw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
N2ViYzJlNGYzOTI1ZWY5NjQ5YjY3MWZjMTNmZjZhY2I3ZDIyMjMyYjJkMGJi
|
10
|
+
MTgxNmEwNmNjOTE2MmZiOTU1NjU2NDkzNjE1MjFhMGE3YWYyN2I0NjZkZGVk
|
11
|
+
ZjFkYmExNGY4NjM5MzVmNzJhMmU2YmIyZjc4MWI1OTNlZmM1MzQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MjIyNDViMDdhYmY3OGE5NjNlMWIyZWQ1NjJiZWVkZmUxNWNkYmY0NzMwNmUw
|
14
|
+
MzNkM2Y3ZTZlM2E2MmNjZmE2MzA2ODA4ZjZjMTk5M2RjMTUwYzIxMjgwYmE5
|
15
|
+
Y2JmMDgzNDM2Njk2OTYxYWFmZDNjZTdlMTc1YmY5YTg1Njk5YzU=
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGLOG.md
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# Revision history
|
2
2
|
|
3
|
-
## 1.2.
|
3
|
+
## 1.2.2
|
4
|
+
* Accepted [pull request](https://github.com/KoanHealth/mongoid-encrypted-fields/pull/10) to support aliased fields with the uniqueness validator (@johnnyshields)
|
4
5
|
|
5
|
-
## 1.2
|
6
|
+
## 1.2.1
|
7
|
+
* Uniqueness validator fails if developer attempts to use case-insensitive option for an encrypted field
|
6
8
|
|
7
|
-
|
9
|
+
## 1.2 - Add EncryptedHash
|
10
|
+
* Accepted [pull request](https://github.com/KoanHealth/mongoid-encrypted-fields/pull/4) to add support for encrypted hashes (@ashirazi)
|
8
11
|
|
9
12
|
## 1.1 - Breaking changes - PLEASE READ
|
10
13
|
|
data/Gemfile
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in mongoid-encrypted-fields.gemspec
|
4
2
|
gemspec
|
3
|
+
|
4
|
+
gem 'rake'
|
5
|
+
gem 'mongoid', '~> 3'
|
6
|
+
|
7
|
+
gem 'coveralls', require: false
|
8
|
+
|
9
|
+
group :test do
|
10
|
+
gem 'rspec', '~> 2.13'
|
11
|
+
gem 'gibberish', '~> 1.2.2'
|
12
|
+
gem 'encrypted_strings', '~> 0.3'
|
13
|
+
end
|
data/README.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
mongoid-encrypted-fields
|
2
2
|
========================
|
3
|
+
[](http://travis-ci.org/KoanHealth/mongoid-encrypted-fields)
|
4
|
+
[](https://codeclimate.com/github/KoanHealth/mongoid-encrypted-fields)
|
5
|
+
[](https://coveralls.io/r/KoanHealth/mongoid-encrypted-fields)
|
6
|
+
[](https://gemnasium.com/KoanHealth/mongoid-encrypted-fields)
|
3
7
|
|
4
8
|
A library for storing encrypted data in Mongo using Mongoid. We looked at a few alternatives, but wanted something that stored the values securely and unobtrusively.
|
5
9
|
|
data/Rakefile
CHANGED
@@ -1,8 +1,17 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'bundler'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
Bundler.setup
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
require 'rake'
|
6
|
+
require 'rspec/core/rake_task'
|
7
|
+
|
8
|
+
RSpec::Core::RakeTask.new('spec') do |spec|
|
9
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
10
|
+
end
|
11
|
+
|
12
|
+
RSpec::Core::RakeTask.new('spec:progress') do |spec|
|
13
|
+
spec.rspec_opts = %w(--format progress)
|
14
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
7
15
|
end
|
8
16
|
|
17
|
+
task :default => :spec
|
@@ -3,21 +3,18 @@
|
|
3
3
|
module Mongoid
|
4
4
|
module Validations # renamed to module Validatable in Mongoid 4.0
|
5
5
|
|
6
|
-
# Monkey-patch for Mongoid's uniqueness validator to
|
7
|
-
#
|
6
|
+
# Monkey-patch for Mongoid's uniqueness validator to enforce that the :case_sensitive option does not work
|
7
|
+
# for encrypted fields; they must always be case-sensitive.
|
8
8
|
#
|
9
9
|
# Patch is confirmed to work on Mongoid >= 3.0.0
|
10
10
|
# Should work in Mongoid >= 4.0.0 by renaming module Validations to Validatable
|
11
|
-
#
|
12
|
-
# A known limitation is that the :case_sensitive option does not work
|
13
|
-
# for encrypted fields; they must always be case-sensitive.
|
14
11
|
class UniquenessValidator
|
15
12
|
|
16
13
|
def setup_with_validation(klass)
|
17
14
|
setup_without_validation(klass)
|
18
15
|
return if case_sensitive?
|
19
16
|
attributes.each do |attribute|
|
20
|
-
field_type = @klass.fields[attribute
|
17
|
+
field_type = @klass.fields[@klass.database_field_name(attribute)].options[:type]
|
21
18
|
raise ArgumentError, "Encrypted field :#{attribute} cannot support case insensitive uniqueness" if field_type.method_defined?(:encrypted)
|
22
19
|
end
|
23
20
|
end
|
@@ -4,23 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'mongoid-encrypted-fields/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |gem|
|
7
|
-
gem.name =
|
7
|
+
gem.name = 'mongoid-encrypted-fields'
|
8
8
|
gem.version = Mongoid::EncryptedFields::VERSION
|
9
|
-
gem.authors = [
|
10
|
-
gem.email = [
|
11
|
-
gem.description =
|
12
|
-
gem.summary =
|
13
|
-
gem.homepage =
|
9
|
+
gem.authors = ['Koan Health']
|
10
|
+
gem.email = ['development@koanhealth.com']
|
11
|
+
gem.description = 'A library for storing encrypted data in Mongo'
|
12
|
+
gem.summary = 'Custom types for storing encrypted data'
|
13
|
+
gem.homepage = 'https://github.com/KoanHealth/mongoid-encrypted-fields'
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
-
gem.require_paths = [
|
18
|
+
gem.require_paths = ['lib']
|
19
19
|
|
20
|
-
gem.add_dependency
|
20
|
+
gem.add_dependency 'mongoid', '~> 3'
|
21
21
|
|
22
|
-
gem.add_development_dependency
|
23
|
-
gem.add_development_dependency
|
24
|
-
gem.add_development_dependency
|
25
|
-
gem.add_development_dependency
|
22
|
+
gem.add_development_dependency 'rake'
|
23
|
+
gem.add_development_dependency 'rspec'
|
24
|
+
gem.add_development_dependency 'gibberish', '~> 1.2.2'
|
25
|
+
gem.add_development_dependency 'encrypted_strings', '~> 0.3'
|
26
|
+
gem.add_development_dependency 'coveralls'
|
26
27
|
end
|
@@ -14,7 +14,7 @@ describe Mongoid::Validations::UniquenessValidator do
|
|
14
14
|
describe "#valid?" do
|
15
15
|
|
16
16
|
let(:person) do
|
17
|
-
Person.new(name: "bill", ssn: "abc456789")
|
17
|
+
Person.new(name: "bill", ssn: "abc456789", credit_card: "12345678", phone_number: "12345678")
|
18
18
|
end
|
19
19
|
|
20
20
|
after do
|
@@ -54,8 +54,13 @@ describe Mongoid::Validations::UniquenessValidator do
|
|
54
54
|
|
55
55
|
context "when the validation is case-sensitive" do
|
56
56
|
|
57
|
+
before do
|
58
|
+
Person.validates_uniqueness_of :ssn
|
59
|
+
Person.create!(ssn: "abc456789")
|
60
|
+
end
|
61
|
+
|
57
62
|
it "behaves as case-sensitive" do
|
58
|
-
expect(person).
|
63
|
+
expect(person).not_to be_valid
|
59
64
|
end
|
60
65
|
end
|
61
66
|
|
@@ -95,5 +100,52 @@ describe Mongoid::Validations::UniquenessValidator do
|
|
95
100
|
end
|
96
101
|
end
|
97
102
|
end
|
103
|
+
|
104
|
+
context "when the field name is aliased" do
|
105
|
+
|
106
|
+
context "when the aliased name is used" do
|
107
|
+
|
108
|
+
context "when the field is encrypted" do
|
109
|
+
|
110
|
+
it "throws an exception" do
|
111
|
+
expect { Person.validates_uniqueness_of :credit_card, case_sensitive: false }.to raise_error 'Encrypted field :credit_card cannot support case insensitive uniqueness'
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context "when the field is not encrypted" do
|
116
|
+
|
117
|
+
before do
|
118
|
+
Person.validates_uniqueness_of :phone_number, case_sensitive: false
|
119
|
+
Person.create!(phone_number: "12345678")
|
120
|
+
end
|
121
|
+
|
122
|
+
it "correctly detects a uniqueness conflict" do
|
123
|
+
expect(person).to_not be_valid
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
context "when the underlying name is used" do
|
129
|
+
|
130
|
+
context "when the field is encrypted" do
|
131
|
+
|
132
|
+
it "throws an exception" do
|
133
|
+
expect { Person.validates_uniqueness_of :cc, case_sensitive: false }.to raise_error 'Encrypted field :cc cannot support case insensitive uniqueness'
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context "when the field is not encrypted" do
|
138
|
+
|
139
|
+
before do
|
140
|
+
Person.validates :ph, uniqueness: { case_sensitive: false }
|
141
|
+
Person.create!(phone_number: "12345678")
|
142
|
+
end
|
143
|
+
|
144
|
+
it "correctly detects a uniqueness conflict" do
|
145
|
+
expect(person).to_not be_valid
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
98
150
|
end
|
99
151
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,6 +3,9 @@ require 'bundler/setup'
|
|
3
3
|
require 'mongoid'
|
4
4
|
require 'rspec'
|
5
5
|
|
6
|
+
require 'coveralls'
|
7
|
+
Coveralls.wear!
|
8
|
+
|
6
9
|
require 'mongoid-encrypted-fields'
|
7
10
|
|
8
11
|
Dir["#{File.dirname(__FILE__)}/../examples/**/*.rb"].each {|f| require f}
|
@@ -11,9 +14,12 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
11
14
|
ENV['MONGOID_ENV'] ||= 'test'
|
12
15
|
Mongoid.load!("#{File.dirname(__FILE__)}/config/mongoid.yml")
|
13
16
|
|
14
|
-
Mongoid::EncryptedFields.logger.level = Logger::
|
17
|
+
Mongoid::EncryptedFields.logger.level = Logger::FATAL
|
15
18
|
|
16
19
|
RSpec.configure do |config|
|
20
|
+
Mongoid.logger = Mongoid::EncryptedFields.logger
|
21
|
+
Moped.logger = Mongoid::EncryptedFields.logger
|
22
|
+
|
17
23
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
18
24
|
config.run_all_when_everything_filtered = true
|
19
25
|
config.filter_run :focus
|
@@ -5,5 +5,7 @@ class Person
|
|
5
5
|
field :ssn, type: Mongoid::EncryptedString
|
6
6
|
field :birth_date, type: Mongoid::EncryptedDate
|
7
7
|
field :address, type: Mongoid::EncryptedHash
|
8
|
+
field :ph, as: :phone_number, type: String
|
9
|
+
field :cc, as: :credit_card, type: Mongoid::EncryptedString
|
8
10
|
|
9
11
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-encrypted-fields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
5
|
-
prerelease:
|
4
|
+
version: 1.2.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Koan Health
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: mongoid
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ! '>='
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ! '>='
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: gibberish
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: encrypted_strings
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,11 +76,24 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ~>
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0.3'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: coveralls
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
94
97
|
description: A library for storing encrypted data in Mongo
|
95
98
|
email:
|
96
99
|
- development@koanhealth.com
|
@@ -98,11 +101,11 @@ executables: []
|
|
98
101
|
extensions: []
|
99
102
|
extra_rdoc_files: []
|
100
103
|
files:
|
104
|
+
- .coveralls.yml
|
101
105
|
- .gitignore
|
102
|
-
- .rspec
|
103
106
|
- .ruby-gemset
|
104
107
|
- .ruby-version
|
105
|
-
- .
|
108
|
+
- .travis.yml
|
106
109
|
- CHANGLOG.md
|
107
110
|
- Gemfile
|
108
111
|
- LICENSE.txt
|
@@ -135,33 +138,26 @@ files:
|
|
135
138
|
- spec/support/models/person.rb
|
136
139
|
homepage: https://github.com/KoanHealth/mongoid-encrypted-fields
|
137
140
|
licenses: []
|
141
|
+
metadata: {}
|
138
142
|
post_install_message:
|
139
143
|
rdoc_options: []
|
140
144
|
require_paths:
|
141
145
|
- lib
|
142
146
|
required_ruby_version: !ruby/object:Gem::Requirement
|
143
|
-
none: false
|
144
147
|
requirements:
|
145
148
|
- - ! '>='
|
146
149
|
- !ruby/object:Gem::Version
|
147
150
|
version: '0'
|
148
|
-
segments:
|
149
|
-
- 0
|
150
|
-
hash: 3728144320335115622
|
151
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
|
-
none: false
|
153
152
|
requirements:
|
154
153
|
- - ! '>='
|
155
154
|
- !ruby/object:Gem::Version
|
156
155
|
version: '0'
|
157
|
-
segments:
|
158
|
-
- 0
|
159
|
-
hash: 3728144320335115622
|
160
156
|
requirements: []
|
161
157
|
rubyforge_project:
|
162
|
-
rubygems_version:
|
158
|
+
rubygems_version: 2.0.6
|
163
159
|
signing_key:
|
164
|
-
specification_version:
|
160
|
+
specification_version: 4
|
165
161
|
summary: Custom types for storing encrypted data
|
166
162
|
test_files:
|
167
163
|
- spec/config/mongoid.yml
|
data/.rspec
DELETED
data/.rvmrc
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
rvm use 1.9.3@mongoid-encrypted-fields --create
|