redis_object 0.5.0 → 1.0

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 (103) hide show
  1. data/.gitignore +0 -2
  2. data/Gemfile +0 -4
  3. data/README.markdown +15 -24
  4. data/Rakefile +0 -8
  5. data/doc/Object.html +185 -0
  6. data/doc/Seabright.html +181 -0
  7. data/doc/Seabright/Adapter.html +442 -0
  8. data/doc/Seabright/Collection.html +797 -0
  9. data/doc/Seabright/Collections.html +635 -0
  10. data/doc/Seabright/Collections/ClassMethods.html +212 -0
  11. data/doc/Seabright/ExternalIndex.html +217 -0
  12. data/doc/Seabright/History.html +382 -0
  13. data/doc/Seabright/History/ClassMethods.html +276 -0
  14. data/doc/Seabright/Indices.html +324 -0
  15. data/doc/Seabright/Indices/ClassMethods.html +348 -0
  16. data/doc/Seabright/Keys.html +314 -0
  17. data/doc/Seabright/Keys/ClassMethods.html +276 -0
  18. data/doc/Seabright/ObjectBase.html +852 -0
  19. data/doc/Seabright/ObjectBase/ClassMethods.html +677 -0
  20. data/doc/Seabright/RedisObject.html +230 -0
  21. data/doc/Seabright/References.html +280 -0
  22. data/doc/Seabright/Storage.html +252 -0
  23. data/doc/Seabright/Storage/ClassMethods.html +276 -0
  24. data/doc/Seabright/Storage/MySQL.html +442 -0
  25. data/doc/Seabright/Storage/Redis.html +218 -0
  26. data/doc/Seabright/Template.html +212 -0
  27. data/doc/Seabright/Template/ClassMethods.html +166 -0
  28. data/doc/Seabright/Timestamps.html +292 -0
  29. data/doc/Seabright/Timestamps/ClassMethods.html +214 -0
  30. data/doc/Seabright/Types.html +410 -0
  31. data/doc/Seabright/Types/ClassMethods.html +308 -0
  32. data/doc/created.rid +17 -0
  33. data/doc/images/add.png +0 -0
  34. data/doc/images/brick.png +0 -0
  35. data/doc/images/brick_link.png +0 -0
  36. data/doc/images/bug.png +0 -0
  37. data/doc/images/bullet_black.png +0 -0
  38. data/doc/images/bullet_toggle_minus.png +0 -0
  39. data/doc/images/bullet_toggle_plus.png +0 -0
  40. data/doc/images/date.png +0 -0
  41. data/doc/images/delete.png +0 -0
  42. data/doc/images/find.png +0 -0
  43. data/doc/images/loadingAnimation.gif +0 -0
  44. data/doc/images/macFFBgHack.png +0 -0
  45. data/doc/images/package.png +0 -0
  46. data/doc/images/page_green.png +0 -0
  47. data/doc/images/page_white_text.png +0 -0
  48. data/doc/images/page_white_width.png +0 -0
  49. data/doc/images/plugin.png +0 -0
  50. data/doc/images/ruby.png +0 -0
  51. data/doc/images/tag_blue.png +0 -0
  52. data/doc/images/tag_green.png +0 -0
  53. data/doc/images/transparent.png +0 -0
  54. data/doc/images/wrench.png +0 -0
  55. data/doc/images/wrench_orange.png +0 -0
  56. data/doc/images/zoom.png +0 -0
  57. data/doc/index.html +125 -0
  58. data/doc/js/darkfish.js +153 -0
  59. data/doc/js/jquery.js +18 -0
  60. data/doc/js/navigation.js +142 -0
  61. data/doc/js/search.js +94 -0
  62. data/doc/js/search_index.js +1 -0
  63. data/doc/js/searcher.js +228 -0
  64. data/doc/rdoc.css +543 -0
  65. data/doc/table_of_contents.html +394 -0
  66. data/lib/redis_object.rb +1 -11
  67. data/lib/redis_object/base.rb +60 -210
  68. data/lib/redis_object/collection.rb +100 -130
  69. data/lib/redis_object/defaults.rb +8 -21
  70. data/lib/redis_object/ext/filters.rb +16 -34
  71. data/lib/redis_object/ext/triggers.rb +13 -75
  72. data/lib/redis_object/{experimental/history.rb → history.rb} +0 -0
  73. data/lib/redis_object/indices.rb +39 -44
  74. data/lib/redis_object/keys.rb +4 -4
  75. data/lib/redis_object/storage.rb +1 -30
  76. data/lib/redis_object/storage/adapter.rb +3 -6
  77. data/lib/redis_object/storage/redis.rb +3 -98
  78. data/lib/redis_object/timestamps.rb +21 -42
  79. data/lib/redis_object/types.rb +30 -172
  80. data/lib/redis_object/version.rb +1 -1
  81. data/redis_object.gemspec +0 -1
  82. data/spec/base_spec.rb +6 -41
  83. data/spec/spec_helper.rb +1 -32
  84. metadata +116 -111
  85. data/.coveralls.yml +0 -1
  86. data/.travis.yml +0 -5
  87. data/lib/redis_object/ext/script_cache.rb +0 -92
  88. data/lib/redis_object/ext/shardable.rb +0 -18
  89. data/lib/redis_object/ext/view_caching.rb +0 -258
  90. data/lib/redis_object/ext/views.rb +0 -102
  91. data/lib/redis_object/inheritance_tracking.rb +0 -23
  92. data/spec/adapter_spec.rb +0 -43
  93. data/spec/benchmark_spec.rb +0 -46
  94. data/spec/collections_spec.rb +0 -144
  95. data/spec/defaults_spec.rb +0 -56
  96. data/spec/filters_spec.rb +0 -29
  97. data/spec/indices_spec.rb +0 -45
  98. data/spec/rename_class_spec.rb +0 -96
  99. data/spec/timestamp_spec.rb +0 -28
  100. data/spec/trigger_spec.rb +0 -51
  101. data/spec/types_spec.rb +0 -103
  102. data/spec/view_caching_spec.rb +0 -130
  103. data/spec/views_spec.rb +0 -72
@@ -1,28 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- module TriggerSpec
4
-
5
- class TimestampedObject < RedisObject;end
6
-
7
- class UnTimestampedObject < RedisObject
8
- # time_matters_not!
9
- end
10
-
11
- describe Seabright::Triggers do
12
- before do
13
- RedisObject.store.flushdb
14
- end
15
-
16
- it "should get recently created object" do
17
-
18
- (1..5).each do |n|
19
- TimestampedObject.create(n.to_s)
20
- sleep Random.rand(1.0)
21
- end
22
-
23
- TimestampedObject.recently_created.first.id.should eq("5")
24
-
25
- end
26
-
27
- end
28
- end
@@ -1,51 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- module TriggerSpec
4
-
5
- class TriggeredObject < RedisObject
6
-
7
- int :raw_phone
8
- bool :mailed_flag
9
- bool :mail_was_sent_for_realz
10
- date :srsly_updated
11
-
12
- def track_phone_raw(k,v)
13
- set(:raw_phone, v.gsub(/[^0-9]/,'').to_i)
14
- end
15
-
16
- trigger_on_set :phone, :track_phone_raw
17
-
18
- def sent_mail(k,v)
19
- set(:mail_was_sent_for_realz, true)
20
- end
21
-
22
- def updated_redundant(k,v)
23
- set(:srsly_updated, Time.now)
24
- end
25
-
26
- trigger_on_set :mailed_flag, :sent_mail
27
- trigger_on_update :updated_redundant
28
-
29
- end
30
-
31
- describe Seabright::Triggers do
32
- before do
33
- RedisObject.store.flushdb
34
- end
35
-
36
- it "triggers on a call" do
37
-
38
- obj = TriggeredObject.create("trig")
39
-
40
- obj.phone = "(970) 555-1212"
41
- obj.raw_phone.should eq(9705551212)
42
- success = obj.setnx(:mailed_flag,true)
43
- success.should eq(true)
44
- obj.mail_was_sent_for_realz.should eq(true)
45
- success = obj.setnx(:mailed_flag,true)
46
- success.should eq(false)
47
-
48
- end
49
-
50
- end
51
- end
@@ -1,103 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- module TypeSpec
4
-
5
- TestValues = {
6
- date: Date.today,
7
- number: 27,
8
- int: 356192,
9
- float: 72.362517,
10
- bool: true,
11
- boolean: false,
12
- array: ["test1","test2"],
13
- json: {test1: true, test2: "false"}
14
- }
15
-
16
- TestData = TestValues.inject({}){|acc,(k,v)| acc["a_#{k}".to_sym] = v; acc }
17
-
18
- class TypedObject < RedisObject
19
- TestValues.keys.each do |type|
20
- send(type.to_sym,"a_#{type}".to_sym)
21
- end
22
- end
23
-
24
- class TypedChild < TypedObject; end
25
-
26
- describe Seabright::Types do
27
- before do
28
- RedisObject.store.flushdb
29
- end
30
-
31
- it "can be created via data packet" do
32
-
33
- obj = TypedObject.create(TestData)
34
-
35
- TestData.each do |k,v|
36
- obj.get(k).should eq(v)
37
- end
38
-
39
- end
40
-
41
- it "inherits types" do
42
-
43
- obj = TypedChild.create(TestData)
44
-
45
- TestData.each do |k,v|
46
- obj.get(k).should eq(v)
47
- end
48
-
49
- end
50
-
51
- it "can be instantiated (new) via data packet" do
52
-
53
- obj = TypedObject.new(TestData)
54
-
55
- TestData.each do |k,v|
56
- obj.get(k).should eq(v)
57
- end
58
-
59
- end
60
-
61
- it "can be created via individual sets" do
62
-
63
- obj = TypedObject.new
64
-
65
- TestData.each do |k,v|
66
- obj.set(k,v)
67
- obj.get(k).should eq(v)
68
- end
69
-
70
- end
71
-
72
- it "gets correct values after being found" do
73
-
74
- objc = TypedObject.create(TestData)
75
- obj = TypedObject.find(objc.id)
76
-
77
- TestData.each do |k,v|
78
- obj.get(k).should eq(v)
79
- end
80
-
81
- end
82
-
83
- it "nullifies non-date date value" do
84
-
85
- obj = TypedObject.new
86
-
87
- obj.a_date = "sjahfgasjfg"
88
- obj.a_date.should eq(nil)
89
-
90
- end
91
-
92
- it "describes itself" do
93
-
94
- obj = TypedObject.create(TestData)
95
- objc = TypedChild.create(TestData)
96
-
97
- desc = TypedObject.describe
98
- TypedObject.dump_schema(File.open("/tmp/redisobject_dump_test","w"))
99
-
100
- end
101
-
102
- end
103
- end
@@ -1,130 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- module ViewCachingSpec
4
-
5
- TestValues = {
6
- date: Date.today,
7
- number: 27,
8
- int: 356192,
9
- float: 72.362517,
10
- bool: true,
11
- # boolean: false,
12
- # array: [:test1,:test2],
13
- json: {test1: true, test2: "false"}
14
- }
15
-
16
- TestData = TestValues.inject({}){|acc,(k,v)| acc["a_#{k}".to_sym] = v; acc }
17
-
18
- class TypedObject < RedisObject
19
-
20
- named_view :miss_json, :a_number
21
- named_view :aggregated, :a_float, :a_bool, :aggregate
22
- cache_view :aggregated
23
- cache_view :miss_json
24
-
25
- TestValues.keys.each do |type|
26
- send(type.to_sym,"a_#{type}".to_sym)
27
- end
28
-
29
- def aggregate
30
- a_number + a_int
31
- end
32
-
33
- end
34
-
35
- class Container < RedisObject
36
-
37
- invalidate_downstream :TypedObject
38
-
39
- end
40
-
41
- class Baby < RedisObject
42
-
43
- invalidate_upstream :TypedObject
44
-
45
- end
46
-
47
- describe Seabright::ViewCaching do
48
-
49
- before do
50
- RedisObject.store.flushdb
51
- @obj = TypedObject.create(TestData)
52
- @dad = Container.create("daddy")
53
- @dad << @obj
54
- @baby = Baby.create("mama")
55
- @obj << @baby
56
- end
57
-
58
- it "generates view" do
59
-
60
- @obj.view_as_hash(:aggregated).should be_a(Hash)
61
- @obj.view_as_json(:aggregated).should be_a(String)
62
-
63
- end
64
-
65
- it "gets cached view on second access" do
66
-
67
- @obj.view_as_hash(:aggregated).should be_a(Hash)
68
- @obj.view_as_json(:aggregated).should be_a(String)
69
- @obj.view_is_cached?(:aggregated).should eq(true)
70
- @obj.view_as_hash(:aggregated).should be_a(Hash)
71
- @obj.view_as_json(:aggregated).should be_a(String)
72
-
73
- @obj.view_as_json(:miss_json).should be_a(String)
74
-
75
- end
76
-
77
- it "generates view" do
78
-
79
- @obj.regenerate_cached_views!
80
- @obj.view_is_cached?(:aggregated).should eq(true)
81
-
82
- end
83
-
84
- it "caches are invalidated" do
85
-
86
- @obj.view_as_hash(:aggregated).should be_a(Hash)
87
-
88
- @obj.view_is_cached?(:aggregated).should eq(true)
89
-
90
- @obj.invalidate_cached_views!
91
-
92
- @obj.view_is_cached?(:aggregated).should eq(false)
93
-
94
- @obj.view_as_hash(:aggregated).should be_a(Hash)
95
-
96
- @obj.view_is_cached?(:aggregated).should eq(true)
97
-
98
- @obj.set(:demolisher, "smash")
99
- #
100
- # @obj.view_is_cached?(:aggregated).should eq(false)
101
-
102
-
103
- end
104
-
105
- it "invalidates up/down stream" do
106
-
107
- @obj.view_as_hash(:aggregated).should be_a(Hash)
108
-
109
- @obj.view_is_cached?(:aggregated).should eq(true)
110
-
111
- @baby.set(:demolisher, "smash")
112
-
113
- # sleep 1
114
- #
115
- # TypedObject.find(@obj.id).view_is_cached?(:aggregated).should eq(false)
116
-
117
- @obj.view_as_hash(:aggregated).should be_a(Hash)
118
-
119
- @obj.view_is_cached?(:aggregated).should eq(true)
120
-
121
- @dad.set(:demolisher, "smash")
122
-
123
- # sleep 1
124
- #
125
- # TypedObject.find(@obj.id).view_is_cached?(:aggregated).should eq(false)
126
-
127
- end
128
-
129
- end
130
- end
@@ -1,72 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- module ViewSpec
4
-
5
- TestValues = {
6
- date: Date.today,
7
- number: 27,
8
- int: 356192,
9
- float: 72.362517,
10
- bool: true
11
- }
12
-
13
- TestData = TestValues.inject({}){|acc,(k,v)| acc["a_#{k}".to_sym] = v; acc }
14
-
15
- class ViewedObject < RedisObject
16
-
17
- named_view :bare, :a_float, :a_bool
18
- named_view :aggregated, :a_float, :a_bool, :aggregate
19
- named_view :aggregated_only, :method => :aggregate
20
- named_view :proc, {:lambda => Proc.new {|o| o.get(:a_bool) } }, :aggregate
21
- named_view :hashy, {:hesher => :a_number }, :aggregate
22
-
23
- TestValues.keys.each do |type|
24
- send(type.to_sym,"a_#{type}".to_sym)
25
- end
26
-
27
- def aggregate
28
- a_number + a_int
29
- end
30
-
31
- end
32
-
33
- describe Seabright::Views do
34
-
35
- before do
36
- RedisObject.store.flushdb
37
- @obj = ViewedObject.create(TestData)
38
- end
39
-
40
- it "generates view" do
41
-
42
- @obj.view_as_hash(:bare).should be_a(Hash)
43
- @obj.view_as_json(:bare).should be_a(String)
44
-
45
- end
46
-
47
- it "generates mthod-only view" do
48
-
49
- @obj.view_as_hash(:aggregated_only).should be_a(Fixnum)
50
-
51
- end
52
-
53
- it "views methods properly" do
54
-
55
- @obj.view_as_hash(:aggregated)["aggregate"].should eq(TestData[:a_number] + TestData[:a_int])
56
-
57
- end
58
-
59
- it "executes procs within view" do
60
-
61
- @obj.view_as_json(:proc).should be_a(String)
62
-
63
- end
64
-
65
- it "generates hashes within view" do
66
-
67
- @obj.view_as_hash(:hashy).should be_a(Hash)
68
-
69
- end
70
-
71
- end
72
- end