redis_orm 0.7 → 0.8

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 (65) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -1
  3. data/lib/redis_orm.rb +8 -13
  4. data/lib/redis_orm/associations/has_many.rb +7 -3
  5. data/lib/redis_orm/redis_orm.rb +3 -5
  6. metadata +64 -124
  7. data/Gemfile +0 -10
  8. data/Manifest +0 -74
  9. data/Rakefile +0 -25
  10. data/benchmarks/sortable_benchmark.rb +0 -45
  11. data/redis_orm.gemspec +0 -45
  12. data/spec/generators/model_generator_spec.rb +0 -29
  13. data/spec/spec_helper.rb +0 -17
  14. data/test/association_indices_test.rb +0 -168
  15. data/test/associations_test.rb +0 -294
  16. data/test/atomicity_test.rb +0 -36
  17. data/test/basic_functionality_test.rb +0 -204
  18. data/test/callbacks_test.rb +0 -49
  19. data/test/changes_array_test.rb +0 -25
  20. data/test/classes/album.rb +0 -6
  21. data/test/classes/article.rb +0 -7
  22. data/test/classes/article_with_comments.rb +0 -8
  23. data/test/classes/book.rb +0 -6
  24. data/test/classes/catalog_item.rb +0 -5
  25. data/test/classes/category.rb +0 -7
  26. data/test/classes/city.rb +0 -7
  27. data/test/classes/comment.rb +0 -26
  28. data/test/classes/country.rb +0 -5
  29. data/test/classes/custom_user.rb +0 -8
  30. data/test/classes/cutout.rb +0 -20
  31. data/test/classes/cutout_aggregator.rb +0 -5
  32. data/test/classes/default_user.rb +0 -10
  33. data/test/classes/dynamic_finder_user.rb +0 -8
  34. data/test/classes/empty_person.rb +0 -2
  35. data/test/classes/expire_user.rb +0 -8
  36. data/test/classes/expire_user_with_predicate.rb +0 -13
  37. data/test/classes/giftcard.rb +0 -6
  38. data/test/classes/jigsaw.rb +0 -4
  39. data/test/classes/location.rb +0 -5
  40. data/test/classes/message.rb +0 -4
  41. data/test/classes/note.rb +0 -5
  42. data/test/classes/omni_user.rb +0 -8
  43. data/test/classes/person.rb +0 -6
  44. data/test/classes/photo.rb +0 -21
  45. data/test/classes/profile.rb +0 -9
  46. data/test/classes/sortable_user.rb +0 -11
  47. data/test/classes/timestamp.rb +0 -3
  48. data/test/classes/user.rb +0 -39
  49. data/test/classes/uuid_default_user.rb +0 -12
  50. data/test/classes/uuid_timestamp.rb +0 -5
  51. data/test/classes/uuid_user.rb +0 -13
  52. data/test/dynamic_finders_test.rb +0 -51
  53. data/test/exceptions_test.rb +0 -47
  54. data/test/expire_records_test.rb +0 -64
  55. data/test/has_one_has_many_test.rb +0 -42
  56. data/test/indices_test.rb +0 -63
  57. data/test/modules/belongs_to_model_within_module.rb +0 -6
  58. data/test/modules/has_many_model_within_module.rb +0 -11
  59. data/test/options_test.rb +0 -226
  60. data/test/polymorphic_test.rb +0 -65
  61. data/test/redis.conf +0 -417
  62. data/test/sortable_test.rb +0 -116
  63. data/test/test_helper.rb +0 -37
  64. data/test/uuid_as_id_test.rb +0 -178
  65. data/test/validations_test.rb +0 -20
@@ -1,5 +0,0 @@
1
- class CutoutAggregator < RedisOrm::Base
2
- property :modified_at, Time
3
-
4
- property :revision, Integer, :default => 0
5
- end
@@ -1,10 +0,0 @@
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
@@ -1,8 +0,0 @@
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
@@ -1,2 +0,0 @@
1
- class EmptyPerson
2
- end
@@ -1,8 +0,0 @@
1
- class ExpireUser < RedisOrm::Base
2
- property :name, String
3
-
4
- expire 10.minutes.from_now
5
-
6
- has_many :articles
7
- has_one :profile
8
- end
@@ -1,13 +0,0 @@
1
- class ExpireUserWithPredicate < RedisOrm::Base
2
- property :name, String
3
- property :persist, RedisOrm::Boolean, :default => false
4
-
5
- expire 10.minutes.from_now, :if => Proc.new {|r| !r.persist?}
6
-
7
- has_many :articles
8
- has_one :profile
9
-
10
- def persist?
11
- !!self.persist
12
- end
13
- end
@@ -1,6 +0,0 @@
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
@@ -1,4 +0,0 @@
1
- class Jigsaw < RedisOrm::Base
2
- property :title, String
3
- belongs_to :user
4
- end
@@ -1,5 +0,0 @@
1
- class Location < RedisOrm::Base
2
- property :coordinates, String
3
-
4
- has_many :profiles
5
- end
@@ -1,4 +0,0 @@
1
- class Message < RedisOrm::Base
2
- property :text, String
3
- has_one :message, :as => :replay_to
4
- end
data/test/classes/note.rb DELETED
@@ -1,5 +0,0 @@
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
@@ -1,8 +0,0 @@
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
@@ -1,6 +0,0 @@
1
- # for second test
2
- class Person < RedisOrm::Base
3
- property :name, String
4
-
5
- belongs_to :location, :polymorphic => true
6
- end
@@ -1,21 +0,0 @@
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
@@ -1,9 +0,0 @@
1
- class Profile < RedisOrm::Base
2
- property :title, String
3
- property :name, String
4
-
5
- belongs_to :user
6
- belongs_to :expire_user
7
- has_one :location
8
- has_one :city
9
- end
@@ -1,11 +0,0 @@
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
@@ -1,3 +0,0 @@
1
- class TimeStamp < RedisOrm::Base
2
- timestamps
3
- end
data/test/classes/user.rb DELETED
@@ -1,39 +0,0 @@
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
@@ -1,12 +0,0 @@
1
- class UuidDefaultUser < RedisOrm::Base
2
- use_uuid_as_id
3
-
4
- property :name, String, :default => "german"
5
- property :age, Integer, :default => 26
6
- property :wage, Float, :default => 256.25
7
- property :male, RedisOrm::Boolean, :default => true
8
- property :admin, RedisOrm::Boolean, :default => false
9
-
10
- property :created_at, Time
11
- property :modified_at, Time
12
- end
@@ -1,5 +0,0 @@
1
- class UuidTimeStamp < RedisOrm::Base
2
- use_uuid_as_id
3
-
4
- timestamps
5
- end
@@ -1,13 +0,0 @@
1
- class UuidUser < RedisOrm::Base
2
- use_uuid_as_id
3
-
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
-
12
- has_many :users, :as => :friends
13
- end
@@ -1,51 +0,0 @@
1
- require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
2
-
3
- describe "check associations" do
4
- it "should create and use indexes to implement dynamic finders" do
5
- user1 = DynamicFinderUser.new
6
- user1.first_name = "Dmitrii"
7
- user1.last_name = "Samoilov"
8
- user1.save
9
-
10
- DynamicFinderUser.find_by_first_name("John").should == nil
11
-
12
- user = DynamicFinderUser.find_by_first_name "Dmitrii"
13
- user.id.should == user1.id
14
-
15
- DynamicFinderUser.find_all_by_first_name("Dmitrii").size.should == 1
16
-
17
- user = DynamicFinderUser.find_by_first_name_and_last_name('Dmitrii', 'Samoilov')
18
- user.should be
19
- user.id.should == user1.id
20
-
21
- DynamicFinderUser.find_all_by_first_name_and_last_name('Dmitrii', 'Samoilov').size.should == 1
22
-
23
- DynamicFinderUser.find_all_by_last_name_and_first_name('Samoilov', 'Dmitrii')[0].id.should == user1.id
24
-
25
- lambda{DynamicFinderUser.find_by_first_name_and_cast_name('Dmitrii', 'Samoilov')}.should raise_error
26
- end
27
-
28
- it "should create and use indexes to implement dynamic finders" do
29
- user1 = CustomUser.new
30
- user1.first_name = "Dmitrii"
31
- user1.last_name = "Samoilov"
32
- user1.save
33
-
34
- user2 = CustomUser.new
35
- user2.first_name = "Dmitrii"
36
- user2.last_name = "Nabaldyan"
37
- user2.save
38
-
39
- user = CustomUser.find_by_first_name "Dmitrii"
40
- user.id.should == user1.id
41
-
42
- CustomUser.find_by_last_name("Krassovkin").should == nil
43
-
44
- CustomUser.find_all_by_first_name("Dmitrii").size.should == 2
45
- end
46
-
47
- # TODO
48
- it "should properly delete indices when record was deleted" do
49
-
50
- end
51
- end
@@ -1,47 +0,0 @@
1
- require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
2
-
3
- describe "exceptions test" do
4
- it "should raise an exception if association is provided with improper class" do
5
- User.count.should == 0
6
-
7
- user = User.new :name => "german", :age => 26
8
- user.save
9
-
10
- user.should be
11
- user.name.should == "german"
12
- User.count.should == 1
13
-
14
- lambda{ User.find :all, :conditions => {:gender => true} }.should raise_error
15
- User.find(:all, :conditions => {:age => 26}).size.should == 1
16
- lambda{ User.find :all, :conditions => {:name => "german", :age => 26} }.should raise_error
17
-
18
- jigsaw = Jigsaw.new
19
- jigsaw.title = "123"
20
- jigsaw.save
21
-
22
- # RedisOrm::TypeMismatchError
23
- lambda { user.profile = jigsaw }.should raise_error
24
- end
25
-
26
- it "should raise an exception if there is no such record in the storage" do
27
- User.find(12).should == nil
28
- lambda{ User.find! 12 }.should raise_error(RedisOrm::RecordNotFound)
29
- end
30
-
31
- it "should throw an exception if there was an error while creating object with #create! method" do
32
- jigsaw = Jigsaw.create :title => "jigsaw"
33
- lambda { User.create!(:name => "John", :age => 44, :profile => jigsaw) }.should raise_error(RedisOrm::TypeMismatchError)
34
- end
35
-
36
- it "should throw an exception if wrong format of the default value is specified for Array/Hash property" do
37
- a = ArticleWithComments.new :title => "Article #1", :rates => [1,2,3,4,5]
38
- lambda {
39
- a.save
40
- }.should raise_error(RedisOrm::TypeMismatchError)
41
-
42
- a = ArticleWithComments.new :title => "Article #1", :comments => 12
43
- lambda {
44
- a.save
45
- }.should raise_error(RedisOrm::TypeMismatchError)
46
- end
47
- end
@@ -1,64 +0,0 @@
1
- require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
2
-
3
- describe "expire record after specified time" do
4
- it "should create a record and then delete if *expire* method is specified in appropriate class" do
5
- euser = ExpireUser.create :name => "Ghost rider"
6
- $redis.ttl(euser.__redis_record_key).should be > 9.minutes.from_now.to_i
7
- $redis.ttl(euser.__redis_record_key).should be < (10.minutes.from_now.to_i + 1)
8
- end
9
-
10
- it "should create a record and then delete if *expire* method is specified in appropriate class" do
11
- euser = ExpireUserWithPredicate.create :name => "Ghost rider"
12
- $redis.ttl(euser.__redis_record_key).should be > 9.minutes.from_now.to_i
13
- $redis.ttl(euser.__redis_record_key).should be < (10.minutes.from_now.to_i + 1)
14
-
15
- euser2 = ExpireUserWithPredicate.create :name => "Ghost rider", :persist => true
16
- $redis.ttl(euser2.__redis_record_key).should == -1
17
- end
18
-
19
- it "should create a record with an inline *expire* option (which overrides default *expire* value)" do
20
- euser = ExpireUser.create :name => "Ghost rider", :expire_in => 50.minutes.from_now
21
- $redis.ttl(euser.__redis_record_key).should be < (50.minutes.from_now.to_i + 1)
22
- $redis.ttl(euser.__redis_record_key).should be > 49.minutes.from_now.to_i
23
- end
24
-
25
- it "should also create expirable key when record has associated records" do
26
- euser = ExpireUser.create :name => "Ghost rider"
27
- $redis.ttl(euser.__redis_record_key).should be > 9.minutes.from_now.to_i
28
- $redis.ttl(euser.__redis_record_key).should be < (10.minutes.from_now.to_i + 1)
29
-
30
- profile = Profile.create :title => "Profile for ghost rider", :name => "Ghost Rider"
31
- articles = [Article.create(:title => "article1", :karma => 1), Article.create(:title => "article2", :karma => 2)]
32
-
33
- euser.profile = profile
34
- euser.profile.should == profile
35
- $redis.get("expire_user:1:profile").to_i.should == profile.id
36
- $redis.ttl("expire_user:1:profile").should be > 9.minutes.from_now.to_i
37
- $redis.ttl("expire_user:1:profile").should be < (10.minutes.from_now.to_i + 1)
38
-
39
- euser.articles = articles
40
- $redis.zrange("expire_user:1:articles", 0, -1).should =~ articles.map{|a| a.id.to_s}
41
- $redis.ttl("expire_user:1:articles").should be > 9.minutes.from_now.to_i
42
- $redis.ttl("expire_user:1:articles").should be < (10.minutes.from_now.to_i + 1)
43
- end
44
-
45
- it "should also create expirable key when record has associated records (class with predicate expiry)" do
46
- euser2 = ExpireUserWithPredicate.create :name => "Ghost rider", :persist => false
47
- $redis.ttl(euser2.__redis_record_key).should be > 9.minutes.from_now.to_i
48
- $redis.ttl(euser2.__redis_record_key).should be < (10.minutes.from_now.to_i + 1)
49
-
50
- profile = Profile.create :title => "Profile for ghost rider", :name => "Ghost Rider"
51
- articles = [Article.create(:title => "article1", :karma => 1), Article.create(:title => "article2", :karma => 2)]
52
-
53
- euser2.profile = profile
54
- euser2.profile.should == profile
55
- $redis.get("expire_user_with_predicate:1:profile").to_i.should == profile.id
56
- $redis.ttl("expire_user_with_predicate:1:profile").should be > 9.minutes.from_now.to_i
57
- $redis.ttl("expire_user_with_predicate:1:profile").should be < (10.minutes.from_now.to_i + 1)
58
-
59
- euser2.articles << articles
60
- $redis.zrange("expire_user_with_predicate:1:articles", 0, -1).should =~ articles.map{|a| a.id.to_s}
61
- $redis.ttl("expire_user_with_predicate:1:articles").should be > 9.minutes.from_now.to_i
62
- $redis.ttl("expire_user_with_predicate:1:articles").should be < (10.minutes.from_now.to_i + 1)
63
- end
64
- end
@@ -1,42 +0,0 @@
1
- require File.dirname(File.expand_path(__FILE__)) + '/test_helper.rb'
2
-
3
- describe "check associations" do
4
- it "should save associations properly" do
5
- @profile = Profile.new
6
- @profile.name = "my profile"
7
- @profile.save
8
-
9
- @profile.should be
10
- @profile.name.should == "my profile"
11
-
12
- @location1 = Location.new
13
- @location1.coordinates = "44.343456345 56.23341432"
14
- @location1.save
15
- @location1.should be
16
- @location1.coordinates.should == "44.343456345 56.23341432"
17
-
18
- @profile.location = @location1
19
-
20
- @profile.location.should be
21
- @profile.location.id.should == @location1.id
22
-
23
- @location1.profiles.size.should == 1
24
- @location1.profiles.first.id.should == @profile.id
25
-
26
- # check second profile
27
- @profile2 = Profile.new
28
- @profile2.name = "someone else's profile"
29
- @profile2.save
30
-
31
- @profile2.should be
32
- @profile2.name.should == "someone else's profile"
33
-
34
- @profile2.location = @location1
35
-
36
- @profile2.location.should be
37
- @profile2.location.id.should == @location1.id
38
-
39
- @location1.profiles.size.should == 2
40
- @location1.profiles.collect{|p| p.id}.sort.should == [@profile.id, @profile2.id].sort
41
- end
42
- end