mongoid_ext 0.6.1 → 0.6.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.
- data/Gemfile +1 -0
- data/VERSION +1 -1
- data/lib/mongoid_ext.rb +1 -0
- data/lib/mongoid_ext/encryptor.rb +33 -0
- data/lib/mongoid_ext/file.rb +5 -1
- data/lib/mongoid_ext/versioning.rb +28 -5
- data/mongoid_ext.gemspec +7 -2
- data/test/models.rb +9 -0
- data/test/test_encryptor.rb +31 -0
- data/test/test_versioning.rb +3 -3
- data/test/types/test_open_struct.rb +1 -1
- data/test/types/test_set.rb +6 -1
- metadata +36 -19
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.2
|
data/lib/mongoid_ext.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
module MongoidExt
|
2
|
+
module Encryptor
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
require 'encryptor'
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def encrypted_field(name, options = {})
|
11
|
+
key = options.delete(:key)
|
12
|
+
raise ArgumentError, ":key option must be given" if key.nil?
|
13
|
+
|
14
|
+
field(name, options)
|
15
|
+
alias_method :"#{name}_encrypted", name
|
16
|
+
|
17
|
+
define_method(name) do
|
18
|
+
value = [send(:"#{name}_encrypted").to_s].pack('H*')
|
19
|
+
|
20
|
+
return if value.blank?
|
21
|
+
Marshal.load(::Encryptor.decrypt(value, :key => key))
|
22
|
+
end
|
23
|
+
|
24
|
+
define_method("#{name}=") do |v|
|
25
|
+
marshaled = Marshal.dump(v)
|
26
|
+
enc_value = ::Encryptor.encrypt(marshaled, :key => key).unpack('H*')[0]
|
27
|
+
|
28
|
+
write_attribute(name, enc_value)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/mongoid_ext/file.rb
CHANGED
@@ -33,7 +33,9 @@ module Versioning
|
|
33
33
|
end
|
34
34
|
|
35
35
|
@rolling_back = true
|
36
|
-
save!
|
36
|
+
r = save!
|
37
|
+
@rolling_back = false
|
38
|
+
r
|
37
39
|
end
|
38
40
|
|
39
41
|
def load_version(pos = nil)
|
@@ -51,9 +53,30 @@ module Versioning
|
|
51
53
|
version1 = self.version_at(pos1)
|
52
54
|
version2 = self.version_at(pos2)
|
53
55
|
|
56
|
+
Differ.diff(version1.content(key), version2.content(key)).format_as(format).html_safe
|
57
|
+
end
|
58
|
+
|
59
|
+
def diff_by_word(key, pos1, pos2, format = :html)
|
60
|
+
version1 = self.version_at(pos1)
|
61
|
+
version2 = self.version_at(pos2)
|
62
|
+
|
54
63
|
Differ.diff_by_word(version1.content(key), version2.content(key)).format_as(format).html_safe
|
55
64
|
end
|
56
65
|
|
66
|
+
def diff_by_line(key, pos1, pos2, format = :html)
|
67
|
+
version1 = self.version_at(pos1)
|
68
|
+
version2 = self.version_at(pos2)
|
69
|
+
|
70
|
+
Differ.diff_by_line(version1.content(key), version2.content(key)).format_as(format).html_safe
|
71
|
+
end
|
72
|
+
|
73
|
+
def diff_by_char(key, pos1, pos2, format = :html)
|
74
|
+
version1 = self.version_at(pos1)
|
75
|
+
version2 = self.version_at(pos2)
|
76
|
+
|
77
|
+
Differ.diff_by_char(version1.content(key), version2.content(key)).format_as(format).html_safe
|
78
|
+
end
|
79
|
+
|
57
80
|
def current_version
|
58
81
|
version_klass.new(:data => self.attributes, self.class.versionable_options[:owner_field] => (self.updated_by_id_was || self.updated_by_id), :created_at => Time.now)
|
59
82
|
end
|
@@ -107,7 +130,7 @@ module Versioning
|
|
107
130
|
validates_presence_of :target_id
|
108
131
|
|
109
132
|
def content(key)
|
110
|
-
cdata = self.data[key]
|
133
|
+
cdata = self.data[key.to_s]
|
111
134
|
if cdata.respond_to?(:join)
|
112
135
|
cdata.join(" ")
|
113
136
|
else
|
@@ -162,10 +185,10 @@ module Versioning
|
|
162
185
|
uuser_id = send(self.versionable_options[:owner_field]+"_was")||send(self.versionable_options[:owner_field])
|
163
186
|
if !self.new? && !data.empty? && uuser_id
|
164
187
|
max_versions = self.versionable_options[:max_versions].to_i
|
165
|
-
if self.version_ids.size >= max_versions
|
166
|
-
old = self.version_ids.slice!(0, max_versions)
|
188
|
+
if max_versions > 0 && self.version_ids.size >= max_versions
|
189
|
+
old = self.version_ids.slice!(0, max_versions-1)
|
167
190
|
self.class.skip_callback(:save, :before, :save_version)
|
168
|
-
self.version_klass.
|
191
|
+
self.version_klass.where(:_id.in => old).delete_all
|
169
192
|
self.save
|
170
193
|
self.class.set_callback(:save, :before, :save_version)
|
171
194
|
end
|
data/mongoid_ext.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongoid_ext}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["David A. Cuadrado"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-07-15}
|
13
13
|
s.default_executable = %q{mongoid_console}
|
14
14
|
s.description = %q{mongoid plugins}
|
15
15
|
s.email = %q{krawek@gmail.com}
|
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
|
|
30
30
|
"lib/mongoid_ext.rb",
|
31
31
|
"lib/mongoid_ext/criteria_ext.rb",
|
32
32
|
"lib/mongoid_ext/document_ext.rb",
|
33
|
+
"lib/mongoid_ext/encryptor.rb",
|
33
34
|
"lib/mongoid_ext/file.rb",
|
34
35
|
"lib/mongoid_ext/file_list.rb",
|
35
36
|
"lib/mongoid_ext/file_server.rb",
|
@@ -58,6 +59,7 @@ Gem::Specification.new do |s|
|
|
58
59
|
"test/helper.rb",
|
59
60
|
"test/models.rb",
|
60
61
|
"test/support/custom_matchers.rb",
|
62
|
+
"test/test_encryptor.rb",
|
61
63
|
"test/test_filter.rb",
|
62
64
|
"test/test_modifiers.rb",
|
63
65
|
"test/test_paranoia.rb",
|
@@ -87,6 +89,7 @@ Gem::Specification.new do |s|
|
|
87
89
|
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
88
90
|
s.add_runtime_dependency(%q<tzinfo>, [">= 0"])
|
89
91
|
s.add_runtime_dependency(%q<differ>, [">= 0.1.2"])
|
92
|
+
s.add_runtime_dependency(%q<encryptor>, ["~> 1.1.3"])
|
90
93
|
s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
|
91
94
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
92
95
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
@@ -101,6 +104,7 @@ Gem::Specification.new do |s|
|
|
101
104
|
s.add_dependency(%q<i18n>, [">= 0"])
|
102
105
|
s.add_dependency(%q<tzinfo>, [">= 0"])
|
103
106
|
s.add_dependency(%q<differ>, [">= 0.1.2"])
|
107
|
+
s.add_dependency(%q<encryptor>, ["~> 1.1.3"])
|
104
108
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
105
109
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
106
110
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
@@ -116,6 +120,7 @@ Gem::Specification.new do |s|
|
|
116
120
|
s.add_dependency(%q<i18n>, [">= 0"])
|
117
121
|
s.add_dependency(%q<tzinfo>, [">= 0"])
|
118
122
|
s.add_dependency(%q<differ>, [">= 0.1.2"])
|
123
|
+
s.add_dependency(%q<encryptor>, ["~> 1.1.3"])
|
119
124
|
s.add_dependency(%q<yard>, ["~> 0.6.0"])
|
120
125
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
121
126
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
data/test/models.rb
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
class CreditCard # for encryptor
|
2
|
+
include Mongoid::Document
|
3
|
+
include MongoidExt::Encryptor
|
4
|
+
|
5
|
+
encrypted_field :number, :type => Integer, :key => "my password"
|
6
|
+
encrypted_field :data, :type => Hash, :key => "my password"
|
7
|
+
encrypted_field :extra, :key => "my password"
|
8
|
+
end
|
9
|
+
|
1
10
|
|
2
11
|
class Event # for safe_update, and Timestamp
|
3
12
|
include Mongoid::Document
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class StorageTest < Test::Unit::TestCase
|
4
|
+
context "Encrypting fields" do
|
5
|
+
setup do
|
6
|
+
@cc = CreditCard.create(:number => 12345, :data => {:month => 10, :year => 2014})
|
7
|
+
end
|
8
|
+
|
9
|
+
should "be able to load the number" do
|
10
|
+
@cc.reload
|
11
|
+
@cc.number.should == 12345
|
12
|
+
end
|
13
|
+
|
14
|
+
should "be able to load a hash or array" do
|
15
|
+
@cc.reload
|
16
|
+
@cc.data.should == {:month => 10, :year => 2014}
|
17
|
+
end
|
18
|
+
|
19
|
+
should "encrypt the field" do
|
20
|
+
@cc.reload
|
21
|
+
@cc.data_encrypted.should == 'd3f1d84f75f95027af7697f59c07437508ec98377a6d4104c7d7dc79967bf46b'
|
22
|
+
end
|
23
|
+
|
24
|
+
should "not fail with nil values" do
|
25
|
+
@cc.data = nil
|
26
|
+
@cc.save
|
27
|
+
@cc.reload
|
28
|
+
@cc.data.should == nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/test/test_versioning.rb
CHANGED
@@ -24,9 +24,8 @@ class TestVersioning < Test::Unit::TestCase
|
|
24
24
|
@blogpost.title = "sistemas operativos"
|
25
25
|
@blogpost.save!
|
26
26
|
@blogpost.reload
|
27
|
-
|
28
|
-
@blogpost.
|
29
|
-
@blogpost.diff(:title, 0, "current", :ascii).should == '{-"sistemas operativos"}'
|
27
|
+
@blogpost.diff_by_word(:title, "current", 0, :ascii).should == "{\"operating\" >> \"sistemas\"} {\"systems\" >> \"operativos\"}"
|
28
|
+
@blogpost.diff_by_line(:title, 0, "current", :ascii).should == "{\"sistemas operativos\" >> \"operating systems\"}"
|
30
29
|
end
|
31
30
|
|
32
31
|
should "be able to restore a previous version" do
|
@@ -49,6 +48,7 @@ class TestVersioning < Test::Unit::TestCase
|
|
49
48
|
@blogpost.title = "sistemas operativos 3"
|
50
49
|
@blogpost.save!
|
51
50
|
@blogpost.reload
|
51
|
+
|
52
52
|
@blogpost.versions.count.should == 2
|
53
53
|
end
|
54
54
|
end
|
data/test/types/test_set.rb
CHANGED
@@ -7,7 +7,9 @@ class SetTest < Test::Unit::TestCase
|
|
7
7
|
|
8
8
|
context "working with sets" do
|
9
9
|
setup do
|
10
|
-
@recipe = Recipe.
|
10
|
+
@recipe = Recipe.new
|
11
|
+
@recipe.ingredients = Set.new(%w[salt sugar water salt sugar water])
|
12
|
+
@recipe.save
|
11
13
|
end
|
12
14
|
|
13
15
|
should "not have duplicates" do
|
@@ -20,6 +22,9 @@ class SetTest < Test::Unit::TestCase
|
|
20
22
|
should "not add duplicates" do
|
21
23
|
original_size = @recipe.ingredients.size
|
22
24
|
@recipe.ingredients << "salt"
|
25
|
+
@recipe.save
|
26
|
+
@recipe.reload
|
27
|
+
|
23
28
|
@recipe.ingredients.size.should == original_size
|
24
29
|
end
|
25
30
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 2
|
9
|
+
version: 0.6.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- David A. Cuadrado
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-07-15 00:00:00 -05:00
|
18
18
|
default_executable: mongoid_console
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -87,8 +87,23 @@ dependencies:
|
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: *id005
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
|
-
name:
|
90
|
+
name: encryptor
|
91
91
|
requirement: &id006 !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
segments:
|
97
|
+
- 1
|
98
|
+
- 1
|
99
|
+
- 3
|
100
|
+
version: 1.1.3
|
101
|
+
type: :runtime
|
102
|
+
prerelease: false
|
103
|
+
version_requirements: *id006
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: yard
|
106
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
92
107
|
none: false
|
93
108
|
requirements:
|
94
109
|
- - ~>
|
@@ -100,10 +115,10 @@ dependencies:
|
|
100
115
|
version: 0.6.0
|
101
116
|
type: :development
|
102
117
|
prerelease: false
|
103
|
-
version_requirements: *
|
118
|
+
version_requirements: *id007
|
104
119
|
- !ruby/object:Gem::Dependency
|
105
120
|
name: bundler
|
106
|
-
requirement: &
|
121
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
107
122
|
none: false
|
108
123
|
requirements:
|
109
124
|
- - ~>
|
@@ -115,10 +130,10 @@ dependencies:
|
|
115
130
|
version: 1.0.0
|
116
131
|
type: :development
|
117
132
|
prerelease: false
|
118
|
-
version_requirements: *
|
133
|
+
version_requirements: *id008
|
119
134
|
- !ruby/object:Gem::Dependency
|
120
135
|
name: jeweler
|
121
|
-
requirement: &
|
136
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
122
137
|
none: false
|
123
138
|
requirements:
|
124
139
|
- - ~>
|
@@ -130,10 +145,10 @@ dependencies:
|
|
130
145
|
version: 1.5.2
|
131
146
|
type: :development
|
132
147
|
prerelease: false
|
133
|
-
version_requirements: *
|
148
|
+
version_requirements: *id009
|
134
149
|
- !ruby/object:Gem::Dependency
|
135
150
|
name: shoulda
|
136
|
-
requirement: &
|
151
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
137
152
|
none: false
|
138
153
|
requirements:
|
139
154
|
- - ~>
|
@@ -145,10 +160,10 @@ dependencies:
|
|
145
160
|
version: 2.11.3
|
146
161
|
type: :development
|
147
162
|
prerelease: false
|
148
|
-
version_requirements: *
|
163
|
+
version_requirements: *id010
|
149
164
|
- !ruby/object:Gem::Dependency
|
150
165
|
name: jnunemaker-matchy
|
151
|
-
requirement: &
|
166
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
152
167
|
none: false
|
153
168
|
requirements:
|
154
169
|
- - ~>
|
@@ -159,10 +174,10 @@ dependencies:
|
|
159
174
|
version: "0.4"
|
160
175
|
type: :development
|
161
176
|
prerelease: false
|
162
|
-
version_requirements: *
|
177
|
+
version_requirements: *id011
|
163
178
|
- !ruby/object:Gem::Dependency
|
164
179
|
name: shoulda
|
165
|
-
requirement: &
|
180
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
166
181
|
none: false
|
167
182
|
requirements:
|
168
183
|
- - ~>
|
@@ -174,10 +189,10 @@ dependencies:
|
|
174
189
|
version: 2.11.3
|
175
190
|
type: :development
|
176
191
|
prerelease: false
|
177
|
-
version_requirements: *
|
192
|
+
version_requirements: *id012
|
178
193
|
- !ruby/object:Gem::Dependency
|
179
194
|
name: mocha
|
180
|
-
requirement: &
|
195
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
181
196
|
none: false
|
182
197
|
requirements:
|
183
198
|
- - ~>
|
@@ -189,10 +204,10 @@ dependencies:
|
|
189
204
|
version: 0.9.4
|
190
205
|
type: :development
|
191
206
|
prerelease: false
|
192
|
-
version_requirements: *
|
207
|
+
version_requirements: *id013
|
193
208
|
- !ruby/object:Gem::Dependency
|
194
209
|
name: timecop
|
195
|
-
requirement: &
|
210
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
196
211
|
none: false
|
197
212
|
requirements:
|
198
213
|
- - ">="
|
@@ -202,7 +217,7 @@ dependencies:
|
|
202
217
|
version: "0"
|
203
218
|
type: :development
|
204
219
|
prerelease: false
|
205
|
-
version_requirements: *
|
220
|
+
version_requirements: *id014
|
206
221
|
description: mongoid plugins
|
207
222
|
email: krawek@gmail.com
|
208
223
|
executables:
|
@@ -224,6 +239,7 @@ files:
|
|
224
239
|
- lib/mongoid_ext.rb
|
225
240
|
- lib/mongoid_ext/criteria_ext.rb
|
226
241
|
- lib/mongoid_ext/document_ext.rb
|
242
|
+
- lib/mongoid_ext/encryptor.rb
|
227
243
|
- lib/mongoid_ext/file.rb
|
228
244
|
- lib/mongoid_ext/file_list.rb
|
229
245
|
- lib/mongoid_ext/file_server.rb
|
@@ -252,6 +268,7 @@ files:
|
|
252
268
|
- test/helper.rb
|
253
269
|
- test/models.rb
|
254
270
|
- test/support/custom_matchers.rb
|
271
|
+
- test/test_encryptor.rb
|
255
272
|
- test/test_filter.rb
|
256
273
|
- test/test_modifiers.rb
|
257
274
|
- test/test_paranoia.rb
|