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.
Files changed (34) hide show
  1. data/Gemfile +4 -1
  2. data/README.markdown +62 -27
  3. data/Rakefile +0 -6
  4. data/VERSION +1 -1
  5. data/lib/redis-model-extension/attributes.rb +38 -0
  6. data/lib/redis-model-extension/autoincrement_id.rb +38 -0
  7. data/lib/redis-model-extension/config.rb +67 -0
  8. data/lib/redis-model-extension/get_find.rb +146 -0
  9. data/lib/redis-model-extension/initialize.rb +179 -0
  10. data/lib/redis-model-extension/old_initialize.rb +103 -0
  11. data/lib/redis-model-extension/redis_key.rb +119 -0
  12. data/lib/redis-model-extension/save_destroy.rb +104 -0
  13. data/lib/redis-model-extension/store_keys.rb +34 -0
  14. data/lib/redis-model-extension/validation.rb +84 -0
  15. data/lib/redis-model-extension/value_transform.rb +51 -0
  16. data/lib/redis-model-extension.rb +52 -320
  17. data/lib/redis-model.rb +14 -0
  18. data/redis-model-extension.gemspec +40 -6
  19. data/test/helper.rb +17 -2
  20. data/test/models.rb +83 -0
  21. data/test/redis_model_old/test_redis_model_old_config.rb +218 -0
  22. data/test/redis_model_parts/test_attributes.rb +34 -0
  23. data/test/redis_model_parts/test_autoincrement_id.rb +86 -0
  24. data/test/redis_model_parts/test_dynamic_alias.rb +147 -0
  25. data/test/redis_model_parts/test_get_find.rb +111 -0
  26. data/test/redis_model_parts/test_hooks.rb +36 -0
  27. data/test/redis_model_parts/test_initialize.rb +46 -0
  28. data/test/redis_model_parts/test_redis_key.rb +119 -0
  29. data/test/redis_model_parts/test_save_destroy.rb +102 -0
  30. data/test/redis_model_parts/test_validation.rb +72 -0
  31. data/test/redis_model_parts/test_variable_types.rb +91 -0
  32. data/test/test_redis-model-extension.rb +38 -200
  33. data/test/test_string_to_bool.rb +30 -0
  34. metadata +90 -32
@@ -0,0 +1,119 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class RedisKeyTest < Test::Unit::TestCase
4
+ context "Redis key" 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
+ }
18
+ @test_model = TestRedisModel.new(@args)
19
+ end
20
+
21
+ should "generate right search key" do
22
+ @test_model.string = nil
23
+ assert_equal @test_model.redis_key, "#{TestRedisModel.to_s.underscore}:key:*"
24
+ assert_equal TestRedisModel.generate_key(@args.merge({:string => nil})), "#{TestRedisModel.to_s.underscore}:key:*"
25
+ end
26
+
27
+
28
+ should "generate right key" do
29
+ assert_equal @test_model.redis_key, "#{TestRedisModel.to_s.underscore}:key:foo"
30
+ assert_equal TestRedisModel.generate_key(@args), "#{TestRedisModel.to_s.underscore}:key:foo"
31
+ end
32
+
33
+ should "generate right key alias" do
34
+ assert_equal @test_model.redis_alias_key(:token), "#{TestRedisModel.to_s.underscore}:alias:token:bar"
35
+ assert_equal TestRedisModel.generate_alias_key(:token, @args), "#{TestRedisModel.to_s.underscore}:alias:token:bar"
36
+ end
37
+
38
+ context "invalid setting" do
39
+ should "raise ArgumentError on nonexisting field" do
40
+ assert_raises ArgumentError do
41
+ class RedisKeyNonExistingKeyRedisModel
42
+ include RedisModelExtension
43
+ redis_field :string, :string
44
+ redis_key :unknown
45
+ end
46
+ end
47
+ end
48
+
49
+ should "raise ArgumentError on using Array as redis key" do
50
+ assert_raises ArgumentError do
51
+ class RedisKeyNonExistingKeyRedisModel
52
+ include RedisModelExtension
53
+ redis_field :array, :array
54
+ redis_key :array
55
+ end
56
+ end
57
+ end
58
+
59
+ should "raise ArgumentError on using Hash as redis key" do
60
+ assert_raises ArgumentError do
61
+ class RedisKeyNonExistingKeyRedisModel
62
+ include RedisModelExtension
63
+ redis_field :array, :array
64
+ redis_key :array
65
+ end
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ context "normalization" do
72
+ should "downcase" do
73
+ class DowncaseRedisModel
74
+ include RedisModelExtension
75
+ redis_field :string, :string
76
+ redis_key :string
77
+ redis_key_normalize :downcase
78
+ end
79
+ model = DowncaseRedisModel.new(:string => "FoO")
80
+ assert_equal model.redis_key, "#{DowncaseRedisModel.to_s.underscore}:key:foo"
81
+ end
82
+
83
+ should "transliterate" do
84
+ class TransliterateRedisModel
85
+ include RedisModelExtension
86
+ redis_field :string, :string
87
+ redis_key :string
88
+ redis_key_normalize :transliterate
89
+ end
90
+ model = TransliterateRedisModel.new(:string => "FoOšČ")
91
+ assert_equal model.redis_key, "#{TransliterateRedisModel.to_s.underscore}:key:FoOsC"
92
+ end
93
+
94
+ should "downcase & transliterate" do
95
+ class DowncaseTransliterateRedisModel
96
+ include RedisModelExtension
97
+ redis_field :string, :string
98
+ redis_key :string
99
+ redis_key_normalize :transliterate
100
+ redis_key_normalize :downcase
101
+ end
102
+ model = DowncaseTransliterateRedisModel.new(:string => "FoOšČ")
103
+ assert_equal model.redis_key, "#{DowncaseTransliterateRedisModel.to_s.underscore}:key:foosc"
104
+ end
105
+
106
+ should "downcase & transliterate in one setting" do
107
+ class DowncaseTransliterateOneRedisModel
108
+ include RedisModelExtension
109
+ redis_field :string, :string
110
+ redis_key :string
111
+ redis_key_normalize :transliterate, :downcase
112
+ end
113
+ model = DowncaseTransliterateOneRedisModel.new(:string => "FoOšČ")
114
+ assert_equal model.redis_key, "#{DowncaseTransliterateOneRedisModel.to_s.underscore}:key:foosc"
115
+ end
116
+
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,102 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class SaveDestroyTest < Test::Unit::TestCase
4
+ context "Save, Update & Destroy" 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.54,
18
+ }
19
+ @test_model = TestRedisModel.new(@args)
20
+ end
21
+
22
+ context "create" do
23
+ should "be saved" do
24
+ assert test_model = TestRedisModel.create(@args), "should be saved"
25
+ assert !test_model.errors.any?, "no erros"
26
+ end
27
+ end
28
+
29
+ context "saving" do
30
+ setup do
31
+ @test_model.save
32
+ end
33
+
34
+ should "be saved and then change of variable included in key should rename it in redis!" do
35
+ assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
36
+ @test_model.symbol = :changed_symbol
37
+ @test_model.string = "change_of_string"
38
+ @test_model.save
39
+ assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
40
+ end
41
+
42
+ should "have same elements after get" do
43
+ @getted_model = TestRedisModel.get(@args)
44
+ assert_equal @getted_model.integer, @test_model.integer
45
+ assert_equal @getted_model.string, @test_model.string
46
+ assert_equal @getted_model.symbol, @test_model.symbol
47
+ assert_equal @getted_model.boolean, @test_model.boolean
48
+ end
49
+
50
+ should "have same elements after get and to_arg" do
51
+ @getted_model = TestRedisModel.get(@args)
52
+ assert_same_elements @getted_model.to_arg.to_json.split(","), @args.to_json.split(",")
53
+ end
54
+
55
+ end
56
+
57
+ context "updating" do
58
+ setup do
59
+ @new_args = {:integer => 123457, :string => "bar", :symbol => :foo, :boolean => false}
60
+ end
61
+
62
+ should "change attributes" do
63
+ @test_model.update @new_args
64
+ assert_equal @test_model.integer, @new_args[:integer]
65
+ assert_equal @test_model.string, @new_args[:string]
66
+ assert_equal @test_model.symbol, @new_args[:symbol]
67
+ assert_equal @test_model.boolean, @new_args[:boolean]
68
+ end
69
+
70
+ should "ignore unknown attributes and other normaly update" do
71
+ @test_model.update @new_args.merge(:unknown => "attribute")
72
+ assert_equal @test_model.integer, @new_args[:integer]
73
+ assert_equal @test_model.string, @new_args[:string]
74
+ assert_equal @test_model.symbol, @new_args[:symbol]
75
+ assert_equal @test_model.boolean, @new_args[:boolean]
76
+ end
77
+
78
+ end
79
+
80
+ context "destroy" do
81
+
82
+ setup do
83
+ @test_model.save
84
+ @redis_key = @test_model.redis_key
85
+ end
86
+
87
+ should "remove key and aliases" do
88
+ before = RedisModelExtension::Database.redis.keys("*").size
89
+ @test_model.destroy!
90
+ assert_equal RedisModelExtension::Database.redis.keys("*").size, before-2 #including key and alias
91
+ end
92
+
93
+ should "not be found" do
94
+ assert test = TestRedisModel.get(@args)
95
+ test.destroy!
96
+ assert_equal TestRedisModel.exists?(@args), false, "Should not exists"
97
+ end
98
+
99
+ end
100
+
101
+ end
102
+ end
@@ -0,0 +1,72 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class ValidationTest < Test::Unit::TestCase
4
+ context "Validation" 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
+ }
18
+ @test_model = TestRedisModel.new(@args)
19
+ end
20
+
21
+ context "class" do
22
+
23
+ should "validate redis_key" do
24
+ assert TestRedisModel.valid_key?(:string => "test")
25
+ assert !TestRedisModel.valid_key?(:string => nil)
26
+ assert !TestRedisModel.valid_key?()
27
+ end
28
+
29
+ should "validate redis_alias_key" do
30
+ assert TestRedisModel.valid_alias_key?(:token, :symbol => :test)
31
+ assert !TestRedisModel.valid_alias_key?(:token, :symbol => nil)
32
+ assert !TestRedisModel.valid_alias_key?(:token)
33
+ end
34
+
35
+ end
36
+
37
+ context "instance" do
38
+
39
+ should "validate alias key" do
40
+ assert @test_model.valid_alias_key?(:token)
41
+ end
42
+
43
+ should "validate key" do
44
+ assert @test_model.valid_key?
45
+ end
46
+
47
+ should "return errors after valid?" do
48
+ test = TestRedisModel.new()
49
+ assert !test.valid?, "shouldn't be valid"
50
+ assert_equal test.errors.messages.size, 2, "should have 2 errors (2 required fields)"
51
+ assert_equal test.error.messages.size, 2, "error should be asliased to errors"
52
+ end
53
+
54
+ should "return errors and be aliased to error" do
55
+ test = TestRedisModel.new()
56
+ assert !test.valid?, "shouldn't be valid"
57
+ assert_equal test.error, test.errors
58
+ end
59
+
60
+ should "not raise exeption on invalid initialize" do
61
+ assert_nothing_raised { TestRedisModel.new() }
62
+ end
63
+
64
+ should "return false on save" do
65
+ test_model = TestRedisModel.new()
66
+ assert !test_model.save, "return false on save"
67
+ assert test_model.errors.any?, "have any error"
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,91 @@
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
+ @time = Time.now
9
+ @args = {
10
+ "integer" => 12345,
11
+ :string => "foo",
12
+ :symbol => :bar,
13
+ :boolean => true,
14
+ :array => [1,2,3],
15
+ :hash => {"foo"=>"bar", "test" => 2},
16
+ :time => @time,
17
+ :date => Date.today,
18
+ :float => 12.43,
19
+ }
20
+ @test_model = TestRedisModel.new(@args)
21
+ @test_model_partial = TestRedisModel.new(:integer => 12345, :string => "foo")
22
+ end
23
+
24
+ context "on invalid type" do
25
+ should "return not modified value" do
26
+ assert_equal @test_model.value_transform("Test", :unknown_type), "Test", "Value transform"
27
+ assert_equal @test_model.value_parse("Test", :unknown_type), "Test", "Value parse"
28
+ assert_equal @test_model.value_to_redis(:unknown_field_name, "Test"), "Test", "Value to redis"
29
+ end
30
+ end
31
+
32
+ should "get valid arguments" do
33
+ assert_equal @test_model.integer, 12345
34
+ assert_equal @test_model.string, "foo"
35
+ assert_equal @test_model.symbol, :bar
36
+ assert_equal @test_model.boolean, true
37
+ assert_equal @test_model.array, [1,2,3]
38
+ assert_equal @test_model.hash, {"foo"=>"bar", "test" => 2}
39
+ assert_equal @test_model.time, @time
40
+ assert_equal @test_model.date, Date.today
41
+ assert_equal @test_model.float, 12.43
42
+ end
43
+
44
+ should "return default value when value is nil" do
45
+ assert_equal @test_model_partial.symbol, :default
46
+ end
47
+
48
+ should "return valid exists?" do
49
+ assert_equal @test_model.integer?, true
50
+ assert_equal @test_model.string?, true
51
+ assert_equal @test_model.symbol?, true
52
+ assert_equal @test_model.boolean?, true
53
+ assert_equal @test_model.array?, true
54
+ assert_equal @test_model.hash?, true
55
+ assert_equal @test_model.time?, true
56
+ assert_equal @test_model.date?, true
57
+ assert_equal @test_model.float?, true
58
+
59
+ assert_equal @test_model_partial.integer?, true
60
+ assert_equal @test_model_partial.string?, true
61
+ assert_equal @test_model_partial.symbol?, true, "should be set by default value"
62
+ assert_equal @test_model_partial.boolean?, false
63
+ assert_equal @test_model_partial.hash?, false
64
+ assert_equal @test_model_partial.array?, false
65
+ assert_equal @test_model_partial.time?, false
66
+ assert_equal @test_model_partial.date?, false
67
+ assert_equal @test_model_partial.float?, false
68
+ end
69
+
70
+ should "be assign new values" do
71
+ @test_model.integer = 54321
72
+ @test_model.string = "bar"
73
+ @test_model.symbol = :foo
74
+ @test_model.boolean = false
75
+ @test_model.array = [4,5,6]
76
+ @test_model.hash = {"bar" => "foo"}
77
+ @test_model.time = @time-100
78
+ @test_model.date = Date.today-10
79
+ @test_model.float = 25.43
80
+ assert_equal @test_model.integer, 54321
81
+ assert_equal @test_model.string, "bar"
82
+ assert_equal @test_model.symbol, :foo
83
+ assert_equal @test_model.boolean, false
84
+ assert_equal @test_model.array, [4,5,6]
85
+ assert_equal @test_model.hash, {"bar" => "foo"}
86
+ assert_equal @test_model.time, @time-100
87
+ assert_equal @test_model.date, Date.today-10
88
+ assert_equal @test_model.float, 25.43
89
+ end
90
+ end
91
+ end
@@ -1,186 +1,11 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'helper'
3
3
  class RedisModelTest < Test::Unit::TestCase
4
- context "RedisModel" do
5
- setup do
6
- RedisModelExtension::Database.redis.flushdb
7
-
8
- class TestRedisModel
9
- REDIS_MODEL_CONF = {
10
- :fields => {
11
- :integer => :to_i,
12
- :boolean => :to_bool,
13
- :string => :to_s,
14
- :symbol => :to_sym,
15
- },
16
- :required => [:integer, :string],
17
- :redis_key => [:string],
18
- :redis_aliases => {
19
- :token => [:symbol]
20
- }
21
- }
22
- include RedisModel
23
- initialize_redis_model_methods REDIS_MODEL_CONF
24
- end
25
- @args = {:integer => 12345, :string => "foo", :symbol => :bar, :boolean => true}
26
- @test_model = TestRedisModel.new(@args)
27
- @test_model_partial = TestRedisModel.new(:integer => 12345, :string => "foo")
28
- end
29
-
30
- context "define methods" do
31
- should "be accessible" do
32
- assert @test_model.respond_to?(:integer)
33
- assert @test_model.respond_to?(:boolean)
34
- assert @test_model.respond_to?(:string)
35
- assert @test_model.respond_to?(:symbol)
36
- end
37
-
38
- should "get valid arguments" do
39
- assert_equal @test_model.integer, 12345
40
- assert_equal @test_model.string, "foo"
41
- assert_equal @test_model.symbol, :bar
42
- assert_equal @test_model.boolean, true
43
- end
44
-
45
- should "return valid exists?" do
46
- assert_equal @test_model.integer?, true
47
- assert_equal @test_model.string?, true
48
- assert_equal @test_model.symbol?, true
49
- assert_equal @test_model.boolean?, true
50
-
51
- assert_equal @test_model_partial.integer?, true
52
- assert_equal @test_model_partial.string?, true
53
- assert_equal @test_model_partial.symbol?, false
54
- assert_equal @test_model_partial.boolean?, false
55
- end
56
-
57
- should "be assign new values" do
58
- @test_model.integer = 54321
59
- @test_model.string = "bar"
60
- @test_model.symbol = :foo
61
- @test_model.boolean = false
62
- assert_equal @test_model.integer, 54321
63
- assert_equal @test_model.string, "bar"
64
- assert_equal @test_model.symbol, :foo
65
- assert_equal @test_model.boolean, false
66
- end
67
- end
68
-
69
- context "redis key" do
70
- should "generate right key" do
71
- assert_equal @test_model.redis_key, "#{TestRedisModel.to_s.underscore}:key:foo"
72
- assert_equal TestRedisModel.generate_key(@args), "#{TestRedisModel.to_s.underscore}:key:foo"
73
- end
74
- should "generate right key alias" do
75
- assert_equal @test_model.redis_alias_key(:token), "#{TestRedisModel.to_s.underscore}:alias:token:bar"
76
- assert_equal TestRedisModel.generate_alias_key(:token, @args), "#{TestRedisModel.to_s.underscore}:alias:token:bar"
77
- end
78
- end
79
-
80
- context "after initialize" do
81
- should "clear input arguments" do
82
- test_model = TestRedisModel.new(@args.merge({:foor => :bar, :not_in_fields => "foo"}))
83
- assert_same_elements test_model.args, @args
84
- end
85
- end
86
-
87
- context "validation" do
88
-
89
- should "return errors after valid?" do
90
- test = TestRedisModel.new()
91
- assert !test.valid?, "shouldn't be valid"
92
- assert_equal test.errors.size, 2, "should have 2 errors (2 required fields)"
93
- end
94
-
95
- should "be able to add custom error (ex. in initialize)" do
96
- test = TestRedisModel.new()
97
- test.error << "my custom error"
98
- assert !test.valid?, "shouldn't be valid"
99
- assert_equal test.errors.size, 3, "should have 3 errors (2 required fields + 1 custom error)"
100
- assert_equal test.error.size, test.errors.size, "error and errors should be same (only as backup)"
101
- end
102
-
103
- should "not raise exeption on invalid initialize" do
104
- assert_nothing_raised { TestRedisModel.new() }
105
- end
106
-
107
- should "raise exeption on save" do
108
- test_model = TestRedisModel.new()
109
- assert_raises ArgumentError do
110
- test_model.save
111
- end
112
- end
113
- end
114
-
115
- context "updating" do
116
- setup do
117
- @new_args = {:integer => 123457, :string => "bar", :symbol => :foo, :boolean => false}
118
- end
4
+ context "Redis Model" do
119
5
 
120
- should "change attributes" do
121
- @test_model.update @new_args
122
- assert_equal @test_model.integer, @new_args[:integer]
123
- assert_equal @test_model.string, @new_args[:string]
124
- assert_equal @test_model.symbol, @new_args[:symbol]
125
- assert_equal @test_model.boolean, @new_args[:boolean]
126
- end
127
-
128
- should "ignore unknown attributes and other normaly update" do
129
- @test_model.update @new_args.merge(:unknown => "attribute")
130
- assert_equal @test_model.integer, @new_args[:integer]
131
- assert_equal @test_model.string, @new_args[:string]
132
- assert_equal @test_model.symbol, @new_args[:symbol]
133
- assert_equal @test_model.boolean, @new_args[:boolean]
134
- end
135
-
136
- end
137
-
138
- context "saving" do
139
- setup do
140
- @test_model.save
141
- end
142
-
143
- should "be saved and then change of variable included in key should rename it in redis!" do
144
- assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
145
- @test_model.string = "change_of_strging"
146
- @test_model.save
147
- assert_equal RedisModelExtension::Database.redis.keys("*").size, 2 #including key and alias
148
- end
149
-
150
- should "have same elements after get" do
151
- @getted_model = TestRedisModel.get(@args)
152
- assert_equal @getted_model.integer, @test_model.integer
153
- assert_equal @getted_model.string, @test_model.string
154
- assert_equal @getted_model.symbol, @test_model.symbol
155
- assert_equal @getted_model.boolean, @test_model.boolean
156
- end
157
-
158
- should "have same elements after get and to_arg" do
159
- @getted_model = TestRedisModel.get(@args)
160
- assert_equal @getted_model.to_arg, @args
161
- end
162
-
163
- context "alias" do
164
- should "be getted by alias" do
165
- @getted_model = TestRedisModel.get_by_alias(:token ,@args)
166
- assert_equal @getted_model.integer, @test_model.integer
167
- assert_equal @getted_model.string, @test_model.string
168
- assert_equal @getted_model.symbol, @test_model.symbol
169
- assert_equal @getted_model.boolean, @test_model.boolean
170
- end
171
-
172
- should "be getted after change in alias" do
173
- getted_model = TestRedisModel.get_by_alias(:token ,@args)
174
- getted_model.symbol = "Test_token"
175
- getted_model.save
176
- assert_equal getted_model.integer, TestRedisModel.get_by_alias(:token ,:symbol => "Test_token").integer
177
- end
178
- end
179
- end
180
-
181
6
  context "without rejected nil values on save" do
182
7
  should "save nil values" do
183
- class NilTestRedisModel
8
+ class NilTestOldRedisModel
184
9
  REDIS_MODEL_CONF = {
185
10
  :fields => {
186
11
  :integer => :to_i,
@@ -190,34 +15,47 @@ class RedisModelTest < Test::Unit::TestCase
190
15
  :redis_key => [:string],
191
16
  :redis_aliases => {},
192
17
  :reject_nil_values => false
193
- }
194
- include RedisModel
195
- initialize_redis_model_methods REDIS_MODEL_CONF
18
+ }
19
+ include RedisModel
20
+ initialize_redis_model_methods REDIS_MODEL_CONF
196
21
  end
197
- args = {integer: 100, string: "test"}
198
- nil_test_model = NilTestRedisModel.new(args)
199
22
 
200
- #on initialize
201
- assert_equal nil_test_model.integer, 100
202
- assert_equal nil_test_model.string, "test"
203
- nil_test_model.save
204
-
205
- #after find
206
- founded = NilTestRedisModel.get(args)
207
- assert_equal founded.integer, 100
208
- assert_equal founded.string, "test"
23
+ class NilTestRedisModel
24
+ include RedisModelExtension
25
+ redis_field :integer, :integer
26
+ redis_field :string, :string
27
+ redis_key :string
28
+ redis_save_fields_with_nil true
29
+ end
209
30
 
210
- #set integer to nil
211
- founded.integer = nil
212
- assert_equal founded.integer, nil
213
- #perform save
214
- founded.save
31
+ [NilTestOldRedisModel, NilTestRedisModel].each do |klass|
32
+ args = {integer: 100, string: "test"}
33
+ nil_test_model = klass.new(args)
34
+
35
+ #on initialize
36
+ assert_equal nil_test_model.integer, 100, "For #{klass} should have integer = 100"
37
+ assert_equal nil_test_model.string, "test", "For #{klass} should have string = test"
38
+ nil_test_model.save
39
+
40
+ #after find
41
+ founded = klass.get(args)
42
+ assert_equal founded.integer, 100, "After get for #{klass} should have integer = 100"
43
+ assert_equal founded.string, "test", "After get for #{klass} should have string = test"
44
+
45
+ #set integer to nil
46
+ founded.integer = nil
47
+ assert_equal founded.integer, nil, "After get and save for #{klass} should have integer = nil"
48
+ #perform save
49
+ founded.save
50
+
51
+ #after second find
52
+ founded = klass.get(args)
53
+ assert_equal founded.integer, nil, "After 2nd get for #{klass} should have integer = nil"
54
+ assert_equal founded.string, "test", "After 2nd get for #{klass} should have string = test"
55
+ end
215
56
 
216
- #after second find
217
- founded = NilTestRedisModel.get(args)
218
- assert_equal founded.integer, nil
219
- assert_equal founded.string, "test"
220
57
  end
221
58
  end
59
+
222
60
  end
223
61
  end
@@ -0,0 +1,30 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'helper'
3
+ class StringToBoolTest < Test::Unit::TestCase
4
+ context "String to_bool" do
5
+
6
+ should "return true" do
7
+ assert "true".to_bool, "true"
8
+ assert "1".to_bool, "1"
9
+ assert "t".to_bool, "t"
10
+ assert "y".to_bool, "y"
11
+ assert "yes".to_bool, "yes"
12
+ end
13
+
14
+ should "return false" do
15
+ assert ! "false".to_bool, "false"
16
+ assert ! "0".to_bool, "0"
17
+ assert ! "f".to_bool, "f"
18
+ assert ! "no".to_bool, "no"
19
+ assert ! "n".to_bool, "n"
20
+ assert ! "".to_bool, "blank string"
21
+ end
22
+
23
+ should "raise exception on unknown" do
24
+ assert_raises ArgumentError do
25
+ "unknown string".to_bool
26
+ end
27
+ end
28
+
29
+ end
30
+ end