nygma 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acc48b911647b3e575f9d15bc388b76b4115064c
4
- data.tar.gz: cb9602eb62ff7b33bc1259725b206614ac67cc5f
3
+ metadata.gz: 2bf1c9281ff6a3733b9a06256a721bd7fe55abbc
4
+ data.tar.gz: 1a9b75337c2f6edc711baf911cfbeb1c6562a0e9
5
5
  SHA512:
6
- metadata.gz: 9d70af21e6c4f5ceab6c2d170dc411239f2fe2d3ddda89ac19477be8d396e42ab7b206fce6e99a43c8d6175afff1c9b7bcbc8548a51420f34b7bdd073c13ff3c
7
- data.tar.gz: 1c9669eb3315bb23a35e2ffd6158a7b91e661586799acf35d4953e7fae36ad46b920198348f09045710b5d975248525423ee850fbfe6c314d4eb92ceb61d98cf
6
+ metadata.gz: 99ad951ab5386e8f0aa53c53f91c67bdc9961162d730f9f6129d1626c18cfe583c4b29e16a47537bdea7c64bcf08564b5534206947d510e09b1fb0b6f5a48506
7
+ data.tar.gz: 28ba8583f924066710ec0b89da00e0c7498f22a39d58dfceb223a52cbdf5922aa91fc32d6f452b8df85d3e69d24fd47eab4d54d6809f97956cbfc0fc17650be0
data/README.md CHANGED
@@ -2,15 +2,42 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/bsodmike/Nygma.svg?branch=master)](https://travis-ci.org/bsodmike/Nygma)
4
4
 
5
- Gotham's very own Mr. Nygma, a Rails 4 Encryptor
5
+ Gotham's very own Mr. Nygma, a Rails 4.2 attribute Encryptor
6
6
 
7
7
  ## Compatibility
8
8
 
9
- * Supports Ruby 1.9.3 and 2.
10
- * Travis CI for Ruby 1.9.3, 2.0.0, 2.1.0, and 2.1.5
9
+ * Requires Ruby 2
10
+ * Travis CI for 2.0.0, 2.1.0, and 2.2.2
11
11
 
12
12
  ## Usage
13
13
 
14
+ Add Nygma to your Gemfile and an initialiser to your Rails app, generating the
15
+ key and salt with `SecureRandom.hex(40)` and `SecureRandom.random_bytes(64)`.
16
+
17
+ ```ruby
18
+ # config/initializers/nygma.rb
19
+
20
+ Rails.application.config.encryptor = Nygma::Encryptor.crypt!(
21
+ 'f46c1fb228aac44e55f82293a2341fb47c6f12c3721382ae7dbfe2e912941f59191efbc711f1ea5e',
22
+ '[d\x89\r\xF6\xEB7\x9C\n\x1F+\xCAG\xF1g\e\x9Bg\xA7-:iG\b4\x03\xED\xCE\x8F>OH\b\x80\x8F\xE3\x17j\x1D\xA6\b?3\xC4\xE4\x8D\x9Eb\xA5\xB0\xB6jS\xAD\v\xE4\xBB\xDB\xF7\xFC\xBC\x04\xFD\xE4'
23
+ )
24
+ ```
25
+
26
+ You will now be able to specify attributes within your models that need
27
+ attribute level encryption,
28
+
29
+ ```ruby
30
+ class POTUSNuclearCode < ActiveRecord::Base
31
+ encrypt :launch_code, :auth_token
32
+ end
33
+ ```
34
+
35
+ The world is now safe as the Chinese won't be able to grab US nuclear launch
36
+ codes from Hillary's email account! They'll be nicely encrypted and
37
+ persisted to disk.
38
+
39
+ ### How it works
40
+
14
41
  ```ruby
15
42
  crypt = Nygma::Encryptor.crypt!(
16
43
  Nygma::Configuration.secure_key,
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env rake
1
2
  begin
2
3
  require 'bundler/setup'
3
4
  rescue LoadError
@@ -14,8 +15,18 @@ RDoc::Task.new(:rdoc) do |rdoc|
14
15
  rdoc.rdoc_files.include('lib/**/*.rb')
15
16
  end
16
17
 
18
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
19
+ load 'rails/tasks/engine.rake'
17
20
 
21
+ Bundler::GemHelper.install_tasks
18
22
 
23
+ require 'rspec/core'
24
+ require 'rspec/core/rake_task'
19
25
 
20
- Bundler::GemHelper.install_tasks
26
+ desc "Run all specs in spec directory (excluding plugin specs)"
27
+ RSpec::Core::RakeTask.new(:spec) do |spec|
28
+ spec.pattern = 'spec/**/*_spec.rb'
29
+ # spec.rspec_opts = ['-cfs --backtrace']
30
+ end
21
31
 
32
+ task :default => :spec
@@ -0,0 +1,8 @@
1
+ class CreateEncryptableTestModels < ActiveRecord::Migration
2
+ def change
3
+ create_table :encryptable_test_models do |t|
4
+ t.string :token
5
+ t.string :reference
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,56 @@
1
+ module Nygma
2
+
3
+ module Encryptable
4
+
5
+ class << self
6
+ def included _klass
7
+ _klass.class_eval do
8
+ include InstanceMethods
9
+ extend ClassMethods
10
+ end
11
+ end
12
+ end
13
+
14
+ module InstanceMethods
15
+
16
+ protected
17
+ def encryptor
18
+ Rails.application.config.encryptor
19
+ end
20
+
21
+ end
22
+
23
+ module ClassMethods
24
+
25
+ def encrypt(*args)
26
+ args.each do |attribute|
27
+ unless has_column?(attribute)
28
+ Rails.logger.tagged('Nygma::Encryptable::encrypt') {
29
+ Rails.logger.info "Unable to encrypt missing attribute #{attribute} in #{self.name}, check your migrations!"
30
+ }
31
+ else
32
+ attr = "#{attribute}"
33
+
34
+ define_method("#{attr}") do
35
+ encryptor.decrypt(self[attribute]) if self[attribute]
36
+ end
37
+
38
+ define_method("#{attr}=") do |val|
39
+ encrypted_payload = encryptor.encrypt(val)
40
+ self[attribute] = encrypted_payload if encrypted_payload
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ private
47
+ def has_column?(attribute)
48
+ return true if self.column_names.include?(attribute.to_s)
49
+
50
+ false
51
+ end
52
+
53
+ end
54
+ end
55
+
56
+ end
data/lib/nygma/engine.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  module Nygma
2
2
  class Engine < ::Rails::Engine
3
3
  isolate_namespace Nygma
4
+
5
+ config.before_initialize do
6
+ ::ActiveRecord::Base.send(:include, Encryptable)
7
+ end
4
8
  end
5
9
  end
data/lib/nygma/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nygma
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/nygma.rb CHANGED
@@ -3,5 +3,7 @@ require 'nygma/engine'
3
3
  require 'nygma/configuration'
4
4
 
5
5
  module Nygma
6
+ require 'nygma/encryptable'
7
+
6
8
  autoload :Encryptor, 'nygma/encryptor'
7
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nygma
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael de Silva
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-09 00:00:00.000000000 Z
11
+ date: 2015-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 4.1.8
19
+ version: 4.2.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.1.8
26
+ version: 4.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: attr_extras
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: guard-rspec
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +150,20 @@ dependencies:
122
150
  - - ">="
123
151
  - !ruby/object:Gem::Version
124
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: database_cleaner
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
125
167
  - !ruby/object:Gem::Dependency
126
168
  name: fuubar
127
169
  requirement: !ruby/object:Gem::Requirement
@@ -146,8 +188,10 @@ files:
146
188
  - MIT-LICENSE
147
189
  - README.md
148
190
  - Rakefile
191
+ - db/migrate/20150630040253_create_encryptable_test_models.rb
149
192
  - lib/nygma.rb
150
193
  - lib/nygma/configuration.rb
194
+ - lib/nygma/encryptable.rb
151
195
  - lib/nygma/encryptor.rb
152
196
  - lib/nygma/engine.rb
153
197
  - lib/nygma/version.rb
@@ -162,9 +206,9 @@ require_paths:
162
206
  - lib
163
207
  required_ruby_version: !ruby/object:Gem::Requirement
164
208
  requirements:
165
- - - ">="
209
+ - - "~>"
166
210
  - !ruby/object:Gem::Version
167
- version: 1.9.3
211
+ version: 2.2.0
168
212
  required_rubygems_version: !ruby/object:Gem::Requirement
169
213
  requirements:
170
214
  - - ">="
@@ -172,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
216
  version: '0'
173
217
  requirements: []
174
218
  rubyforge_project:
175
- rubygems_version: 2.2.2
219
+ rubygems_version: 2.4.5
176
220
  signing_key:
177
221
  specification_version: 4
178
222
  summary: Gotham's very own Mr. Nygma, a Rails 4 Encryptor