redis-model-extension 0.3.8 → 0.4.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.
- 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
|
+
|