attr_encrypted 1.3.4 → 1.4.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8be516fee846217b6cc95a706bc87bbc267f7d71
4
+ data.tar.gz: f72d166a492c0efc4a7fd2a84b863fb3b4ea8d5a
5
+ SHA512:
6
+ metadata.gz: ed046ac7c9e40406f871e00e3e95821002605b62022d556b8ac5dcc5a7ce9f06e38925b6a1849e1dfb3ee7a4666ce2a2e15e1130f20f53eb246017fcb362dbd3
7
+ data.tar.gz: c27e6b6c8b4644a8daf02c4fc50f607878dac6a3a86e71181e28f3a78c71da5b7abed88094b61ac6fa9a558a08934d572b5a7169830c93592deabfd79c285512
data/README.rdoc CHANGED
@@ -1,4 +1,4 @@
1
- = attr_encrypted {<img src="https://travis-ci.org/attr-encrypted/attr_encrypted.png" />}[https://travis-ci.org/attr-encrypted/attr_encrypted] {<img src="https://codeclimate.com/github/attr-encrypted/attr_encrypted/badges/gpa.svg" />}[https://codeclimate.com/github/attr-encrypted/attr_encrypted]{<img src="https://codeclimate.com/github/attr-encrypted/attr_encrypted/badges/gpa.svg" />}[https://codeclimate.com/github/attr-encrypted/attr_encrypted]
1
+ = attr_encrypted {<img src="https://travis-ci.org/attr-encrypted/attr_encrypted.png" />}[https://travis-ci.org/attr-encrypted/attr_encrypted]
2
2
 
3
3
  Generates attr_accessors that encrypt and decrypt attributes transparently
4
4
 
@@ -16,6 +16,7 @@ if defined?(ActiveRecord::Base)
16
16
  alias_method_chain :reload, :attr_encrypted
17
17
 
18
18
  attr_encrypted_options[:encode] = true
19
+
19
20
  class << self
20
21
  alias_method :attr_encryptor, :attr_encrypted
21
22
  alias_method_chain :method_missing, :attr_encrypted
@@ -49,14 +50,30 @@ if defined?(ActiveRecord::Base)
49
50
  # <tt>attr_encrypted</tt> method
50
51
  def attr_encrypted(*attrs)
51
52
  super
52
- attrs.reject { |attr| attr.is_a?(Hash) }.each { |attr| alias_method "#{attr}_before_type_cast", attr }
53
+ options = attrs.extract_options!
54
+ attr = attrs.pop
55
+ options.merge! encrypted_attributes[attr]
56
+
57
+ define_method("#{attr}_changed?") do
58
+ send(attr) != decrypt(attr, send("#{options[:attribute]}_was"))
59
+ end
60
+
61
+ define_method("#{attr}_was") do
62
+ decrypt(attr, send("#{options[:attribute]}_was")) if send("#{attr}_changed?")
63
+ end
64
+
65
+ alias_method "#{attr}_before_type_cast", attr
53
66
  end
54
67
 
55
68
  def attribute_instance_methods_as_symbols
56
69
  # We add accessor methods of the db columns to the list of instance
57
70
  # methods returned to let ActiveRecord define the accessor methods
58
71
  # for the db columns
59
- if table_exists?
72
+
73
+ # Use with_connection so the connection doesn't stay pinned to the thread.
74
+ connected = ::ActiveRecord::Base.connection_pool.with_connection(&:active?) rescue false
75
+
76
+ if connected && table_exists?
60
77
  columns_hash.keys.inject(super) {|instance_methods, column_name| instance_methods.concat [column_name.to_sym, :"#{column_name}="]}
61
78
  else
62
79
  super
@@ -2,8 +2,8 @@ module AttrEncrypted
2
2
  # Contains information about this gem's version
3
3
  module Version
4
4
  MAJOR = 1
5
- MINOR = 3
6
- PATCH = 4
5
+ MINOR = 4
6
+ PATCH = 0
7
7
 
8
8
  # Returns a version string by joining <tt>MAJOR</tt>, <tt>MINOR</tt>, and <tt>PATCH</tt> with <tt>'.'</tt>
9
9
  #
@@ -164,6 +164,21 @@ class ActiveRecordTest < Minitest::Test
164
164
  assert_equal account.key, hash
165
165
  end
166
166
 
167
+ def test_should_create_changed_predicate
168
+ person = Person.create!(:email => 'test@example.com')
169
+ assert !person.email_changed?
170
+ person.email = 'test2@example.com'
171
+ assert person.email_changed?
172
+ end
173
+
174
+ def test_should_create_was_predicate
175
+ original_email = 'test@example.com'
176
+ person = Person.create!(:email => original_email)
177
+ assert !person.email_was
178
+ person.email = 'test2@example.com'
179
+ assert_equal person.email_was, original_email
180
+ end
181
+
167
182
  if ::ActiveRecord::VERSION::STRING > "4.0"
168
183
  def test_should_assign_attributes
169
184
  @user = UserWithProtectedAttribute.new :login => 'login', :is_admin => false
data/test/test_helper.rb CHANGED
@@ -12,10 +12,6 @@ if RUBY_VERSION >= '1.9.3'
12
12
  end
13
13
  end
14
14
 
15
- require 'minitest'
16
- require "codeclimate-test-reporter"
17
- CodeClimate::TestReporter.start
18
-
19
15
  require 'minitest/autorun'
20
16
  require 'digest/sha2'
21
17
  require 'rubygems'
@@ -31,6 +27,8 @@ require 'attr_encrypted'
31
27
 
32
28
  puts "\nTesting with ActiveRecord #{ActiveRecord::VERSION::STRING rescue ENV['ACTIVE_RECORD_VERSION']}"
33
29
 
30
+ Minitest::Test = Minitest::Unit::TestCase if ActiveRecord::VERSION::STRING >= '4.0.0'
31
+
34
32
  DB = Sequel.sqlite
35
33
 
36
34
  # The :after_initialize hook was removed in Sequel 4.0
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attr_encrypted
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
5
- prerelease:
4
+ version: 1.4.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sean Huber
@@ -12,140 +11,137 @@ authors:
12
11
  autorequire:
13
12
  bindir: bin
14
13
  cert_chain: []
15
- date: 2015-05-11 00:00:00.000000000 Z
14
+ date: 2016-02-23 00:00:00.000000000 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: encryptor
19
18
  requirement: !ruby/object:Gem::Requirement
20
- none: false
21
19
  requirements:
22
- - - ! '>='
20
+ - - "~>"
23
21
  - !ruby/object:Gem::Version
24
22
  version: 1.3.0
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
- - - ! '>='
27
+ - - "~>"
31
28
  - !ruby/object:Gem::Version
32
29
  version: 1.3.0
33
30
  - !ruby/object:Gem::Dependency
34
31
  name: activerecord
35
32
  requirement: !ruby/object:Gem::Requirement
36
- none: false
37
33
  requirements:
38
- - - ! '>='
34
+ - - ">="
39
35
  - !ruby/object:Gem::Version
40
36
  version: 2.0.0
41
37
  type: :development
42
38
  prerelease: false
43
39
  version_requirements: !ruby/object:Gem::Requirement
44
- none: false
45
40
  requirements:
46
- - - ! '>='
41
+ - - ">="
47
42
  - !ruby/object:Gem::Version
48
43
  version: 2.0.0
49
44
  - !ruby/object:Gem::Dependency
50
45
  name: minitest
51
46
  requirement: !ruby/object:Gem::Requirement
52
- none: false
53
47
  requirements:
54
- - - ! '>='
48
+ - - ">="
55
49
  - !ruby/object:Gem::Version
56
50
  version: '0'
57
51
  type: :development
58
52
  prerelease: false
59
53
  version_requirements: !ruby/object:Gem::Requirement
60
- none: false
61
54
  requirements:
62
- - - ! '>='
55
+ - - ">="
63
56
  - !ruby/object:Gem::Version
64
57
  version: '0'
65
58
  - !ruby/object:Gem::Dependency
66
59
  name: datamapper
67
60
  requirement: !ruby/object:Gem::Requirement
68
- none: false
69
61
  requirements:
70
- - - ! '>='
62
+ - - ">="
71
63
  - !ruby/object:Gem::Version
72
64
  version: '0'
73
65
  type: :development
74
66
  prerelease: false
75
67
  version_requirements: !ruby/object:Gem::Requirement
76
- none: false
77
68
  requirements:
78
- - - ! '>='
69
+ - - ">="
79
70
  - !ruby/object:Gem::Version
80
71
  version: '0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: addressable
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - '='
77
+ - !ruby/object:Gem::Version
78
+ version: 2.3.7
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - '='
84
+ - !ruby/object:Gem::Version
85
+ version: 2.3.7
81
86
  - !ruby/object:Gem::Dependency
82
87
  name: mocha
83
88
  requirement: !ruby/object:Gem::Requirement
84
- none: false
85
89
  requirements:
86
- - - ~>
90
+ - - "~>"
87
91
  - !ruby/object:Gem::Version
88
92
  version: 1.0.0
89
93
  type: :development
90
94
  prerelease: false
91
95
  version_requirements: !ruby/object:Gem::Requirement
92
- none: false
93
96
  requirements:
94
- - - ~>
97
+ - - "~>"
95
98
  - !ruby/object:Gem::Version
96
99
  version: 1.0.0
97
100
  - !ruby/object:Gem::Dependency
98
101
  name: sequel
99
102
  requirement: !ruby/object:Gem::Requirement
100
- none: false
101
103
  requirements:
102
- - - ! '>='
104
+ - - ">="
103
105
  - !ruby/object:Gem::Version
104
106
  version: '0'
105
107
  type: :development
106
108
  prerelease: false
107
109
  version_requirements: !ruby/object:Gem::Requirement
108
- none: false
109
110
  requirements:
110
- - - ! '>='
111
+ - - ">="
111
112
  - !ruby/object:Gem::Version
112
113
  version: '0'
113
114
  - !ruby/object:Gem::Dependency
114
115
  name: sqlite3
115
116
  requirement: !ruby/object:Gem::Requirement
116
- none: false
117
117
  requirements:
118
- - - ! '>='
118
+ - - ">="
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
- none: false
125
124
  requirements:
126
- - - ! '>='
125
+ - - ">="
127
126
  - !ruby/object:Gem::Version
128
127
  version: '0'
129
128
  - !ruby/object:Gem::Dependency
130
129
  name: dm-sqlite-adapter
131
130
  requirement: !ruby/object:Gem::Requirement
132
- none: false
133
131
  requirements:
134
- - - ! '>='
132
+ - - ">="
135
133
  - !ruby/object:Gem::Version
136
134
  version: '0'
137
135
  type: :development
138
136
  prerelease: false
139
137
  version_requirements: !ruby/object:Gem::Requirement
140
- none: false
141
138
  requirements:
142
- - - ! '>='
139
+ - - ">="
143
140
  - !ruby/object:Gem::Version
144
141
  version: '0'
145
142
  - !ruby/object:Gem::Dependency
146
143
  name: rake
147
144
  requirement: !ruby/object:Gem::Requirement
148
- none: false
149
145
  requirements:
150
146
  - - '='
151
147
  - !ruby/object:Gem::Version
@@ -153,7 +149,6 @@ dependencies:
153
149
  type: :development
154
150
  prerelease: false
155
151
  version_requirements: !ruby/object:Gem::Requirement
156
- none: false
157
152
  requirements:
158
153
  - - '='
159
154
  - !ruby/object:Gem::Version
@@ -161,33 +156,29 @@ dependencies:
161
156
  - !ruby/object:Gem::Dependency
162
157
  name: simplecov
163
158
  requirement: !ruby/object:Gem::Requirement
164
- none: false
165
159
  requirements:
166
- - - ! '>='
160
+ - - ">="
167
161
  - !ruby/object:Gem::Version
168
162
  version: '0'
169
163
  type: :development
170
164
  prerelease: false
171
165
  version_requirements: !ruby/object:Gem::Requirement
172
- none: false
173
166
  requirements:
174
- - - ! '>='
167
+ - - ">="
175
168
  - !ruby/object:Gem::Version
176
169
  version: '0'
177
170
  - !ruby/object:Gem::Dependency
178
171
  name: simplecov-rcov
179
172
  requirement: !ruby/object:Gem::Requirement
180
- none: false
181
173
  requirements:
182
- - - ! '>='
174
+ - - ">="
183
175
  - !ruby/object:Gem::Version
184
176
  version: '0'
185
177
  type: :development
186
178
  prerelease: false
187
179
  version_requirements: !ruby/object:Gem::Requirement
188
- none: false
189
180
  requirements:
190
- - - ! '>='
181
+ - - ">="
191
182
  - !ruby/object:Gem::Version
192
183
  version: '0'
193
184
  description: Generates attr_accessors that encrypt and decrypt attributes transparently
@@ -200,14 +191,14 @@ executables: []
200
191
  extensions: []
201
192
  extra_rdoc_files: []
202
193
  files:
194
+ - MIT-LICENSE
195
+ - README.rdoc
196
+ - Rakefile
197
+ - lib/attr_encrypted.rb
203
198
  - lib/attr_encrypted/adapters/active_record.rb
204
199
  - lib/attr_encrypted/adapters/data_mapper.rb
205
200
  - lib/attr_encrypted/adapters/sequel.rb
206
201
  - lib/attr_encrypted/version.rb
207
- - lib/attr_encrypted.rb
208
- - MIT-LICENSE
209
- - Rakefile
210
- - README.rdoc
211
202
  - test/active_record_test.rb
212
203
  - test/attr_encrypted_test.rb
213
204
  - test/compatibility_test.rb
@@ -222,37 +213,30 @@ files:
222
213
  - test/test_helper.rb
223
214
  homepage: http://github.com/attr-encrypted/attr_encrypted
224
215
  licenses: []
216
+ metadata: {}
225
217
  post_install_message:
226
218
  rdoc_options:
227
- - --line-numbers
228
- - --inline-source
229
- - --main
219
+ - "--line-numbers"
220
+ - "--inline-source"
221
+ - "--main"
230
222
  - README.rdoc
231
223
  require_paths:
232
224
  - lib
233
225
  required_ruby_version: !ruby/object:Gem::Requirement
234
- none: false
235
226
  requirements:
236
- - - ! '>='
227
+ - - ">="
237
228
  - !ruby/object:Gem::Version
238
229
  version: '0'
239
- segments:
240
- - 0
241
- hash: -1997953751590493696
242
230
  required_rubygems_version: !ruby/object:Gem::Requirement
243
- none: false
244
231
  requirements:
245
- - - ! '>='
232
+ - - ">="
246
233
  - !ruby/object:Gem::Version
247
234
  version: '0'
248
- segments:
249
- - 0
250
- hash: -1997953751590493696
251
235
  requirements: []
252
236
  rubyforge_project:
253
- rubygems_version: 1.8.23.2
237
+ rubygems_version: 2.4.5.1
254
238
  signing_key:
255
- specification_version: 3
239
+ specification_version: 4
256
240
  summary: Encrypt and decrypt attributes
257
241
  test_files:
258
242
  - test/active_record_test.rb
@@ -267,3 +251,4 @@ test_files:
267
251
  - test/run.sh
268
252
  - test/sequel_test.rb
269
253
  - test/test_helper.rb
254
+ has_rdoc: false