mongoid-encrypted_string 0.0.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,25 @@
1
+ # Because this is a gem, ignore Gemfile.lock:
2
+
3
+ Gemfile.lock
4
+
5
+ # And because this is Ruby, ignore the following
6
+ # (source: https://github.com/github/gitignore/blob/master/Ruby.gitignore):
7
+
8
+ *.gem
9
+ *.rbc
10
+ .bundle
11
+ .config
12
+ coverage
13
+ InstalledFiles
14
+ lib/bundler/man
15
+ pkg
16
+ rdoc
17
+ spec/reports
18
+ test/tmp
19
+ test/version_tmp
20
+ tmp
21
+
22
+ # YARD artifacts
23
+ .yardoc
24
+ _yardoc
25
+ doc/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source :rubygems
2
+
3
+ gemspec
4
+
5
+ gem 'minitest'
6
+ gem 'rake'
@@ -0,0 +1,7 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.test_files = FileList['spec/**/*_spec.rb']
5
+ end
6
+
7
+ task default: :test
@@ -0,0 +1,34 @@
1
+ require 'active_support/all'
2
+ require 'gibberish'
3
+ require 'mongoid'
4
+
5
+ module Mongoid
6
+ class EncryptedString < String
7
+ def mongoize
8
+ self.class.mongoize(self)
9
+ end
10
+
11
+ class << self
12
+ attr_accessor :key
13
+
14
+ def mongoize(string)
15
+ aes.encrypt(string)
16
+ end
17
+
18
+ def demongoize(string)
19
+ return if string.nil?
20
+
21
+ new(aes.decrypt(string))
22
+ end
23
+
24
+ def config
25
+ self
26
+ end
27
+
28
+ private
29
+ def aes
30
+ @aes ||= Gibberish::AES.new(key || raise(StandardError, "Mongoid::EncryptedString.config.key is not set"))
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,3 @@
1
+ require 'mongoid/encrypted_string'
2
+
3
+ EncryptedString = Mongoid::EncryptedString
@@ -0,0 +1,5 @@
1
+ module Mongoid
2
+ class EncryptedString < String
3
+ VERSION = '0.0.1'
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ $: << File.expand_path('../lib', __FILE__)
2
+ require 'mongoid/encrypted_string/version'
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.name = 'mongoid-encrypted_string'
6
+ gem.version = Mongoid::EncryptedString::VERSION
7
+ gem.authors = 'Mario Uher'
8
+ gem.email = 'uher.mario@gmail.com'
9
+ gem.homepage = 'https://github.com/haihappen/mongoid-encrypted_string'
10
+ gem.summary = 'Encrypted string type for Mongoid.'
11
+ gem.description = 'Mongoid::EncryptedString defines an encrypted string type for your Mongoid apps.'
12
+
13
+ gem.files = `git ls-files`.split("\n")
14
+ gem.require_path = 'lib'
15
+
16
+ gem.add_dependency 'gibberish'
17
+ gem.add_dependency 'mongoid'
18
+ end
@@ -0,0 +1,55 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe Mongoid::EncryptedString do
4
+ let(:string) { 'foo' }
5
+ subject { Mongoid::EncryptedString.new(string) }
6
+
7
+
8
+ describe 'not setting a key' do
9
+ it 'raises an error' do
10
+ key = Mongoid::EncryptedString.config.key
11
+ Mongoid::EncryptedString.config.key = nil
12
+ Mongoid::EncryptedString.instance_variable_set :@aes, nil
13
+
14
+ ->{
15
+ subject.mongoize
16
+ }.must_raise StandardError
17
+
18
+ Mongoid::EncryptedString.config.key = key
19
+ end
20
+ end
21
+
22
+
23
+ describe :mongoize do
24
+ let(:value) { subject.mongoize }
25
+
26
+
27
+ it 'returns database friendly value' do
28
+ value.must_be_kind_of String
29
+ value.wont_equal string
30
+ (value.length > string.length).must_equal true
31
+ end
32
+ end
33
+
34
+
35
+ describe 'self.mongoize' do
36
+ let(:value) { Mongoid::EncryptedString.mongoize(subject) }
37
+
38
+
39
+ it 'returns database friendly value' do
40
+ value.must_be_kind_of String
41
+ value.wont_equal string
42
+ end
43
+ end
44
+
45
+
46
+ describe 'self.demongoize' do
47
+ let(:value) { Mongoid::EncryptedString.demongoize(Mongoid::EncryptedString.mongoize(string)) }
48
+
49
+
50
+ it 'returns a EncryptedString object' do
51
+ value.must_be_kind_of Mongoid::EncryptedString
52
+ value.must_equal string
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe Mongoid::EncryptedString do
4
+ before { require 'mongoid/encrypted_string/global' }
5
+
6
+
7
+ it 'is available as ::EncryptedString too' do
8
+ ::EncryptedString.must_be_same_as Mongoid::EncryptedString
9
+ end
10
+ end
@@ -0,0 +1,45 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe 'Mongoid::EncryptedString integration' do
4
+ let(:string) { 'foo' }
5
+
6
+
7
+ describe 'create document without any attributes' do
8
+ subject { Document.create }
9
+
10
+
11
+ it 'sets encrypted string to nil' do
12
+ subject.string.must_be_nil
13
+ end
14
+
15
+
16
+ describe "when default is set to 'foo' }" do
17
+ subject { DocumentWithImplicitDefault.create }
18
+
19
+
20
+ it 'sets encrypted string to foo' do
21
+ subject.string.must_equal string
22
+ end
23
+ end
24
+
25
+
26
+ describe "when default is set to ->{ EncryptedString.new('foo') }" do
27
+ subject { DocumentWithExplicitDefault.create }
28
+
29
+
30
+ it 'sets encrypted string to foo' do
31
+ subject.string.must_equal string
32
+ end
33
+ end
34
+ end
35
+
36
+
37
+ describe 'create document with attribute' do
38
+ subject { Document.create(string: string) }
39
+
40
+
41
+ it 'sets encrypted string to foo' do
42
+ subject.string.must_equal string
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,10 @@
1
+ $: << File.expand_path('../../lib', __FILE__)
2
+
3
+ require 'minitest/autorun'
4
+ require 'minitest/pride'
5
+ require 'minitest/spec'
6
+
7
+ require 'mongoid/encrypted_string'
8
+
9
+ # Load support *.rb files in ./support
10
+ Dir[File.expand_path('../support/*.rb', __FILE__)].each { |file| require_relative file }
@@ -0,0 +1 @@
1
+ Mongoid::EncryptedString.config.key = 'some super secure key'
@@ -0,0 +1 @@
1
+ Mongoid.load!(File.expand_path('../mongoid.yml', __FILE__), 'test')
@@ -0,0 +1,17 @@
1
+ class Document
2
+ include Mongoid::Document
3
+
4
+ field :string, type: Mongoid::EncryptedString
5
+ end
6
+
7
+ class DocumentWithImplicitDefault
8
+ include Mongoid::Document
9
+
10
+ field :string, type: Mongoid::EncryptedString, default: 'foo'
11
+ end
12
+
13
+ class DocumentWithExplicitDefault
14
+ include Mongoid::Document
15
+
16
+ field :string, type: Mongoid::EncryptedString, default: ->{ Mongoid::EncryptedString.new('foo') }
17
+ end
@@ -0,0 +1,8 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ database: mongoid_encrypted_string_test
5
+ hosts:
6
+ - localhost:27017
7
+ options:
8
+ consistency: :strong
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mongoid-encrypted_string
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Mario Uher
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ none: false
21
+ name: gibberish
22
+ type: :runtime
23
+ prerelease: false
24
+ requirement: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ! '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ none: false
30
+ - !ruby/object:Gem::Dependency
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ none: false
37
+ name: mongoid
38
+ type: :runtime
39
+ prerelease: false
40
+ requirement: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ none: false
46
+ description: Mongoid::EncryptedString defines an encrypted string type for your Mongoid
47
+ apps.
48
+ email: uher.mario@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - Rakefile
56
+ - lib/mongoid/encrypted_string.rb
57
+ - lib/mongoid/encrypted_string/global.rb
58
+ - lib/mongoid/encrypted_string/version.rb
59
+ - mongoid-encrypted_string.gemspec
60
+ - spec/encrypted_string_spec.rb
61
+ - spec/global_spec.rb
62
+ - spec/integration_spec.rb
63
+ - spec/spec_helper.rb
64
+ - spec/support/config.rb
65
+ - spec/support/connection.rb
66
+ - spec/support/document.rb
67
+ - spec/support/mongoid.yml
68
+ homepage: https://github.com/haihappen/mongoid-encrypted_string
69
+ licenses: []
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ none: false
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ none: false
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 1.8.23
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: Encrypted string type for Mongoid.
92
+ test_files: []