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.
Files changed (56) hide show
  1. data/CHANGELOG +8 -0
  2. data/Manifest +32 -0
  3. data/Rakefile +7 -15
  4. data/TODO +5 -0
  5. data/lib/redis_orm/associations/belongs_to.rb +37 -3
  6. data/lib/redis_orm/associations/has_one.rb +32 -0
  7. data/lib/redis_orm/redis_orm.rb +47 -9
  8. data/redis_orm.gemspec +4 -4
  9. data/test/association_indices_test.rb +51 -28
  10. data/test/associations_test.rb +0 -59
  11. data/test/atomicity_test.rb +0 -7
  12. data/test/basic_functionality_test.rb +12 -28
  13. data/test/callbacks_test.rb +0 -70
  14. data/test/changes_array_test.rb +0 -6
  15. data/test/classes/album.rb +6 -0
  16. data/test/classes/article.rb +7 -0
  17. data/test/classes/book.rb +6 -0
  18. data/test/classes/catalog_item.rb +5 -0
  19. data/test/classes/category.rb +7 -0
  20. data/test/classes/city.rb +7 -0
  21. data/test/classes/comment.rb +26 -0
  22. data/test/classes/country.rb +5 -0
  23. data/test/classes/custom_user.rb +8 -0
  24. data/test/classes/cutout.rb +20 -0
  25. data/test/classes/cutout_aggregator.rb +5 -0
  26. data/test/classes/default_user.rb +10 -0
  27. data/test/classes/dynamic_finder_user.rb +8 -0
  28. data/test/classes/empty_person.rb +2 -0
  29. data/test/classes/giftcard.rb +6 -0
  30. data/test/classes/jigsaw.rb +4 -0
  31. data/test/classes/location.rb +5 -0
  32. data/test/classes/message.rb +4 -0
  33. data/test/classes/note.rb +5 -0
  34. data/test/classes/omni_user.rb +8 -0
  35. data/test/classes/person.rb +6 -0
  36. data/test/classes/photo.rb +21 -0
  37. data/test/classes/profile.rb +8 -0
  38. data/test/classes/sortable_user.rb +11 -0
  39. data/test/classes/timestamp.rb +3 -0
  40. data/test/classes/user.rb +39 -0
  41. data/test/classes/uuid_default_user.rb +12 -0
  42. data/test/classes/uuid_timestamp.rb +5 -0
  43. data/test/classes/uuid_user.rb +13 -0
  44. data/test/dynamic_finders_test.rb +9 -26
  45. data/test/exceptions_test.rb +1 -21
  46. data/test/has_one_has_many_test.rb +0 -12
  47. data/test/indices_test.rb +0 -18
  48. data/test/modules/belongs_to_model_within_module.rb +6 -0
  49. data/test/modules/has_many_model_within_module.rb +11 -0
  50. data/test/options_test.rb +0 -37
  51. data/test/polymorphic_test.rb +0 -39
  52. data/test/sortable_test.rb +60 -74
  53. data/test/test_helper.rb +4 -0
  54. data/test/uuid_as_id_test.rb +38 -70
  55. data/test/validations_test.rb +0 -8
  56. metadata +45 -12
@@ -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(Person)
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
@@ -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"
@@ -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,6 @@
1
+ class Album < RedisOrm::Base
2
+ property :title, String
3
+
4
+ has_one :photo, :as => :front_photo
5
+ has_many :photos, :dependent => :destroy
6
+ end
@@ -0,0 +1,7 @@
1
+ class Article < RedisOrm::Base
2
+ property :title, String
3
+ property :karma, Integer
4
+
5
+ has_many :comments
6
+ has_many :categories
7
+ end
@@ -0,0 +1,6 @@
1
+ class Book < RedisOrm::Base
2
+ property :price, Integer, :default => 0 # in cents
3
+ property :title, String
4
+
5
+ has_one :catalog_item
6
+ end
@@ -0,0 +1,5 @@
1
+ class CatalogItem < RedisOrm::Base
2
+ property :title, String
3
+
4
+ belongs_to :resource, :polymorphic => true
5
+ end
@@ -0,0 +1,7 @@
1
+ class Category < RedisOrm::Base
2
+ property :name, String
3
+ property :title, String
4
+
5
+ has_many :articles
6
+ has_many :photos, :dependent => :nullify
7
+ end
@@ -0,0 +1,7 @@
1
+ class City < RedisOrm::Base
2
+ property :name, String
3
+ property :name, String
4
+
5
+ has_many :people
6
+ has_many :profiles
7
+ end
@@ -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,5 @@
1
+ class Country < RedisOrm::Base
2
+ property :name, String
3
+
4
+ has_many :people
5
+ end
@@ -0,0 +1,8 @@
1
+ class CustomUser < RedisOrm::Base
2
+ property :first_name, String
3
+ property :last_name, String
4
+
5
+ index :first_name, :unique => false
6
+ index :last_name, :unique => false
7
+ index [:first_name, :last_name], :unique => true
8
+ 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,5 @@
1
+ class CutoutAggregator < RedisOrm::Base
2
+ property :modified_at, Time
3
+
4
+ property :revision, Integer, :default => 0
5
+ 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,8 @@
1
+ class DynamicFinderUser < RedisOrm::Base
2
+ property :first_name, String
3
+ property :last_name, String
4
+
5
+ index :first_name, :unique => true
6
+ index :last_name, :unique => true
7
+ index [:first_name, :last_name], :unique => false
8
+ end
@@ -0,0 +1,2 @@
1
+ class EmptyPerson
2
+ end
@@ -0,0 +1,6 @@
1
+ class Giftcard < RedisOrm::Base
2
+ property :price, Integer, :default => 0 # in cents
3
+ property :title, String
4
+
5
+ has_one :catalog_item
6
+ end
@@ -0,0 +1,4 @@
1
+ class Jigsaw < RedisOrm::Base
2
+ property :title, String
3
+ belongs_to :user
4
+ end
@@ -0,0 +1,5 @@
1
+ class Location < RedisOrm::Base
2
+ property :coordinates, String
3
+
4
+ has_many :profiles
5
+ end
@@ -0,0 +1,4 @@
1
+ class Message < RedisOrm::Base
2
+ property :text, String
3
+ has_one :message, :as => :replay_to
4
+ end
@@ -0,0 +1,5 @@
1
+ class Note < RedisOrm::Base
2
+ property :body, :string, :default => "made by redis_orm"
3
+
4
+ belongs_to :user, :as => :owner, :index => true
5
+ end
@@ -0,0 +1,8 @@
1
+ class OmniUser < RedisOrm::Base
2
+ property :email, String
3
+ property :uid, Integer
4
+
5
+ index :email, :case_insensitive => true
6
+ index :uid
7
+ index [:email, :uid], :case_insensitive => true
8
+ end
@@ -0,0 +1,6 @@
1
+ # for second test
2
+ class Person < RedisOrm::Base
3
+ property :name, String
4
+
5
+ belongs_to :location, :polymorphic => true
6
+ 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,8 @@
1
+ class Profile < RedisOrm::Base
2
+ property :title, String
3
+ property :name, String
4
+
5
+ belongs_to :user
6
+ has_one :location
7
+ has_one :city
8
+ 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,3 @@
1
+ class TimeStamp < RedisOrm::Base
2
+ timestamps
3
+ 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