ohm-contrib 1.2 → 2.0.0.alpha2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.markdown +1 -1
- data/lib/ohm/callbacks.rb +1 -1
- data/lib/ohm/datatypes.rb +1 -1
- data/lib/ohm/softdelete.rb +21 -11
- data/lib/ohm/timestamps.rb +1 -1
- data/lib/ohm/versioned.rb +7 -11
- data/ohm-contrib.gemspec +3 -4
- data/test/helper.rb +0 -3
- data/test/plugin.rb +9 -9
- data/test/scope.rb +2 -2
- metadata +16 -40
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bcc41d31e8b5341e8fd904569405b3d9b34117d9
|
4
|
+
data.tar.gz: 106c327eeb443fe0e4231740dad105b9ab18ffa2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fb14c183b55886fccec06e3178c889b1e8f85d5f7072ee15493bf7cfcc512ae70fa311257b57586e911dfd3cde264208386bb571aecd55860178acda4aa77388
|
7
|
+
data.tar.gz: 43c40485f12e12a49b61e45fb84b0045afa0a42874d16509ffb0c1ff458085ad0a6f9552cfd1e2aa8eb78ce7a690eb6093e348a546e78618ca60a22ef0309781
|
data/README.markdown
CHANGED
@@ -207,7 +207,7 @@ The following lists the major changes:
|
|
207
207
|
See [scrivener][scrivener] instead.
|
208
208
|
5. `Ohm::Boundaries` has been removed.
|
209
209
|
6. Ohm::Contrib no longer uses `autoload`. You can either
|
210
|
-
`require 'ohm/contrib'
|
210
|
+
`require 'ohm/contrib'`, which requires everything, or you
|
211
211
|
can `require ohm/datatypes` for example if you want to cherry
|
212
212
|
pick your requires.
|
213
213
|
7. `Ohm::Callbacks` no longer provides macro style callbacks, i.e.
|
data/lib/ohm/callbacks.rb
CHANGED
data/lib/ohm/datatypes.rb
CHANGED
@@ -10,7 +10,7 @@ module Ohm
|
|
10
10
|
Integer = lambda { |x| x.to_i }
|
11
11
|
Decimal = lambda { |x| BigDecimal(x.to_s) }
|
12
12
|
Float = lambda { |x| x.to_f }
|
13
|
-
Symbol = lambda { |x| x.to_sym }
|
13
|
+
Symbol = lambda { |x| x && x.to_sym }
|
14
14
|
Boolean = lambda { |x| Ohm::DataTypes.bool(x) }
|
15
15
|
Time = lambda { |t| t && (t.kind_of?(::Time) ? t : ::Time.parse(t)) }
|
16
16
|
Date = lambda { |d| d && (d.kind_of?(::Date) ? d : ::Date.parse(d)) }
|
data/lib/ohm/softdelete.rb
CHANGED
@@ -43,19 +43,29 @@ module Ohm
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def delete
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
46
|
+
redis.queue("MULTI")
|
47
|
+
redis.queue("SREM", model.all.key, id)
|
48
|
+
redis.queue("SADD", model.deleted.key, id)
|
49
|
+
redis.queue("HSET", key, :deleted, DELETED_FLAG)
|
50
|
+
redis.queue("EXEC")
|
51
|
+
redis.commit
|
52
|
+
|
53
|
+
self.deleted = DELETED_FLAG
|
54
|
+
|
55
|
+
return self
|
51
56
|
end
|
52
57
|
|
53
58
|
def restore
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
+
redis.queue("MULTI")
|
60
|
+
redis.queue("SADD", model.all.key, id)
|
61
|
+
redis.queue("SREM", model.deleted.key, id)
|
62
|
+
redis.queue("HDEL", key, :deleted)
|
63
|
+
redis.queue("EXEC")
|
64
|
+
redis.commit
|
65
|
+
|
66
|
+
self.deleted = nil
|
67
|
+
|
68
|
+
return self
|
59
69
|
end
|
60
70
|
|
61
71
|
def deleted?
|
@@ -68,7 +78,7 @@ module Ohm
|
|
68
78
|
end
|
69
79
|
|
70
80
|
def exists?(id)
|
71
|
-
super || key[:deleted]
|
81
|
+
super || redis.call("SISMEMBER", key[:deleted], id) == 1
|
72
82
|
end
|
73
83
|
end
|
74
84
|
end
|
data/lib/ohm/timestamps.rb
CHANGED
data/lib/ohm/versioned.rb
CHANGED
@@ -4,20 +4,16 @@ module Ohm
|
|
4
4
|
model.attribute :_version, lambda { |x| x.to_i }
|
5
5
|
end
|
6
6
|
|
7
|
-
def save
|
8
|
-
|
9
|
-
t.read do |store|
|
10
|
-
current_version = key.hget(:_version).to_i
|
7
|
+
def save
|
8
|
+
current_version = new? ? 0 : redis.call("HGET", key, :_version).to_i
|
11
9
|
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
if current_version != _version
|
11
|
+
raise Ohm::VersionConflict.new(attributes)
|
12
|
+
end
|
15
13
|
|
16
|
-
|
17
|
-
end
|
14
|
+
self._version = current_version + 1
|
18
15
|
|
19
|
-
|
20
|
-
end
|
16
|
+
super
|
21
17
|
end
|
22
18
|
end
|
23
19
|
|
data/ohm-contrib.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "ohm-contrib"
|
3
|
-
s.version = "
|
3
|
+
s.version = "2.0.0.alpha2"
|
4
4
|
s.summary = %{A collection of decoupled drop-in modules for Ohm.}
|
5
5
|
s.description = %{Includes a couple of core functions such as callbacks, timestamping, typecasting and lots of generic validation routines.}
|
6
6
|
s.author = "Cyril David"
|
7
|
-
s.email = "cyx
|
7
|
+
s.email = "cyx@cyx.is"
|
8
8
|
s.homepage = "http://github.com/cyx/ohm-contrib"
|
9
9
|
|
10
10
|
s.specification_version = 2 if s.respond_to? :specification_version=
|
@@ -21,9 +21,8 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.require_paths = ["lib"]
|
22
22
|
s.rubyforge_project = "ohm-contrib"
|
23
23
|
|
24
|
-
s.add_dependency "ohm", "
|
24
|
+
s.add_dependency "ohm", "2.0.0.alpha2"
|
25
25
|
|
26
26
|
s.add_development_dependency "cutest"
|
27
|
-
s.add_development_dependency "redis"
|
28
27
|
s.add_development_dependency "override"
|
29
28
|
end
|
data/test/helper.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
$:.unshift(File.expand_path("../lib", File.dirname(__FILE__)))
|
2
2
|
|
3
3
|
require "cutest"
|
4
|
-
require "redis"
|
5
4
|
|
6
5
|
if ENV["SCRIPTED"]
|
7
6
|
require "ohm/scripted"
|
@@ -12,8 +11,6 @@ end
|
|
12
11
|
require "ohm/contrib"
|
13
12
|
require "override"
|
14
13
|
|
15
|
-
Ohm.connect :host => "localhost", :port => 6379, :db => 1
|
16
|
-
|
17
14
|
NOW = Time.utc(2010, 5, 12)
|
18
15
|
|
19
16
|
include Override
|
data/test/plugin.rb
CHANGED
@@ -35,7 +35,7 @@ private
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def after_save
|
38
|
-
comments.key
|
38
|
+
redis.call("SADD", comments.key, Comment.create.id)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
@@ -185,7 +185,7 @@ scope do
|
|
185
185
|
assert p.bought_at.kind_of?(Time)
|
186
186
|
assert_equal time, p.bought_at
|
187
187
|
|
188
|
-
assert_equal "2011-11-22 00:00:00 UTC", p.
|
188
|
+
assert_equal "2011-11-22 00:00:00 UTC", p.get(:bought_at)
|
189
189
|
assert_equal "2011-11-22 00:00:00 UTC", p.bought_at.to_s
|
190
190
|
end
|
191
191
|
|
@@ -201,7 +201,7 @@ scope do
|
|
201
201
|
|
202
202
|
p = Product[p.id]
|
203
203
|
assert_equal Date.new(2011, 11, 22), p.date_released
|
204
|
-
assert_equal "2011-11-22", p.
|
204
|
+
assert_equal "2011-11-22", p.get(:date_released)
|
205
205
|
assert_equal "2011-11-22", p.date_released.to_s
|
206
206
|
end
|
207
207
|
|
@@ -214,7 +214,7 @@ scope do
|
|
214
214
|
|
215
215
|
p = Product[p.id]
|
216
216
|
assert_equal sizes, p.sizes
|
217
|
-
assert_equal %Q[{"XS":1,"S":2,"L":3}], p.
|
217
|
+
assert_equal %Q[{"XS":1,"S":2,"L":3}], p.get(:sizes)
|
218
218
|
assert_equal %Q[{"XS":1,"S":2,"L":3}], p.sizes.to_s
|
219
219
|
end
|
220
220
|
|
@@ -227,7 +227,7 @@ scope do
|
|
227
227
|
|
228
228
|
p = Product[p.id]
|
229
229
|
assert_equal stores, p.stores
|
230
|
-
assert_equal %Q(["walmart","marshalls","jcpenny"]), p.
|
230
|
+
assert_equal %Q(["walmart","marshalls","jcpenny"]), p.get(:stores)
|
231
231
|
assert_equal %Q(["walmart","marshalls","jcpenny"]), p.stores.to_s
|
232
232
|
end
|
233
233
|
|
@@ -243,7 +243,7 @@ scope do
|
|
243
243
|
|
244
244
|
p = Product[p.id]
|
245
245
|
assert_equal 0.001, p.price
|
246
|
-
assert_equal "0.1E-2", p.
|
246
|
+
assert_equal "0.1E-2", p.get(:price)
|
247
247
|
end
|
248
248
|
|
249
249
|
test "Type::Float" do
|
@@ -253,7 +253,7 @@ scope do
|
|
253
253
|
p.save
|
254
254
|
p = Product[p.id]
|
255
255
|
assert_equal 4.5, p.rating
|
256
|
-
assert_equal "4.5", p.
|
256
|
+
assert_equal "4.5", p.get(:rating)
|
257
257
|
end
|
258
258
|
|
259
259
|
test "Type::Boolean" do
|
@@ -269,7 +269,7 @@ scope do
|
|
269
269
|
p.save
|
270
270
|
|
271
271
|
p = Product[p.id]
|
272
|
-
assert_equal
|
272
|
+
assert_equal nil, p.get(:published)
|
273
273
|
assert_equal false, p.published
|
274
274
|
end
|
275
275
|
|
@@ -293,7 +293,7 @@ scope do
|
|
293
293
|
p = Product[p.id]
|
294
294
|
|
295
295
|
assert_equal comments, p.comments
|
296
|
-
assert_equal %Q(["Awesome!","Good product","Great."]), p.
|
296
|
+
assert_equal %Q(["Awesome!","Good product","Great."]), p.get(:comments)
|
297
297
|
assert_equal %Q(["Awesome!","Good product","Great."]), p.comments.to_s
|
298
298
|
end
|
299
299
|
end
|
data/test/scope.rb
CHANGED
@@ -34,7 +34,7 @@ end
|
|
34
34
|
test "allows custom methods for the defined scopes" do
|
35
35
|
post = Post.create
|
36
36
|
comment = Comment.create(:status => "approved")
|
37
|
-
post.comments.key
|
37
|
+
Post.redis.call("SADD", post.comments.key, comment.id)
|
38
38
|
|
39
39
|
assert post.comments.approved.is_a?(Ohm::MultiSet)
|
40
40
|
assert post.comments.approved.include?(comment)
|
@@ -43,7 +43,7 @@ end
|
|
43
43
|
test "allows custom methods to be included from a module" do
|
44
44
|
post = Post.create
|
45
45
|
comment = Comment.create(:status => "rejected")
|
46
|
-
post.comments.key
|
46
|
+
Post.redis.call("SADD", post.comments.key, comment.id)
|
47
47
|
|
48
48
|
assert post.comments.rejected.is_a?(Ohm::MultiSet)
|
49
49
|
assert post.comments.rejected.include?(comment)
|
metadata
CHANGED
@@ -1,83 +1,60 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ohm-contrib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0.alpha2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Cyril David
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-04-30 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: ohm
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '='
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 2.0.0.alpha2
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '='
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
26
|
+
version: 2.0.0.alpha2
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: cutest
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: redis
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
38
|
+
- - '>='
|
60
39
|
- !ruby/object:Gem::Version
|
61
40
|
version: '0'
|
62
41
|
- !ruby/object:Gem::Dependency
|
63
42
|
name: override
|
64
43
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
44
|
requirements:
|
67
|
-
- -
|
45
|
+
- - '>='
|
68
46
|
- !ruby/object:Gem::Version
|
69
47
|
version: '0'
|
70
48
|
type: :development
|
71
49
|
prerelease: false
|
72
50
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
51
|
requirements:
|
75
|
-
- -
|
52
|
+
- - '>='
|
76
53
|
- !ruby/object:Gem::Version
|
77
54
|
version: '0'
|
78
55
|
description: Includes a couple of core functions such as callbacks, timestamping,
|
79
56
|
typecasting and lots of generic validation routines.
|
80
|
-
email: cyx
|
57
|
+
email: cyx@cyx.is
|
81
58
|
executables: []
|
82
59
|
extensions: []
|
83
60
|
extra_rdoc_files: []
|
@@ -105,25 +82,24 @@ files:
|
|
105
82
|
- test/versioned.rb
|
106
83
|
homepage: http://github.com/cyx/ohm-contrib
|
107
84
|
licenses: []
|
85
|
+
metadata: {}
|
108
86
|
post_install_message:
|
109
87
|
rdoc_options: []
|
110
88
|
require_paths:
|
111
89
|
- lib
|
112
90
|
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
91
|
requirements:
|
115
|
-
- -
|
92
|
+
- - '>='
|
116
93
|
- !ruby/object:Gem::Version
|
117
94
|
version: '0'
|
118
95
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
-
none: false
|
120
96
|
requirements:
|
121
|
-
- -
|
97
|
+
- - '>'
|
122
98
|
- !ruby/object:Gem::Version
|
123
|
-
version:
|
99
|
+
version: 1.3.1
|
124
100
|
requirements: []
|
125
101
|
rubyforge_project: ohm-contrib
|
126
|
-
rubygems_version:
|
102
|
+
rubygems_version: 2.0.0
|
127
103
|
signing_key:
|
128
104
|
specification_version: 2
|
129
105
|
summary: A collection of decoupled drop-in modules for Ohm.
|