redis_orm 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/CHANGELOG +8 -0
- data/Manifest +32 -0
- data/Rakefile +7 -15
- data/TODO +5 -0
- data/lib/redis_orm/associations/belongs_to.rb +37 -3
- data/lib/redis_orm/associations/has_one.rb +32 -0
- data/lib/redis_orm/redis_orm.rb +47 -9
- data/redis_orm.gemspec +4 -4
- data/test/association_indices_test.rb +51 -28
- data/test/associations_test.rb +0 -59
- data/test/atomicity_test.rb +0 -7
- data/test/basic_functionality_test.rb +12 -28
- data/test/callbacks_test.rb +0 -70
- data/test/changes_array_test.rb +0 -6
- data/test/classes/album.rb +6 -0
- data/test/classes/article.rb +7 -0
- data/test/classes/book.rb +6 -0
- data/test/classes/catalog_item.rb +5 -0
- data/test/classes/category.rb +7 -0
- data/test/classes/city.rb +7 -0
- data/test/classes/comment.rb +26 -0
- data/test/classes/country.rb +5 -0
- data/test/classes/custom_user.rb +8 -0
- data/test/classes/cutout.rb +20 -0
- data/test/classes/cutout_aggregator.rb +5 -0
- data/test/classes/default_user.rb +10 -0
- data/test/classes/dynamic_finder_user.rb +8 -0
- data/test/classes/empty_person.rb +2 -0
- data/test/classes/giftcard.rb +6 -0
- data/test/classes/jigsaw.rb +4 -0
- data/test/classes/location.rb +5 -0
- data/test/classes/message.rb +4 -0
- data/test/classes/note.rb +5 -0
- data/test/classes/omni_user.rb +8 -0
- data/test/classes/person.rb +6 -0
- data/test/classes/photo.rb +21 -0
- data/test/classes/profile.rb +8 -0
- data/test/classes/sortable_user.rb +11 -0
- data/test/classes/timestamp.rb +3 -0
- data/test/classes/user.rb +39 -0
- data/test/classes/uuid_default_user.rb +12 -0
- data/test/classes/uuid_timestamp.rb +5 -0
- data/test/classes/uuid_user.rb +13 -0
- data/test/dynamic_finders_test.rb +9 -26
- data/test/exceptions_test.rb +1 -21
- data/test/has_one_has_many_test.rb +0 -12
- data/test/indices_test.rb +0 -18
- data/test/modules/belongs_to_model_within_module.rb +6 -0
- data/test/modules/has_many_model_within_module.rb +11 -0
- data/test/options_test.rb +0 -37
- data/test/polymorphic_test.rb +0 -39
- data/test/sortable_test.rb +60 -74
- data/test/test_helper.rb +4 -0
- data/test/uuid_as_id_test.rb +38 -70
- data/test/validations_test.rb +0 -8
- metadata +45 -12
data/test/atomicity_test.rb
CHANGED
@@ -1,12 +1,5 @@
|
|
1
1
|
require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
|
2
2
|
|
3
|
-
class Article < RedisOrm::Base
|
4
|
-
use_uuid_as_id
|
5
|
-
|
6
|
-
property :title, String
|
7
|
-
property :karma, Integer
|
8
|
-
end
|
9
|
-
|
10
3
|
describe "check atomicity" do
|
11
4
|
it "should properly increment property's value" do
|
12
5
|
article = Article.new :title => "Simple test atomicity with multiple threads", :karma => 1
|
@@ -1,36 +1,9 @@
|
|
1
1
|
require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
|
2
2
|
|
3
|
-
class User < RedisOrm::Base
|
4
|
-
property :name, String
|
5
|
-
property :age, Integer
|
6
|
-
property :wage, Float
|
7
|
-
property :male, RedisOrm::Boolean
|
8
|
-
|
9
|
-
property :created_at, Time
|
10
|
-
property :modified_at, Time
|
11
|
-
end
|
12
|
-
|
13
|
-
class DefaultUser < RedisOrm::Base
|
14
|
-
property :name, String, :default => "german"
|
15
|
-
property :age, Integer, :default => 26
|
16
|
-
property :wage, Float, :default => 256.25
|
17
|
-
property :male, RedisOrm::Boolean, :default => true
|
18
|
-
property :admin, RedisOrm::Boolean, :default => false
|
19
|
-
|
20
|
-
property :created_at, Time
|
21
|
-
property :modified_at, Time
|
22
|
-
end
|
23
|
-
|
24
|
-
class TimeStamp < RedisOrm::Base
|
25
|
-
timestamps
|
26
|
-
end
|
27
|
-
|
28
|
-
class Person;end
|
29
|
-
|
30
3
|
describe "check basic functionality" do
|
31
4
|
it "should have 3 models in descendants" do
|
32
5
|
RedisOrm::Base.descendants.should include(User, DefaultUser, TimeStamp)
|
33
|
-
RedisOrm::Base.descendants.should_not include(
|
6
|
+
RedisOrm::Base.descendants.should_not include(EmptyPerson)
|
34
7
|
end
|
35
8
|
|
36
9
|
it "should return the same user" do
|
@@ -186,4 +159,15 @@ describe "check basic functionality" do
|
|
186
159
|
t.created_at.day.should == Time.now.day
|
187
160
|
t.modified_at.day.should == Time.now.day
|
188
161
|
end
|
162
|
+
|
163
|
+
it "should properly transform :default values to right classes (if :default values are wrong) so when comparing them to other/stored instances they'll be the same" do
|
164
|
+
# SortableUser class has 3 properties with wrong classes of :default value
|
165
|
+
u = SortableUser.new :name => "Alan"
|
166
|
+
u.save
|
167
|
+
|
168
|
+
su = SortableUser.first
|
169
|
+
su.test_type_cast.should == false
|
170
|
+
su.wage.should == 20_000.0
|
171
|
+
su.age.should == 26
|
172
|
+
end
|
189
173
|
end
|
data/test/callbacks_test.rb
CHANGED
@@ -1,75 +1,5 @@
|
|
1
1
|
require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
|
2
2
|
|
3
|
-
class CutoutAggregator < RedisOrm::Base
|
4
|
-
property :modified_at, Time
|
5
|
-
|
6
|
-
property :revision, Integer, :default => 0
|
7
|
-
end
|
8
|
-
|
9
|
-
class Cutout < RedisOrm::Base
|
10
|
-
property :filename, String
|
11
|
-
|
12
|
-
before_create :increase_revisions
|
13
|
-
before_destroy :decrease_revisions
|
14
|
-
|
15
|
-
def increase_revisions
|
16
|
-
ca = CutoutAggregator.last
|
17
|
-
ca.update_attribute(:revision, ca.revision + 1) if ca
|
18
|
-
end
|
19
|
-
|
20
|
-
def decrease_revisions
|
21
|
-
ca = CutoutAggregator.first
|
22
|
-
if ca.revision > 0
|
23
|
-
ca.update_attribute :revision, ca.revision - 1
|
24
|
-
end
|
25
|
-
|
26
|
-
ca.destroy if ca.revision == 0
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class Comment < RedisOrm::Base
|
31
|
-
property :text, String
|
32
|
-
|
33
|
-
belongs_to :user
|
34
|
-
|
35
|
-
before_save :trim_whitespaces
|
36
|
-
after_save :regenerate_karma
|
37
|
-
|
38
|
-
def trim_whitespaces
|
39
|
-
self.text = self.text.strip
|
40
|
-
end
|
41
|
-
|
42
|
-
def regenerate_karma
|
43
|
-
if self.user
|
44
|
-
self.user.update_attribute :karma, (self.user.karma - self.text.length)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
class User < RedisOrm::Base
|
50
|
-
property :first_name, String
|
51
|
-
property :last_name, String
|
52
|
-
|
53
|
-
property :karma, Integer, :default => 1000
|
54
|
-
|
55
|
-
index :first_name
|
56
|
-
index :last_name
|
57
|
-
index [:first_name, :last_name]
|
58
|
-
|
59
|
-
has_many :comments
|
60
|
-
|
61
|
-
after_create :store_in_rating
|
62
|
-
after_destroy :after_destroy_callback
|
63
|
-
|
64
|
-
def store_in_rating
|
65
|
-
$redis.zadd "users:sorted_by_rating", 0.0, self.id
|
66
|
-
end
|
67
|
-
|
68
|
-
def after_destroy_callback
|
69
|
-
self.comments.map{|c| c.destroy}
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
3
|
describe "check callbacks" do
|
74
4
|
it "should fire after_create/after_destroy callbacks" do
|
75
5
|
user = User.new :first_name => "Robert", :last_name => "Pirsig"
|
data/test/changes_array_test.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
|
2
2
|
|
3
|
-
class User < RedisOrm::Base
|
4
|
-
property :name, String
|
5
|
-
property :age, Integer, :default => 26
|
6
|
-
property :gender, RedisOrm::Boolean, :default => true
|
7
|
-
end
|
8
|
-
|
9
3
|
describe "check associations" do
|
10
4
|
it "should return correct _changes array" do
|
11
5
|
user = User.new :name => "german"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Comment < RedisOrm::Base
|
2
|
+
property :body, String
|
3
|
+
property :text, String
|
4
|
+
property :moderated, RedisOrm::Boolean, :default => false
|
5
|
+
|
6
|
+
index :moderated
|
7
|
+
|
8
|
+
belongs_to :user
|
9
|
+
belongs_to :article
|
10
|
+
|
11
|
+
has_many :comments, :as => :replies
|
12
|
+
belongs_to :comment, :as => :reply_to
|
13
|
+
|
14
|
+
before_save :trim_whitespaces
|
15
|
+
after_save :regenerate_karma
|
16
|
+
|
17
|
+
def trim_whitespaces
|
18
|
+
self.text = self.text.to_s.strip
|
19
|
+
end
|
20
|
+
|
21
|
+
def regenerate_karma
|
22
|
+
if self.user
|
23
|
+
self.user.update_attribute :karma, (self.user.karma - self.text.length)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Cutout < RedisOrm::Base
|
2
|
+
property :filename, String
|
3
|
+
|
4
|
+
before_create :increase_revisions
|
5
|
+
before_destroy :decrease_revisions
|
6
|
+
|
7
|
+
def increase_revisions
|
8
|
+
ca = CutoutAggregator.last
|
9
|
+
ca.update_attribute(:revision, ca.revision + 1) if ca
|
10
|
+
end
|
11
|
+
|
12
|
+
def decrease_revisions
|
13
|
+
ca = CutoutAggregator.first
|
14
|
+
if ca.revision > 0
|
15
|
+
ca.update_attribute :revision, ca.revision - 1
|
16
|
+
end
|
17
|
+
|
18
|
+
ca.destroy if ca.revision == 0
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class DefaultUser < RedisOrm::Base
|
2
|
+
property :name, String, :default => "german"
|
3
|
+
property :age, Integer, :default => 26
|
4
|
+
property :wage, Float, :default => 256.25
|
5
|
+
property :male, RedisOrm::Boolean, :default => true
|
6
|
+
property :admin, RedisOrm::Boolean, :default => false
|
7
|
+
|
8
|
+
property :created_at, Time
|
9
|
+
property :modified_at, Time
|
10
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Photo < RedisOrm::Base
|
2
|
+
property :image, String
|
3
|
+
property :image_type, String
|
4
|
+
|
5
|
+
property :checked, RedisOrm::Boolean, :default => false
|
6
|
+
index :checked
|
7
|
+
|
8
|
+
property :inverted, RedisOrm::Boolean, :default => true
|
9
|
+
index :inverted
|
10
|
+
|
11
|
+
index :image
|
12
|
+
index [:image, :image_type]
|
13
|
+
|
14
|
+
belongs_to :album
|
15
|
+
belongs_to :user
|
16
|
+
belongs_to :category
|
17
|
+
|
18
|
+
validates_presence_of :image
|
19
|
+
validates_length_of :image, :in => 7..32
|
20
|
+
validates_format_of :image, :with => /\w*\.(gif|jpe?g|png)/
|
21
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class SortableUser < RedisOrm::Base
|
2
|
+
property :name, String, :sortable => true
|
3
|
+
property :age, Integer, :sortable => true, :default => 26.0
|
4
|
+
property :wage, Float, :sortable => true, :default => 20_000
|
5
|
+
property :address, String, :default => "Singa_poor"
|
6
|
+
|
7
|
+
property :test_type_cast, RedisOrm::Boolean, :default => "false"
|
8
|
+
|
9
|
+
index :age
|
10
|
+
index :name
|
11
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class User < RedisOrm::Base
|
2
|
+
property :name, String
|
3
|
+
property :first_name, String
|
4
|
+
property :last_name, String
|
5
|
+
property :karma, Integer, :default => 1000
|
6
|
+
property :age, Integer
|
7
|
+
property :wage, Float
|
8
|
+
property :male, RedisOrm::Boolean
|
9
|
+
property :created_at, Time
|
10
|
+
property :modified_at, Time
|
11
|
+
property :gender, RedisOrm::Boolean, :default => true
|
12
|
+
property :moderator, RedisOrm::Boolean, :default => false
|
13
|
+
property :moderated_area, String, :default => "messages"
|
14
|
+
|
15
|
+
index :moderator
|
16
|
+
index [:moderator, :moderated_area]
|
17
|
+
index :age
|
18
|
+
index :name
|
19
|
+
index :first_name
|
20
|
+
index :last_name
|
21
|
+
index [:first_name, :last_name]
|
22
|
+
|
23
|
+
has_one :profile, :index => true
|
24
|
+
has_many :comments
|
25
|
+
has_many :users, :as => :friends
|
26
|
+
has_one :photo, :dependent => :destroy
|
27
|
+
has_many :notes
|
28
|
+
|
29
|
+
after_create :store_in_rating
|
30
|
+
after_destroy :after_destroy_callback
|
31
|
+
|
32
|
+
def store_in_rating
|
33
|
+
$redis.zadd "users:sorted_by_rating", 0.0, self.id
|
34
|
+
end
|
35
|
+
|
36
|
+
def after_destroy_callback
|
37
|
+
self.comments.map{|c| c.destroy}
|
38
|
+
end
|
39
|
+
end
|