ohm 1.1.0 → 1.1.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.
- data/lib/ohm.rb +16 -2
- data/test/filtering.rb +5 -5
- data/test/helper.rb +1 -1
- data/test/model.rb +20 -8
- data/test/validations.rb +1 -1
- metadata +32 -12
data/lib/ohm.rb
CHANGED
@@ -195,7 +195,7 @@ module Ohm
|
|
195
195
|
# them.
|
196
196
|
#
|
197
197
|
def sort_by(att, options = {})
|
198
|
-
sort(options.merge(:by =>
|
198
|
+
sort(options.merge(:by => to_key(att)))
|
199
199
|
end
|
200
200
|
|
201
201
|
# Allows you to sort your models using their IDs. This is much
|
@@ -223,7 +223,7 @@ module Ohm
|
|
223
223
|
#
|
224
224
|
def sort(options = {})
|
225
225
|
if options.has_key?(:get)
|
226
|
-
options[:get] =
|
226
|
+
options[:get] = to_key(options[:get])
|
227
227
|
return execute { |key| db.sort(key, options) }
|
228
228
|
end
|
229
229
|
|
@@ -296,6 +296,14 @@ module Ohm
|
|
296
296
|
def exists?(id)
|
297
297
|
execute { |key| db.sismember(key, id) }
|
298
298
|
end
|
299
|
+
|
300
|
+
def to_key(att)
|
301
|
+
if model.counters.include?(att)
|
302
|
+
namespace["*:counters->%s" % att]
|
303
|
+
else
|
304
|
+
namespace["*->%s" % att]
|
305
|
+
end
|
306
|
+
end
|
299
307
|
end
|
300
308
|
|
301
309
|
class List < Struct.new(:key, :namespace, :model)
|
@@ -1020,6 +1028,8 @@ module Ohm
|
|
1020
1028
|
# try to do it, you'll receive an Ohm::MissingID error.
|
1021
1029
|
#
|
1022
1030
|
def self.counter(name)
|
1031
|
+
counters << name unless counters.include?(name)
|
1032
|
+
|
1023
1033
|
define_method(name) do
|
1024
1034
|
return 0 if new?
|
1025
1035
|
|
@@ -1358,6 +1368,10 @@ module Ohm
|
|
1358
1368
|
@uniques ||= []
|
1359
1369
|
end
|
1360
1370
|
|
1371
|
+
def self.counters
|
1372
|
+
@counters ||= []
|
1373
|
+
end
|
1374
|
+
|
1361
1375
|
def self.collections
|
1362
1376
|
@collections ||= []
|
1363
1377
|
end
|
data/test/filtering.rb
CHANGED
@@ -52,7 +52,7 @@ test "#[]" do |john, jane|
|
|
52
52
|
end
|
53
53
|
|
54
54
|
test "#except" do |john, jane|
|
55
|
-
|
55
|
+
User.create(:status => "inactive", :lname => "Doe")
|
56
56
|
|
57
57
|
res = User.find(:lname => "Doe").except(:status => "inactive")
|
58
58
|
|
@@ -80,8 +80,8 @@ test "indices bug related to a nil attribute" do |john, jane|
|
|
80
80
|
end
|
81
81
|
|
82
82
|
test "#union" do |john, jane|
|
83
|
+
User.create(:status => "super", :lname => "Doe")
|
83
84
|
included = User.create(:status => "inactive", :lname => "Doe")
|
84
|
-
excluded = User.create(:status => "super", :lname => "Doe")
|
85
85
|
|
86
86
|
res = User.find(:status => "active").union(:status => "inactive")
|
87
87
|
|
@@ -112,9 +112,9 @@ scope do
|
|
112
112
|
book1 = Book.create
|
113
113
|
book2 = Book.create
|
114
114
|
|
115
|
-
|
116
|
-
|
117
|
-
|
115
|
+
Author.create(:book => book1, :mood => "happy")
|
116
|
+
Author.create(:book => book1, :mood => "sad")
|
117
|
+
Author.create(:book => book2, :mood => "sad")
|
118
118
|
|
119
119
|
[book1, book2]
|
120
120
|
end
|
data/test/helper.rb
CHANGED
data/test/model.rb
CHANGED
@@ -16,6 +16,7 @@ end
|
|
16
16
|
|
17
17
|
class Person < Ohm::Model
|
18
18
|
attribute :name
|
19
|
+
counter :logins
|
19
20
|
index :initial
|
20
21
|
|
21
22
|
def initial
|
@@ -70,7 +71,7 @@ test "empty model is ok" do
|
|
70
71
|
class Foo < Ohm::Model
|
71
72
|
end
|
72
73
|
|
73
|
-
|
74
|
+
Foo.create
|
74
75
|
end
|
75
76
|
|
76
77
|
test "counters are cleaned up during deletion" do
|
@@ -551,25 +552,36 @@ end
|
|
551
552
|
# Sorting lists and sets by model attributes
|
552
553
|
setup do
|
553
554
|
@event = Event.create(:name => "Ruby Tuesday")
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
555
|
+
{'D' => 4, 'C' => 2, 'B' => 5, 'A' => 3}.each_pair do |name, logins|
|
556
|
+
person = Person.create(:name => name)
|
557
|
+
person.incr :logins, logins
|
558
|
+
@event.attendees.add(person)
|
559
|
+
end
|
558
560
|
end
|
559
561
|
|
560
562
|
test "sort the model instances by the values provided" do
|
561
563
|
people = @event.attendees.sort_by(:name, :order => "ALPHA")
|
562
|
-
assert %w[A B C D] == people.map
|
564
|
+
assert %w[A B C D] == people.map(&:name)
|
563
565
|
end
|
564
566
|
|
565
567
|
test "accept a number in the limit parameter" do
|
566
568
|
people = @event.attendees.sort_by(:name, :limit => [0, 2], :order => "ALPHA")
|
567
|
-
assert %w[A B] == people.map
|
569
|
+
assert %w[A B] == people.map(&:name)
|
568
570
|
end
|
569
571
|
|
570
572
|
test "use the start parameter as an offset if the limit is provided" do
|
571
573
|
people = @event.attendees.sort_by(:name, :limit => [1, 2], :order => "ALPHA")
|
572
|
-
assert %w[B C] == people.map
|
574
|
+
assert %w[B C] == people.map(&:name)
|
575
|
+
end
|
576
|
+
|
577
|
+
test "use counter attributes for sorting" do
|
578
|
+
people = @event.attendees.sort_by(:logins, :limit => [0, 3], :order => "ALPHA")
|
579
|
+
assert %w[C A D] == people.map(&:name)
|
580
|
+
end
|
581
|
+
|
582
|
+
test "use counter attributes for sorting with key option" do
|
583
|
+
people = @event.attendees.sort_by(:logins, :get => :logins, :limit => [0, 3], :order => "ALPHA")
|
584
|
+
assert %w[2 3 4] == people
|
573
585
|
end
|
574
586
|
|
575
587
|
# Collections initialized with a Model parameter
|
data/test/validations.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ohm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-
|
14
|
+
date: 2012-08-20 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: redis
|
18
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,10 +23,15 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements:
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ! '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '0'
|
27
32
|
- !ruby/object:Gem::Dependency
|
28
33
|
name: nest
|
29
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
30
35
|
none: false
|
31
36
|
requirements:
|
32
37
|
- - ~>
|
@@ -34,10 +39,15 @@ dependencies:
|
|
34
39
|
version: '1.0'
|
35
40
|
type: :runtime
|
36
41
|
prerelease: false
|
37
|
-
version_requirements:
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
38
48
|
- !ruby/object:Gem::Dependency
|
39
49
|
name: scrivener
|
40
|
-
requirement:
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
41
51
|
none: false
|
42
52
|
requirements:
|
43
53
|
- - ~>
|
@@ -45,18 +55,28 @@ dependencies:
|
|
45
55
|
version: 0.0.3
|
46
56
|
type: :runtime
|
47
57
|
prerelease: false
|
48
|
-
version_requirements:
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ~>
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.0.3
|
49
64
|
- !ruby/object:Gem::Dependency
|
50
65
|
name: cutest
|
51
|
-
requirement:
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
52
67
|
none: false
|
53
68
|
requirements:
|
54
69
|
- - ~>
|
55
70
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
71
|
+
version: '1.1'
|
57
72
|
type: :development
|
58
73
|
prerelease: false
|
59
|
-
version_requirements:
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '1.1'
|
60
80
|
description: Ohm is a library that allows to store an object in Redis, a persistent
|
61
81
|
key-value database. It includes an extensible list of validations and has very good
|
62
82
|
performance.
|
@@ -115,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
135
|
version: '0'
|
116
136
|
requirements: []
|
117
137
|
rubyforge_project: ohm
|
118
|
-
rubygems_version: 1.8.
|
138
|
+
rubygems_version: 1.8.23
|
119
139
|
signing_key:
|
120
140
|
specification_version: 3
|
121
141
|
summary: Object-hash mapping library for Redis.
|