encrypt_attr 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7d7a8ac4f58ba91632d01b7380b19c5c5f16bfce
4
- data.tar.gz: f6b3c3b8d5ee257415283fd5865e6be0e215b328
3
+ metadata.gz: 64d1f65f2d3aaf72b3bf4e0fc66b43a2702f80d4
4
+ data.tar.gz: 6ee5571af9bf005cf5da3d9d780881dc965194e4
5
5
  SHA512:
6
- metadata.gz: 98ca694d0fafbfa8a42ccb317c1cf39109869a1e1c7f0c1c1ece4a6e0d1769a3cb92b92d3307e233ae34595f58bcafabe126bc5c9ead60ae05ad38af264415cb
7
- data.tar.gz: 4b26149a8078efce5c4b56b79413f1ebe077c7742244701a6de97b8021886f80edaacca7025965a9d8548ee5d9d9d9000de5cf98c1335f567f9d5a2f04280374
6
+ metadata.gz: 9b950542fee37e987304b88e58985bb00d26d4825fe223a5fe78926b59122f08ca6e4a16943b564badef324a9a2ae0c353a549a4d5e8bdb7785a95b3ae4af00b
7
+ data.tar.gz: 128849e268fd76b0cf6e4a43f02614851fb0084985abd67432a4a9e1bdccc8a4482770c8e1d250a39c4894c3a253245bde6fadc956690d31068ad11933ad424b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## v0.2.0
4
+
5
+ - Allow custom encryptor per attribute.
6
+
3
7
  ## v0.1.0
4
8
 
5
9
  - Initial release.
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Code Climate](https://codeclimate.com/github/fnando/encrypt_attr/badges/gpa.svg)](https://codeclimate.com/github/fnando/encrypt_attr)
5
5
  [![Test Coverage](https://codeclimate.com/github/fnando/encrypt_attr/badges/coverage.svg)](https://codeclimate.com/github/fnando/encrypt_attr)
6
6
 
7
- Encrypt attributes using AES-256-CBC (or your custom encryption algorithm). Works with and without ActiveRecord.
7
+ Encrypt attributes using AES-256-CBC (or your custom encryption strategy). Works with and without ActiveRecord.
8
8
 
9
9
  ## Installation
10
10
 
@@ -44,7 +44,7 @@ The `encrypt_attr` method has some aliases, so you can also use any of these:
44
44
  - `encrypted_attr`
45
45
  - `encrypted_attribute`
46
46
 
47
- This assumes that you have a `encrypted_api_key` attribute. By default, the value is encrypted using a global secret token. You can set a custom token by setting `EncryptAttr.secret_token`; you have that use 100 characters or more (e.g. `$ openssl rand -hex 50`).
47
+ This assumes that you have a `encrypted_api_key` attribute. By default, the value is encrypted using a global secret token. You can set a custom token by setting `EncryptAttr.secret_token`; you have to use 100 characters or more (e.g. `$ openssl rand -hex 50`).
48
48
 
49
49
  ```ruby
50
50
  EncryptAttr.secret_token = 'abc123'
@@ -56,7 +56,7 @@ You can also set the secret token per attribute basis.
56
56
  class User
57
57
  include EncryptAttr
58
58
  attr_accessor :encrypted_api_key
59
- encrypt_attr :api_key, secret: USER_SECRET_TOKEN
59
+ encrypt_attr :api_key, secret_token: USER_SECRET_TOKEN
60
60
  end
61
61
  ```
62
62
 
@@ -131,6 +131,16 @@ user.api_key = 'API_KEY'
131
131
  user.encrypted_api_key #=> 'YEK_IPA'
132
132
  ```
133
133
 
134
+ You can also specify a custom encryptor per attribute.
135
+
136
+ ```ruby
137
+ class User
138
+ include EncryptAttr
139
+ attr_accessor :encrypted_api_key
140
+ attr_encrypted :api_key, encryptor: ReverseEncryptor
141
+ end
142
+ ```
143
+
134
144
  ## Development
135
145
 
136
146
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
data/Rakefile CHANGED
@@ -1,11 +1,11 @@
1
1
  require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
 
4
- Rake::TestTask.new(:spec) do |t|
5
- t.libs << 'spec'
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
6
  t.libs << 'lib'
7
- t.test_files = FileList['spec/**/*_spec.rb']
7
+ t.test_files = FileList['test/**/*_test.rb']
8
8
  end
9
9
 
10
- task :default => :spec
10
+ task :default => :test
11
11
 
data/encrypt_attr.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |spec|
5
5
  spec.version = EncryptAttr::VERSION
6
6
  spec.authors = ['Nando Vieira']
7
7
  spec.email = ['fnando.vieira@gmail.com']
8
- spec.summary = 'Encrypt attributes using AES-256-CBC (or your custom encryption algorithm). Works with and without ActiveRecord.'
8
+ spec.summary = 'Encrypt attributes using AES-256-CBC (or your custom encryption strategy). Works with and without ActiveRecord.'
9
9
  spec.description = spec.summary
10
10
  spec.homepage = 'http://rubygems.org/gems/encrypt_attr'
11
11
  spec.license = 'MIT'
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.add_development_dependency 'bundler'
19
19
  spec.add_development_dependency 'rake'
20
20
  spec.add_development_dependency 'minitest'
21
- spec.add_development_dependency 'minitest-reporters'
21
+ spec.add_development_dependency 'minitest-utils'
22
22
  spec.add_development_dependency 'sqlite3'
23
23
  spec.add_development_dependency 'activerecord'
24
24
  spec.add_development_dependency 'pry-meta'
@@ -36,11 +36,11 @@ module EncryptAttr
36
36
  self.encryptor = Encryptor
37
37
 
38
38
  module ClassMethods
39
- def encrypt_attr(*args, secret_token: EncryptAttr.secret_token)
39
+ def encrypt_attr(*args, secret_token: EncryptAttr.secret_token, encryptor: EncryptAttr.encryptor)
40
40
  EncryptAttr.validate_secret_token(secret_token)
41
41
 
42
42
  args.each do |attribute|
43
- define_encrypted_attribute(attribute, secret_token)
43
+ define_encrypted_attribute(attribute, secret_token, encryptor)
44
44
  end
45
45
  end
46
46
  alias_method :attr_encrypt, :encrypt_attr
@@ -53,15 +53,18 @@ module EncryptAttr
53
53
 
54
54
  private
55
55
 
56
- def define_encrypted_attribute(attribute, secret_token)
56
+ def define_encrypted_attribute(attribute, secret_token, encryptor)
57
57
  define_method attribute do
58
- instance_variable_get("@#{attribute}")
58
+ value = instance_variable_get("@#{attribute}")
59
+ encrypted_value = send("encrypted_#{attribute}") unless value
60
+ value = encryptor.decrypt(secret_token, encrypted_value) if encrypted_value
61
+ instance_variable_set("@#{attribute}", value)
59
62
  end
60
63
 
61
64
  define_method "#{attribute}=" do |value|
62
65
  instance_variable_set("@#{attribute}", value)
63
66
  send("encrypted_#{attribute}=", nil)
64
- send("encrypted_#{attribute}=", EncryptAttr.encryptor.encrypt(secret_token, value)) if value
67
+ send("encrypted_#{attribute}=", encryptor.encrypt(secret_token, value)) if value
65
68
  end
66
69
  end
67
70
  end
@@ -1,3 +1,3 @@
1
1
  module EncryptAttr
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: encrypt_attr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-03-27 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,7 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest-reporters
56
+ name: minitest-utils
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -122,7 +122,7 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- description: Encrypt attributes using AES-256-CBC (or your custom encryption algorithm).
125
+ description: Encrypt attributes using AES-256-CBC (or your custom encryption strategy).
126
126
  Works with and without ActiveRecord.
127
127
  email:
128
128
  - fnando.vieira@gmail.com
@@ -164,9 +164,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  version: '0'
165
165
  requirements: []
166
166
  rubyforge_project:
167
- rubygems_version: 2.4.6
167
+ rubygems_version: 2.4.5.1
168
168
  signing_key:
169
169
  specification_version: 4
170
- summary: Encrypt attributes using AES-256-CBC (or your custom encryption algorithm).
170
+ summary: Encrypt attributes using AES-256-CBC (or your custom encryption strategy).
171
171
  Works with and without ActiveRecord.
172
172
  test_files: []