redis-model-extension 0.3.8 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -1
- data/README.markdown +62 -27
- data/Rakefile +0 -6
- data/VERSION +1 -1
- data/lib/redis-model-extension/attributes.rb +38 -0
- data/lib/redis-model-extension/autoincrement_id.rb +38 -0
- data/lib/redis-model-extension/config.rb +67 -0
- data/lib/redis-model-extension/get_find.rb +146 -0
- data/lib/redis-model-extension/initialize.rb +179 -0
- data/lib/redis-model-extension/old_initialize.rb +103 -0
- data/lib/redis-model-extension/redis_key.rb +119 -0
- data/lib/redis-model-extension/save_destroy.rb +104 -0
- data/lib/redis-model-extension/store_keys.rb +34 -0
- data/lib/redis-model-extension/validation.rb +84 -0
- data/lib/redis-model-extension/value_transform.rb +51 -0
- data/lib/redis-model-extension.rb +52 -320
- data/lib/redis-model.rb +14 -0
- data/redis-model-extension.gemspec +40 -6
- data/test/helper.rb +17 -2
- data/test/models.rb +83 -0
- data/test/redis_model_old/test_redis_model_old_config.rb +218 -0
- data/test/redis_model_parts/test_attributes.rb +34 -0
- data/test/redis_model_parts/test_autoincrement_id.rb +86 -0
- data/test/redis_model_parts/test_dynamic_alias.rb +147 -0
- data/test/redis_model_parts/test_get_find.rb +111 -0
- data/test/redis_model_parts/test_hooks.rb +36 -0
- data/test/redis_model_parts/test_initialize.rb +46 -0
- data/test/redis_model_parts/test_redis_key.rb +119 -0
- data/test/redis_model_parts/test_save_destroy.rb +102 -0
- data/test/redis_model_parts/test_validation.rb +72 -0
- data/test/redis_model_parts/test_variable_types.rb +91 -0
- data/test/test_redis-model-extension.rb +38 -200
- data/test/test_string_to_bool.rb +30 -0
- metadata +90 -32
@@ -0,0 +1,218 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
class RedisModelOldConfigTest < Test::Unit::TestCase
|
4
|
+
context "Old RedisModel config" do
|
5
|
+
setup do
|
6
|
+
RedisModelExtension::Database.redis.flushdb
|
7
|
+
|
8
|
+
@args = {"integer" => 12345, :string => "foo", :symbol => :bar, :boolean => true, :array => [1,2,3], :hash => {"foo"=>"bar", "test" => 2}}
|
9
|
+
@test_model = TestOldRedisModel.new(@args)
|
10
|
+
@test_model_partial = TestOldRedisModel.new(:integer => 12345, :string => "foo")
|
11
|
+
end
|
12
|
+
|
13
|
+
should "have same configuration" do
|
14
|
+
assert_equal TestOldRedisModel.conf, TestOldRedisModel::REDIS_MODEL_CONF, "Same configuration"
|
15
|
+
end
|
16
|
+
|
17
|
+
context "define methods" do
|
18
|
+
should "be accessible" do
|
19
|
+
assert @test_model.respond_to?(:integer)
|
20
|
+
assert @test_model.respond_to?(:boolean)
|
21
|
+
assert @test_model.respond_to?(:string)
|
22
|
+
assert @test_model.respond_to?(:symbol)
|
23
|
+
end
|
24
|
+
|
25
|
+
should "get valid arguments" do
|
26
|
+
assert_equal @test_model.integer, 12345
|
27
|
+
assert_equal @test_model.string, "foo"
|
28
|
+
assert_equal @test_model.symbol, :bar
|
29
|
+
assert_equal @test_model.boolean, true
|
30
|
+
assert_equal @test_model.array, [1,2,3]
|
31
|
+
assert_equal @test_model.hash, {"foo"=>"bar", "test" => 2}
|
32
|
+
end
|
33
|
+
|
34
|
+
should "return valid exists?" do
|
35
|
+
assert_equal @test_model.integer?, true
|
36
|
+
assert_equal @test_model.string?, true
|
37
|
+
assert_equal @test_model.symbol?, true
|
38
|
+
assert_equal @test_model.boolean?, true
|
39
|
+
assert_equal @test_model.array?, true
|
40
|
+
assert_equal @test_model.hash?, true
|
41
|
+
|
42
|
+
assert_equal @test_model_partial.integer?, true
|
43
|
+
assert_equal @test_model_partial.string?, true
|
44
|
+
assert_equal @test_model_partial.symbol?, false
|
45
|
+
assert_equal @test_model_partial.boolean?, false
|
46
|
+
assert_equal @test_model_partial.hash?, false
|
47
|
+
assert_equal @test_model_partial.array?, false
|
48
|
+
end
|
49
|
+
|
50
|
+
should "be assign new values" do
|
51
|
+
@test_model.integer = 54321
|
52
|
+
@test_model.string = "bar"
|
53
|
+
@test_model.symbol = :foo
|
54
|
+
@test_model.boolean = false
|
55
|
+
@test_model.array = [4,5,6]
|
56
|
+
@test_model.hash = {"bar" => "foo"}
|
57
|
+
assert_equal @test_model.integer, 54321
|
58
|
+
assert_equal @test_model.string, "bar"
|
59
|
+
assert_equal @test_model.symbol, :foo
|
60
|
+
assert_equal @test_model.boolean, false
|
61
|
+
assert_equal @test_model.array, [4,5,6]
|
62
|
+
assert_equal @test_model.hash, {"bar" => "foo"}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "redis key" do
|
67
|
+
should "generate right key" do
|
68
|
+
assert_equal @test_model.redis_key, "#{TestOldRedisModel.to_s.underscore}:key:foo"
|
69
|
+
assert_equal TestOldRedisModel.generate_key(@args), "#{TestOldRedisModel.to_s.underscore}:key:foo"
|
70
|
+
end
|
71
|
+
should "generate right key alias" do
|
72
|
+
assert_equal @test_model.redis_alias_key(:token), "#{TestOldRedisModel.to_s.underscore}:alias:token:bar"
|
73
|
+
assert_equal TestOldRedisModel.generate_alias_key(:token, @args), "#{TestOldRedisModel.to_s.underscore}:alias:token:bar"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context "after initialize" do
|
78
|
+
should "clear input arguments" do
|
79
|
+
test_model = TestOldRedisModel.new(@args.merge({:foor => :bar, :not_in_fields => "foo"}))
|
80
|
+
assert_same_elements test_model.args, @args.symbolize_keys!
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "validation" do
|
85
|
+
|
86
|
+
should "return errors after valid?" do
|
87
|
+
test = TestOldRedisModel.new()
|
88
|
+
assert !test.valid?, "shouldn't be valid"
|
89
|
+
assert_equal test.errors.messages.size, 2, "should have 2 error (2 required field)"
|
90
|
+
end
|
91
|
+
|
92
|
+
should "not raise exeption on invalid initialize" do
|
93
|
+
assert_nothing_raised { TestOldRedisModel.new() }
|
94
|
+
end
|
95
|
+
|
96
|
+
should "return false on save" do
|
97
|
+
test_model = TestOldRedisModel.new()
|
98
|
+
assert !test_model.save, "return false on save"
|
99
|
+
assert test_model.errors.any?, "have any error"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context "updating" do
|
104
|
+
setup do
|
105
|
+
@new_args = {:integer => 123457, :string => "bar", :symbol => :foo, :boolean => false}
|
106
|
+
end
|
107
|
+
|
108
|
+
should "change attributes" do
|
109
|
+
@test_model.update @new_args
|
110
|
+
assert_equal @test_model.integer, @new_args[:integer]
|
111
|
+
assert_equal @test_model.string, @new_args[:string]
|
112
|
+
assert_equal @test_model.symbol, @new_args[:symbol]
|
113
|
+
assert_equal @test_model.boolean, @new_args[:boolean]
|
114
|
+
end
|
115
|
+
|
116
|
+
should "ignore unknown attributes and other normaly update" do
|
117
|
+
@test_model.update @new_args.merge(:unknown => "attribute")
|
118
|
+
assert_equal @test_model.integer, @new_args[:integer]
|
119
|
+
assert_equal @test_model.string, @new_args[:string]
|
120
|
+
assert_equal @test_model.symbol, @new_args[:symbol]
|
121
|
+
assert_equal @test_model.boolean, @new_args[:boolean]
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
|
126
|
+
context "saving" do
|
127
|
+
setup do
|
128
|
+
@test_model.save
|
129
|
+
end
|
130
|
+
|
131
|
+
should "be saved and then change of variable included in key should rename it in redis!" do
|
132
|
+
assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
|
133
|
+
@test_model.string = "change_of_strging"
|
134
|
+
@test_model.save
|
135
|
+
assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
|
136
|
+
end
|
137
|
+
|
138
|
+
should "have same elements after get" do
|
139
|
+
@getted_model = TestOldRedisModel.get(@args)
|
140
|
+
assert_equal @getted_model.integer, @test_model.integer
|
141
|
+
assert_equal @getted_model.string, @test_model.string
|
142
|
+
assert_equal @getted_model.symbol, @test_model.symbol
|
143
|
+
assert_equal @getted_model.boolean, @test_model.boolean
|
144
|
+
end
|
145
|
+
|
146
|
+
should "have same elements after get and to_arg" do
|
147
|
+
@getted_model = TestOldRedisModel.get(@args)
|
148
|
+
assert_same_elements @getted_model.to_arg.to_json.split(","), @args.to_json.split(",")
|
149
|
+
end
|
150
|
+
|
151
|
+
context "alias" do
|
152
|
+
should "be getted by alias" do
|
153
|
+
@getted_model = TestOldRedisModel.get_by_alias(:token ,@args)
|
154
|
+
assert_equal @getted_model.integer, @test_model.integer
|
155
|
+
assert_equal @getted_model.string, @test_model.string
|
156
|
+
assert_equal @getted_model.symbol, @test_model.symbol
|
157
|
+
assert_equal @getted_model.boolean, @test_model.boolean
|
158
|
+
end
|
159
|
+
|
160
|
+
should "be getted after change in alias" do
|
161
|
+
getted_model = TestOldRedisModel.get_by_alias(:token ,@args)
|
162
|
+
getted_model.symbol = "Test_token"
|
163
|
+
getted_model.save
|
164
|
+
assert_equal getted_model.integer, TestOldRedisModel.get_by_alias(:token ,:symbol => "Test_token").integer
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "without rejected nil values on save" do
|
170
|
+
setup do
|
171
|
+
class NilTestOldRedisModel
|
172
|
+
REDIS_MODEL_CONF = {
|
173
|
+
:fields => {
|
174
|
+
:integer => :to_i,
|
175
|
+
:string => :to_s,
|
176
|
+
},
|
177
|
+
:required => [:string],
|
178
|
+
:redis_key => [:string],
|
179
|
+
:redis_aliases => {},
|
180
|
+
:reject_nil_values => false
|
181
|
+
}
|
182
|
+
include RedisModel
|
183
|
+
initialize_redis_model_methods REDIS_MODEL_CONF
|
184
|
+
end
|
185
|
+
@args = {integer: 100, string: "test"}
|
186
|
+
@nil_test_model = NilTestOldRedisModel.new(@args)
|
187
|
+
end
|
188
|
+
|
189
|
+
should "save nil values" do
|
190
|
+
#on initialize
|
191
|
+
assert_equal @nil_test_model.integer, 100
|
192
|
+
assert_equal @nil_test_model.string, "test"
|
193
|
+
@nil_test_model.save
|
194
|
+
|
195
|
+
#after find
|
196
|
+
founded = NilTestOldRedisModel.get(@args)
|
197
|
+
assert_equal founded.integer, 100
|
198
|
+
assert_equal founded.string, "test"
|
199
|
+
|
200
|
+
#set integer to nil
|
201
|
+
founded.integer = nil
|
202
|
+
assert_equal founded.integer, nil
|
203
|
+
#perform save
|
204
|
+
founded.save
|
205
|
+
|
206
|
+
#after second find
|
207
|
+
founded = NilTestOldRedisModel.get(@args)
|
208
|
+
assert_equal founded.integer, nil
|
209
|
+
assert_equal founded.string, "test"
|
210
|
+
|
211
|
+
end
|
212
|
+
|
213
|
+
should "have same configuration" do
|
214
|
+
assert_equal NilTestOldRedisModel.conf, NilTestOldRedisModel::REDIS_MODEL_CONF, "Same configuration"
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
class AttributesTest < Test::Unit::TestCase
|
4
|
+
context "Attributes" do
|
5
|
+
setup do
|
6
|
+
@time = Time.now
|
7
|
+
@args = {
|
8
|
+
"integer" => 12345,
|
9
|
+
:string => "foo",
|
10
|
+
:symbol => :bar,
|
11
|
+
:boolean => true,
|
12
|
+
:array => [1,2,3],
|
13
|
+
:hash => {"foo"=>"bar", "test" => 2},
|
14
|
+
:time => @time,
|
15
|
+
:date => Date.today,
|
16
|
+
:float => 12.32,
|
17
|
+
}
|
18
|
+
@test_model = TestRedisModel.new(@args)
|
19
|
+
end
|
20
|
+
|
21
|
+
context "after initialize" do
|
22
|
+
should "clear input arguments" do
|
23
|
+
test_model = TestRedisModel.new(@args.merge({:foor => :bar, :not_in_fields => "foo"}))
|
24
|
+
assert_same_elements test_model.args, @args.symbolize_keys
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
should "should create valid to_json" do
|
29
|
+
#keys in json are in different order, just spliting by separator (comma) and then validating
|
30
|
+
assert_same_elements @test_model.to_json.split(","), @args.to_json.split(",")
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
class RedisModelAutoincrementTest < Test::Unit::TestCase
|
4
|
+
context "Autoincrement" do
|
5
|
+
|
6
|
+
setup do
|
7
|
+
RedisModelExtension::Database.redis.flushdb
|
8
|
+
@args = {
|
9
|
+
name: "Author",
|
10
|
+
email: "ondrej@bartas.cz"
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
context "without redis_key specified" do
|
15
|
+
|
16
|
+
should "have redis_key with id" do
|
17
|
+
assert_equal AutoincrementNotSet.redis_key_config, [:id]
|
18
|
+
assert AutoincrementNotSet.new.respond_to?(:id), "get method"
|
19
|
+
assert AutoincrementNotSet.new.respond_to?(:"id?"), "exists? method"
|
20
|
+
assert !AutoincrementNotSet.new.respond_to?(:"id="), "set method"
|
21
|
+
end
|
22
|
+
|
23
|
+
should "be valid?" do
|
24
|
+
assert AutoincrementNotSet.new(@args).valid?
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
context "with redis_key specified" do
|
30
|
+
|
31
|
+
should "have redis_key with id" do
|
32
|
+
assert_equal AutoincrementSetRedisKey.redis_key_config, [:id]
|
33
|
+
assert AutoincrementSetRedisKey.new.respond_to?(:id), "get method"
|
34
|
+
assert AutoincrementSetRedisKey.new.respond_to?(:"id?"), "exists? method"
|
35
|
+
assert !AutoincrementSetRedisKey.new.respond_to?(:"id="), "set method"
|
36
|
+
end
|
37
|
+
|
38
|
+
should "be valid?" do
|
39
|
+
assert AutoincrementSetRedisKey.new(@args).valid?
|
40
|
+
end
|
41
|
+
|
42
|
+
should "after save have id" do
|
43
|
+
saved_instance = AutoincrementSetRedisKey.new(@args)
|
44
|
+
saved_instance.save
|
45
|
+
assert_equal saved_instance.id, 1, "Should be first id 1"
|
46
|
+
end
|
47
|
+
|
48
|
+
should "be incremented" do
|
49
|
+
assert_equal AutoincrementSetRedisKey.create(@args).id, 1, "First should have id 1"
|
50
|
+
assert_equal AutoincrementSetRedisKey.create(@args).id, 2, "First should have id 2"
|
51
|
+
assert_equal AutoincrementSetRedisKey.create(@args).id, 3, "First should have id 3"
|
52
|
+
assert_equal AutoincrementSetRedisKey.create(@args).id, 4, "First should have id 4"
|
53
|
+
end
|
54
|
+
|
55
|
+
should "be getted by directly id" do
|
56
|
+
saved_instance = AutoincrementSetRedisKey.new(@args)
|
57
|
+
saved_instance.save
|
58
|
+
assert getted_instance = AutoincrementSetRedisKey.get(saved_instance.id), "should be getted by id: #{saved_instance.id}"
|
59
|
+
assert_same_elements getted_instance.to_arg.to_json.split(","), saved_instance.to_arg.to_json.split(",")
|
60
|
+
end
|
61
|
+
|
62
|
+
should "be founded by directly id" do
|
63
|
+
saved_instance = AutoincrementSetRedisKey.new(@args)
|
64
|
+
saved_instance.save
|
65
|
+
assert getted_instances = AutoincrementSetRedisKey.find(saved_instance.id), "should be getted by id: #{saved_instance.id}"
|
66
|
+
assert_equal getted_instances.size, 1, "should be array with one element"
|
67
|
+
getted_instance = getted_instances.first
|
68
|
+
assert_same_elements getted_instance.to_arg.to_json.split(","), saved_instance.to_arg.to_json.split(",")
|
69
|
+
end
|
70
|
+
|
71
|
+
should "not enable to set id unless id exists" do
|
72
|
+
assert_raises ArgumentError do
|
73
|
+
AutoincrementSetRedisKey.new(@args.merge(:id => 10))
|
74
|
+
end
|
75
|
+
saved_instance = AutoincrementSetRedisKey.new(@args)
|
76
|
+
saved_instance.save
|
77
|
+
assert_nothing_raised do
|
78
|
+
AutoincrementSetRedisKey.new(@args.merge(:id => saved_instance.id))
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
class DynamicAliasTest < Test::Unit::TestCase
|
4
|
+
context "Dynamic alias" do
|
5
|
+
setup do
|
6
|
+
RedisModelExtension::Database.redis.flushdb
|
7
|
+
@args = {
|
8
|
+
:name => "Foo",
|
9
|
+
:items => {
|
10
|
+
:bar => "test",
|
11
|
+
:foobar => "test2",
|
12
|
+
},
|
13
|
+
:items_order => [:foobar, :bar],
|
14
|
+
}
|
15
|
+
@dynamic_alias = DynamicAlias.new(@args)
|
16
|
+
end
|
17
|
+
|
18
|
+
context "class" do
|
19
|
+
context "redis key" do
|
20
|
+
|
21
|
+
should "be merged alias key + custom key" do
|
22
|
+
assert_equal DynamicAlias.generate_alias_key(:items_with_name, @args), "dynamic_alias:alias:items_with_name:Foo:test2:test"
|
23
|
+
end
|
24
|
+
|
25
|
+
should "validate redis_alias_key" do
|
26
|
+
assert DynamicAlias.valid_alias_key?(:items_with_name, @args), "full valid args"
|
27
|
+
assert !DynamicAlias.valid_alias_key?(:items_with_name, :name => "Test"), "only main fields"
|
28
|
+
assert !DynamicAlias.valid_alias_key?(:items_with_name, :items_order => [:foobar]), "only fields order"
|
29
|
+
assert !DynamicAlias.valid_alias_key?(:items_with_name, :items_order => [:foobar], :items => {foobar: "test"}), "only fields order & items"
|
30
|
+
assert !DynamicAlias.valid_alias_key?(:items_with_name), "no args"
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "instance" do
|
37
|
+
context "redis key" do
|
38
|
+
|
39
|
+
should "return valid key" do
|
40
|
+
assert_equal DynamicAlias.new(@args).redis_alias_key(:items_with_name), "dynamic_alias:alias:items_with_name:Foo:test2:test"
|
41
|
+
end
|
42
|
+
|
43
|
+
should "validate key" do
|
44
|
+
dyn_alias = DynamicAlias.new(@args)
|
45
|
+
assert_equal dyn_alias.valid_alias_key?(:items_with_name), true
|
46
|
+
dyn_alias.items_order = nil
|
47
|
+
assert_equal dyn_alias.valid_alias_key?(:items_with_name), false
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "saving & destroy" do
|
54
|
+
setup do
|
55
|
+
@dynamic_alias.save
|
56
|
+
@redis_key = @dynamic_alias.redis_key
|
57
|
+
@redis_dynamic_alias_key = @dynamic_alias.redis_alias_key(:items_with_name)
|
58
|
+
end
|
59
|
+
|
60
|
+
should "be saved and then change of variable included in key should rename it in redis!" do
|
61
|
+
before = RedisModelExtension::Database.redis.keys("*").size
|
62
|
+
assert @dynamic_alias.alias_exists?(:items_with_name), "Dynamic alias should exists"
|
63
|
+
@dynamic_alias.name = "change_of_string"
|
64
|
+
@dynamic_alias.save
|
65
|
+
assert_equal RedisModelExtension::Database.redis.keys("*").size, before, "after update there should be same number of keys" #including key and alias
|
66
|
+
end
|
67
|
+
|
68
|
+
should "remove key and aliases" do
|
69
|
+
before = RedisModelExtension::Database.redis.keys("*").size
|
70
|
+
@dynamic_alias.destroy!
|
71
|
+
assert_equal RedisModelExtension::Database.redis.keys("*").size, before-2 #including key and alias
|
72
|
+
end
|
73
|
+
|
74
|
+
should "destroy!" do
|
75
|
+
pp RedisModelExtension::Database.redis.keys("*")
|
76
|
+
@dynamic_alias.destroy!
|
77
|
+
assert_equal @dynamic_alias.exists?, false, "Should not exists"
|
78
|
+
assert_equal DynamicAlias.exists?(@args.merge(:id => @dynamic_alias.id)), false, "Should not exist by class method"
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
context "find & get" do
|
85
|
+
|
86
|
+
setup do
|
87
|
+
@dynamic_alias.save
|
88
|
+
end
|
89
|
+
|
90
|
+
should "be getted by dynamic alias" do
|
91
|
+
@getted_model = DynamicAlias.get_by_alias(:items_with_name, @args)
|
92
|
+
assert_not_nil @getted_model, "Should return model"
|
93
|
+
assert_equal @getted_model.name, @dynamic_alias.name
|
94
|
+
assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
|
95
|
+
end
|
96
|
+
|
97
|
+
should "be getted by get_by_name_of_alias" do
|
98
|
+
@getted_model = DynamicAlias.get_by_items_with_name(@args)
|
99
|
+
assert_not_nil @getted_model, "Should return model"
|
100
|
+
assert_equal @getted_model.name, @dynamic_alias.name
|
101
|
+
assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
|
102
|
+
end
|
103
|
+
|
104
|
+
should "be find by dynamic alias" do
|
105
|
+
@getted_models = DynamicAlias.find_by_alias(:items_with_name, :items => {:bar => "test"})
|
106
|
+
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
107
|
+
|
108
|
+
@getted_models = DynamicAlias.find_by_alias(:items_with_name, @args)
|
109
|
+
assert_equal @getted_models.size, 1, "Should be find by get by alias full args"
|
110
|
+
|
111
|
+
@getted_model = @getted_models.first
|
112
|
+
assert_equal @getted_model.name, @dynamic_alias.name
|
113
|
+
assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
|
114
|
+
end
|
115
|
+
|
116
|
+
should "be found by find_by_name_of_alias" do
|
117
|
+
@getted_models = DynamicAlias.find_by_items_with_name(:items => {:bar => "test"})
|
118
|
+
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
119
|
+
|
120
|
+
@getted_models = DynamicAlias.find_by_items_with_name(@args)
|
121
|
+
assert_equal @getted_models.size, 1, "Should be find by get by alias full args"
|
122
|
+
|
123
|
+
@getted_model = @getted_models.first
|
124
|
+
assert_equal @getted_model.name, @dynamic_alias.name
|
125
|
+
assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
|
126
|
+
end
|
127
|
+
|
128
|
+
should "be find all by dynamic alias" do
|
129
|
+
@getted_models = DynamicAlias.find_by_alias(:items_with_name ,{})
|
130
|
+
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
131
|
+
@getted_model = @getted_models.first
|
132
|
+
assert_equal @getted_model.name, @dynamic_alias.name
|
133
|
+
assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
|
134
|
+
end
|
135
|
+
|
136
|
+
should "be getted after change in alias" do
|
137
|
+
@getted_model = DynamicAlias.get_by_alias(:items_with_name ,@args)
|
138
|
+
assert_not_nil @getted_model, "Should return model"
|
139
|
+
@getted_model.items[:bar] = "Test_bar"
|
140
|
+
@getted_model.save
|
141
|
+
|
142
|
+
assert_equal DynamicAlias.get_by_alias(:items_with_name ,@getted_model.to_arg).name, @getted_model.name
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
class GetFindTest < Test::Unit::TestCase
|
4
|
+
context "Get & Find" do
|
5
|
+
setup do
|
6
|
+
RedisModelExtension::Database.redis.flushdb
|
7
|
+
@time = Time.now
|
8
|
+
@args = {
|
9
|
+
"integer" => 12345,
|
10
|
+
:string => "foo",
|
11
|
+
:symbol => :bar,
|
12
|
+
:boolean => true,
|
13
|
+
:array => [1,2,3],
|
14
|
+
:hash => {"foo"=>"bar", "test" => 2},
|
15
|
+
:time => @time,
|
16
|
+
:date => Date.today,
|
17
|
+
:float => 12.32
|
18
|
+
}
|
19
|
+
@test_model = TestRedisModel.new(@args)
|
20
|
+
@test_model.save
|
21
|
+
end
|
22
|
+
|
23
|
+
context "main object" do
|
24
|
+
|
25
|
+
should "be getted by redis_key" do
|
26
|
+
@getted_model = TestRedisModel.get_by_redis_key(@test_model.redis_key)
|
27
|
+
assert_equal @getted_model.integer, @test_model.integer
|
28
|
+
assert_equal @getted_model.string, @test_model.string
|
29
|
+
assert_equal @getted_model.symbol, @test_model.symbol
|
30
|
+
assert_equal @getted_model.boolean, @test_model.boolean
|
31
|
+
end
|
32
|
+
|
33
|
+
should "return nil on triyng to get model by redis key without all valid variables (or nonexisting)" do
|
34
|
+
@test_model.string = nil
|
35
|
+
assert_nil TestRedisModel.get_by_redis_key(@test_model.redis_key)
|
36
|
+
end
|
37
|
+
|
38
|
+
should "be find by all" do
|
39
|
+
@getted_models = TestRedisModel.all
|
40
|
+
assert_equal @getted_models.size, 1, "Should be only one"
|
41
|
+
end
|
42
|
+
|
43
|
+
should "be find by args" do
|
44
|
+
@getted_models = TestRedisModel.find(:string => @args[:string])
|
45
|
+
assert_equal @getted_models.size, 1, "Should be only one"
|
46
|
+
end
|
47
|
+
|
48
|
+
should "be find by args zero" do
|
49
|
+
@getted_models = TestRedisModel.find(:string => "nonexisting string")
|
50
|
+
assert_equal @getted_models, [], "Should be empty array"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
context "alias" do
|
56
|
+
should "exists" do
|
57
|
+
assert @test_model.alias_exists?(:token)
|
58
|
+
end
|
59
|
+
|
60
|
+
should "be getted by alias" do
|
61
|
+
@getted_model = TestRedisModel.get_by_alias(:token, @args)
|
62
|
+
assert_equal @getted_model.integer, @test_model.integer
|
63
|
+
assert_equal @getted_model.string, @test_model.string
|
64
|
+
assert_equal @getted_model.symbol, @test_model.symbol
|
65
|
+
assert_equal @getted_model.boolean, @test_model.boolean
|
66
|
+
end
|
67
|
+
|
68
|
+
should "be find by alias" do
|
69
|
+
@getted_models = TestRedisModel.find_by_alias(:token, :symbol => :bar)
|
70
|
+
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
71
|
+
@getted_model = @getted_models.first
|
72
|
+
assert_equal @getted_model.integer, @test_model.integer
|
73
|
+
assert_equal @getted_model.string, @test_model.string
|
74
|
+
assert_equal @getted_model.symbol, @test_model.symbol
|
75
|
+
assert_equal @getted_model.boolean, @test_model.boolean
|
76
|
+
end
|
77
|
+
|
78
|
+
should "be find by find_by_alias_name" do
|
79
|
+
@getted_models = TestRedisModel.find_by_token(:symbol => :bar)
|
80
|
+
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
81
|
+
@getted_model = @getted_models.first
|
82
|
+
assert_equal @getted_model.integer, @test_model.integer
|
83
|
+
end
|
84
|
+
|
85
|
+
should "be find all by alias" do
|
86
|
+
@getted_models = TestRedisModel.find_by_alias(:token ,{})
|
87
|
+
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
88
|
+
@getted_model = @getted_models.first
|
89
|
+
assert_equal @getted_model.integer, @test_model.integer
|
90
|
+
assert_equal @getted_model.string, @test_model.string
|
91
|
+
assert_equal @getted_model.symbol, @test_model.symbol
|
92
|
+
assert_equal @getted_model.boolean, @test_model.boolean
|
93
|
+
end
|
94
|
+
|
95
|
+
should "be find all by find_by_name_of_alais" do
|
96
|
+
@getted_models = TestRedisModel.find_by_token({})
|
97
|
+
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
98
|
+
@getted_model = @getted_models.first
|
99
|
+
assert_equal @getted_model.integer, @test_model.integer
|
100
|
+
end
|
101
|
+
|
102
|
+
should "be getted after change in alias" do
|
103
|
+
getted_model = TestRedisModel.get_by_alias(:token ,@args)
|
104
|
+
getted_model.symbol = "Test_token"
|
105
|
+
getted_model.save
|
106
|
+
assert_equal getted_model.integer, TestRedisModel.get_by_alias(:token ,:symbol => "Test_token").integer
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
class HooksTest < Test::Unit::TestCase
|
4
|
+
context "Hooks" do
|
5
|
+
|
6
|
+
should "fire before_create hooks" do
|
7
|
+
WithCallbacks.any_instance.expects(:before_create_method)
|
8
|
+
|
9
|
+
WithCallbacks.create name: 'Callbacks'
|
10
|
+
end
|
11
|
+
|
12
|
+
should "fire both before_create and before_save hooks if defined" do
|
13
|
+
WithCallbacks.any_instance.expects(:before_create_method)
|
14
|
+
WithCallbacks.any_instance.expects(:before_save_method)
|
15
|
+
WithCallbacks.any_instance.expects(:after_save_method)
|
16
|
+
|
17
|
+
WithCallbacks.create name: 'Callbacks'
|
18
|
+
end
|
19
|
+
|
20
|
+
should "fire before_save hooks" do
|
21
|
+
article = WithCallbacks.new name: 'Callbacks'
|
22
|
+
article.expects(:before_save_method)
|
23
|
+
article.expects(:after_save_method)
|
24
|
+
article.expects(:before_create_method)
|
25
|
+
article.save
|
26
|
+
end
|
27
|
+
|
28
|
+
should "fire before_destroy hooks" do
|
29
|
+
article = WithCallbacks.new name: 'Callbacks'
|
30
|
+
article.save
|
31
|
+
article.destroy
|
32
|
+
|
33
|
+
assert article.instance_variable_get(:@destroyed_flag), "should have destroyed flag"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
class VariableTypesTest < Test::Unit::TestCase
|
4
|
+
context "Definition & Types of variables" do
|
5
|
+
setup do
|
6
|
+
RedisModelExtension::Database.redis.flushdb
|
7
|
+
|
8
|
+
@test_model = TestRedisModel.new()
|
9
|
+
end
|
10
|
+
|
11
|
+
should "be have accessible fields" do
|
12
|
+
assert @test_model.respond_to?(:integer)
|
13
|
+
assert @test_model.respond_to?(:string)
|
14
|
+
assert @test_model.respond_to?(:boolean)
|
15
|
+
assert @test_model.respond_to?(:array)
|
16
|
+
assert @test_model.respond_to?(:hash)
|
17
|
+
assert @test_model.respond_to?(:time)
|
18
|
+
assert @test_model.respond_to?(:date)
|
19
|
+
assert @test_model.respond_to?(:float)
|
20
|
+
end
|
21
|
+
|
22
|
+
should "be have setable fields" do
|
23
|
+
assert @test_model.respond_to?(:"integer=")
|
24
|
+
assert @test_model.respond_to?(:"string=")
|
25
|
+
assert @test_model.respond_to?(:"boolean=")
|
26
|
+
assert @test_model.respond_to?(:"array=")
|
27
|
+
assert @test_model.respond_to?(:"hash=")
|
28
|
+
assert @test_model.respond_to?(:"time=")
|
29
|
+
assert @test_model.respond_to?(:"date=")
|
30
|
+
assert @test_model.respond_to?(:"float=")
|
31
|
+
end
|
32
|
+
|
33
|
+
should "be have field exist?" do
|
34
|
+
assert @test_model.respond_to?(:"integer?")
|
35
|
+
assert @test_model.respond_to?(:"string?")
|
36
|
+
assert @test_model.respond_to?(:"boolean?")
|
37
|
+
assert @test_model.respond_to?(:"array?")
|
38
|
+
assert @test_model.respond_to?(:"hash?")
|
39
|
+
assert @test_model.respond_to?(:"time?")
|
40
|
+
assert @test_model.respond_to?(:"date?")
|
41
|
+
assert @test_model.respond_to?(:"float?")
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|