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.
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
@@ -1,341 +1,73 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  require 'pp'
3
3
  require 'yaml'
4
+ require 'json'
4
5
  require 'redis'
6
+ require 'active_model'
5
7
  require 'active_support'
6
8
  require 'active_support/inflector'
7
9
  require 'active_support/inflector/inflections'
8
10
  require 'active_support/core_ext/hash/keys'
11
+ require 'active_support/core_ext/hash/indifferent_access'
9
12
  require 'active_support/core_ext/object/blank'
10
13
  require 'active_support/core_ext/class/inheritable_attributes'
11
14
  require 'string_to_bool'
12
15
  require 'database'
13
16
 
14
- module RedisModel
15
-
16
- attr_accessor :args, :error, :old_args, :conf
17
-
17
+ module RedisModelExtension
18
+ extend ActiveSupport::Concern
19
+ #include all needed modules directly into main class
18
20
  def self.included(base)
19
- base.send :extend, ClassMethods
20
- base.send :include, InstanceMethods
21
- end
22
-
23
- module ClassMethods
24
-
25
- def initialize_redis_model_methods conf
26
- @conf = {:reject_nil_values => true}.merge(conf)
27
- #take all fields and make methods for them
28
- conf[:fields].each do |attr, action|
29
- define_method "#{attr}" do
30
- if self.args[attr] || self.args[attr] == false #== false is a fi for boolean variable
31
- self.args[attr].to_s.send(action)
32
- else
33
- nil
34
- end
35
- end
36
-
37
- define_method "#{attr}=" do |item|
38
- self.args[attr] = item
39
- end
40
-
41
- define_method "#{attr}?" do
42
- !self.args[attr].nil?
43
- end
44
- end
45
- end
46
-
47
- def conf
48
- @conf
49
- end
50
-
51
- #Generates redis key for storing object
52
- def generate_key(args = {})
53
- out = "#{self.name.to_s.underscore.to_sym}:key"
54
- @conf[:redis_key].each do |key|
55
- if args.has_key?(key)
56
- out += ":#{args[key]}"
57
- else
58
- out += ":*"
59
- end
60
- end
61
- out
62
- end
63
-
64
- #Generates redis key for storing indexes for aliases
65
- def generate_alias_key(alias_name, args = {})
66
- out = "#{self.name.to_s.underscore.to_sym}:alias:#{alias_name}"
67
- @conf[:redis_aliases][alias_name.to_sym].each do |key|
68
- if args.has_key?(key)
69
- out += ":#{args[key]}"
70
- else
71
- out += ":*"
72
- end
73
- end
74
- out
75
- end
76
-
77
- #Validates if key by arguments is valid
78
- def valid_key?(args = {})
79
- full_key = true
80
- @conf[:redis_key].each do |key|
81
- full_key = false if !args.has_key?(key) || args[key].nil?
82
- end
83
- full_key
84
- end
85
-
86
- #Validates if key by alias name and arguments is valid
87
- def valid_alias_key?(alias_name, args = {})
88
- full_key = true
89
- @conf[:redis_aliases][alias_name.to_sym].each do |key|
90
- full_key = false if !args.has_key?(key) || args[key].nil?
91
- end
92
- full_key
93
- end
94
-
95
- #Check if key by arguments exists in db
96
- def exists?(args = {})
97
- RedisModelExtension::Database.redis.exists(self.name.constantize.generate_key(args))
98
- end
99
-
100
- #Check if key by alias name and arguments exists in db
101
- def alias_exists?(alias_name, args = {})
102
- RedisModelExtension::Database.redis.exists(self.name.constantize.generate_alias_key(alias_name, args))
103
- end
104
-
105
- #Wrapper around find to get all instances
106
- def all
107
- self.find({})
108
- end
109
-
110
- #Find method for searching in redis
111
- def find(args = {})
112
- args.symbolize_keys!
113
- out = []
114
- klass = self.name.constantize
115
-
116
- #is key specified directly? -> no needs of looking for other keys! -> faster
117
- if klass.valid_key?(args)
118
- if klass.exists?(args)
119
- data_args = RedisModelExtension::Database.redis.hgetall(klass.generate_key(args))
120
- out << klass.new(args.merge(data_args).merge({:old_args => data_args}))
121
- end
122
- else
123
- RedisModelExtension::Database.redis.keys(klass.generate_key(args)).each do |key|
124
- data_args = RedisModelExtension::Database.redis.hgetall(key)
125
- out << klass.new(args.merge(data_args).merge({:old_args => data_args}))
126
- end
127
- end
128
- out
21
+ base.class_eval do
22
+ extend ClassInitialize
23
+ extend ClassOldInitialize
24
+ extend ClassConfig
25
+ extend ClassGetFind
26
+ extend ClassRedisKey
27
+ extend ClassCreate
28
+ extend ClassValidations
29
+ extend ClassAutoincrementId
30
+
31
+ include Initialize
32
+ include ActiveModelIntegration
33
+ include Attributes
34
+ include AutoincrementId
35
+ include RedisKey
36
+ include StoreKeys
37
+ include Config
38
+ include SaveDestroy
39
+ include Validations
40
+ include ValueTransform
129
41
  end
130
-
131
- #Find method for searching in redis
132
- def find_by_alias(alias_name, args = {})
133
- args.symbolize_keys!
134
- out = []
135
- klass = self.name.constantize
136
-
137
- #is key specified directly? -> no needs of looking for other keys! -> faster
138
- if klass.valid_alias_key?(alias_name, args)
139
- out << klass.get_by_alias(alias_name, args) if klass.alias_exists?(alias_name, args)
140
- else
141
- RedisModelExtension::Database.redis.keys(klass.generate_alias_key(alias_name, args)).each do |key|
142
- out << klass.get_by_alias_key(key)
143
- end
144
- end
145
- out
146
- end
147
-
148
- #fastest method to get object from redis by getting it by arguments
149
- def get(args = {})
150
- args.symbolize_keys!
151
- klass = self.name.constantize
152
- if klass.valid_key?(args) && klass.exists?(args)
153
- data_args = RedisModelExtension::Database.redis.hgetall(klass.generate_key(args))
154
- klass.new(args.merge(data_args).merge({:old_args => data_args}))
155
- else
156
- nil
157
- end
158
- end
159
-
160
- #if you know redis key and would like to get object
161
- def get_by_redis_key(redis_key)
162
- if redis_key.is_a?(String) && RedisModelExtension::Database.redis.exists(redis_key)
163
- unless redis_key.include?("*")
164
- data_args = RedisModelExtension::Database.redis.hgetall(redis_key)
165
- klass = self.name.constantize
166
- klass.new(data_args.merge({:old_args => data_args}))
167
- else
168
- raise ArgumentError, "RedisKey for method get_by_redis_key can not contains '*'"
169
- end
170
- else
171
- nil
172
- end
173
- end
174
-
175
- #fastest method to get object from redis by getting it by alias and arguments
176
- def get_by_alias(alias_name, args = {})
177
- args.symbolize_keys!
178
- klass = self.name.constantize
179
- if klass.valid_alias_key?(alias_name, args) && klass.alias_exists?(alias_name, args)
180
- key = RedisModelExtension::Database.redis.get(klass.generate_alias_key(alias_name, args))
181
- if RedisModelExtension::Database.redis.exists(key)
182
- data_args = RedisModelExtension::Database.redis.hgetall(key)
183
- klass.new(args.merge(data_args).merge({:old_args => data_args}))
184
- else
185
- nil
186
- end
187
- else
188
- nil
189
- end
190
- end
191
-
192
- #fastest method to get object from redis by getting it by alias and arguments
193
- def get_by_alias_key(alias_key)
194
- klass = self.name.constantize
195
- if RedisModelExtension::Database.redis.exists(alias_key)
196
- key = RedisModelExtension::Database.redis.get(alias_key)
197
- if RedisModelExtension::Database.redis.exists(key)
198
- klass.new(args.merge(RedisModelExtension::Database.redis.hgetall(key)).merge({:old_args => key}))
199
- else
200
- nil
201
- end
202
- else
203
- nil
204
- end
205
- end
206
-
207
42
  end
208
-
209
- module InstanceMethods
210
-
211
- def initialize(args={})
212
- args.symbolize_keys!
213
- #if old_args is specified, don't usi it in args hash
214
- if args[:old_args] && args[:old_args].size > 0
215
- self.old_args = args.delete(:old_args).symbolize_keys
216
- end
217
- self.args = clear_args(args)
218
43
 
219
- return self
220
- end
221
-
222
- #Fixing some problems with saving nil into redis and clearing input arguments
223
- def clear_args(args)
224
- args.symbolize_keys!
225
- out_args = {}
226
- args.each do |key, value|
227
- if self.class.conf[:fields].keys.include?(key) #don't use arguments wich aren't specified in :fields
228
- if value.nil? || value.to_s.size == 0 #change nil and zero length string into nil
229
- out_args[key] = nil
230
- else
231
- out_args[key] = value
232
- end
233
- end
234
- end
235
- out_args
236
- end
237
-
238
- #validates required attributes
239
- def valid?
240
- @error ||= []
241
- self.class.conf[:required].each do |key|
242
- if !self.args.has_key?(key) || self.args[key].nil?
243
- @error.push("Required #{key}")
244
- end
245
- end
246
- @error.size == 0
247
- end
44
+ module ActiveModelIntegration
45
+ def self.included(base)
46
+ base.class_eval do
47
+ include ActiveModel::AttributeMethods
48
+ include ActiveModel::Validations
49
+ include ActiveModel::Naming
50
+ include ActiveModel::Conversion
248
51
 
249
- #return error from validation
250
- def error
251
- @error ||= []
252
- end
253
-
254
- #return error from validation
255
- def errors
256
- @error ||= []
257
- end
258
-
259
- #take all arguments and send them out
260
- def to_arg
261
- self.args.inject({}) do |output, item|
262
- output[item.first] = item.last.send(self.class.conf[:fields][item.first.to_sym])
263
- output
264
- end
265
- end
266
-
267
- #if this record exists in database
268
- def exists?
269
- RedisModelExtension::Database.redis.exists(self.class.generate_key(self.args))
270
- end
271
-
272
- #remove record form database
273
- def destroy!
274
- if exists?
275
- #destroy main object
276
- RedisModelExtension::Database.redis.del(redis_key)
277
- destroy_aliases!
278
- end
279
- end
280
-
281
- #remove all aliases
282
- def destroy_aliases!
283
- #do it only if it is existing object!
284
- if self.old_args
285
- self.class.conf[:redis_aliases].each do |alias_name, fields|
286
- if self.class.valid_alias_key?(alias_name, self.old_args) && self.class.alias_exists?(alias_name, self.old_args)
287
- RedisModelExtension::Database.redis.del(self.class.generate_alias_key(alias_name, self.old_args))
288
- end
289
- end
290
- end
291
- end
292
-
293
- #Method for creating aliases
294
- def create_aliases
295
- main_key = redis_key
296
- self.class.conf[:redis_aliases].each do |alias_name, fields|
297
- RedisModelExtension::Database.redis.set(self.class.generate_alias_key(alias_name, self.args), main_key) if self.class.valid_alias_key?(alias_name, self.args)
298
- end
299
- end
300
-
301
- #get redis key for instance
302
- def redis_key
303
- self.class.generate_key(self.args)
304
- end
305
-
306
- #get redis key for instance alias
307
- def redis_alias_key(alias_name)
308
- self.class.generate_alias_key(alias_name, self.args)
309
- end
310
-
311
- #update multiple attrubutes at once
312
- def update args
313
- args.each do |key, value|
314
- method = "#{key}=".to_sym
315
- if self.respond_to? method
316
- self.send(method, value)
317
- end
318
- end
319
- end
320
-
321
- #save method
322
- def save
323
- if valid?
324
- #generate key (possibly new)
325
- generated_key = redis_key
326
- RedisModelExtension::Database.redis.rename(self.class.generate_key(self.old_args), generated_key) if self.old_args && generated_key != self.class.generate_key(self.old_args) && RedisModelExtension::Database.redis.exists(self.class.generate_key(self.old_args))
327
- args = self.class.conf[:reject_nil_values] ? self.args.reject{|k,v| v.nil?} : self.args
328
- RedisModelExtension::Database.redis.hmset(generated_key, *args.inject([]){ |arr,kv| arr + [kv[0], kv[1].to_s]})
329
-
330
- #destroy aliases
331
- destroy_aliases!
332
- create_aliases
333
- #after save make new_key -> old_key
334
- self.old_args = self.args.clone
335
- return self
336
- else
337
- raise ArgumentError, @error.join(", ")
52
+ extend ActiveModel::Callbacks
53
+ define_model_callbacks :save, :destroy, :create
338
54
  end
339
55
  end
340
56
  end
341
- end
57
+
58
+ end
59
+
60
+ #require all additional modules
61
+ require 'redis-model-extension/config'
62
+ require 'redis-model-extension/initialize'
63
+ require 'redis-model-extension/old_initialize'
64
+ require 'redis-model-extension/value_transform'
65
+ require 'redis-model-extension/redis_key'
66
+ require 'redis-model-extension/get_find'
67
+ require 'redis-model-extension/validation'
68
+ require 'redis-model-extension/attributes'
69
+ require 'redis-model-extension/save_destroy'
70
+ require 'redis-model-extension/store_keys'
71
+ require 'redis-model-extension/autoincrement_id'
72
+ #bad naming in past, will be removed
73
+ require 'redis-model'
@@ -0,0 +1,14 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ #bad naming in past, will be removed
4
+ module RedisModel
5
+
6
+ #include all needed modules directly into main class
7
+ def self.included(base)
8
+ puts "WARNING: Using include RedisModel is deprecated and will be removed in future! Please use 'include RedisModelExtension'"
9
+ base.class_eval do
10
+ include RedisModelExtension
11
+ end
12
+ end
13
+
14
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "redis-model-extension"
8
- s.version = "0.3.8"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ondrej Bartas"]
12
- s.date = "2012-08-09"
12
+ s.date = "2012-08-13"
13
13
  s.description = "It provides functions as find, find_by_alias, get, exists?, validate, save etc."
14
14
  s.email = "ondrej@bartas.cz"
15
15
  s.extra_rdoc_files = [
@@ -27,12 +27,37 @@ Gem::Specification.new do |s|
27
27
  "config/redis_setup.conf",
28
28
  "lib/database.rb",
29
29
  "lib/redis-model-extension.rb",
30
+ "lib/redis-model-extension/attributes.rb",
31
+ "lib/redis-model-extension/autoincrement_id.rb",
32
+ "lib/redis-model-extension/config.rb",
33
+ "lib/redis-model-extension/get_find.rb",
34
+ "lib/redis-model-extension/initialize.rb",
35
+ "lib/redis-model-extension/old_initialize.rb",
36
+ "lib/redis-model-extension/redis_key.rb",
37
+ "lib/redis-model-extension/save_destroy.rb",
38
+ "lib/redis-model-extension/store_keys.rb",
39
+ "lib/redis-model-extension/validation.rb",
40
+ "lib/redis-model-extension/value_transform.rb",
41
+ "lib/redis-model.rb",
30
42
  "lib/string_to_bool.rb",
31
43
  "redis-model-extension.gemspec",
32
44
  "redis-model.gemspec",
33
45
  "test/helper.rb",
46
+ "test/models.rb",
47
+ "test/redis_model_old/test_redis_model_old_config.rb",
48
+ "test/redis_model_parts/test_attributes.rb",
49
+ "test/redis_model_parts/test_autoincrement_id.rb",
50
+ "test/redis_model_parts/test_dynamic_alias.rb",
51
+ "test/redis_model_parts/test_get_find.rb",
52
+ "test/redis_model_parts/test_hooks.rb",
53
+ "test/redis_model_parts/test_initialize.rb",
54
+ "test/redis_model_parts/test_redis_key.rb",
55
+ "test/redis_model_parts/test_save_destroy.rb",
56
+ "test/redis_model_parts/test_validation.rb",
57
+ "test/redis_model_parts/test_variable_types.rb",
34
58
  "test/test_database_module.rb",
35
- "test/test_redis-model-extension.rb"
59
+ "test/test_redis-model-extension.rb",
60
+ "test/test_string_to_bool.rb"
36
61
  ]
37
62
  s.homepage = "http://github.com/ondrejbartas/redis-model-extension"
38
63
  s.licenses = ["MIT"]
@@ -47,11 +72,14 @@ Gem::Specification.new do |s|
47
72
  s.add_runtime_dependency(%q<redis>, [">= 0"])
48
73
  s.add_runtime_dependency(%q<i18n>, [">= 0"])
49
74
  s.add_runtime_dependency(%q<activesupport>, [">= 0"])
75
+ s.add_runtime_dependency(%q<activemodel>, [">= 0"])
50
76
  s.add_development_dependency(%q<shoulda>, [">= 0"])
51
77
  s.add_development_dependency(%q<shoulda-context>, [">= 0"])
78
+ s.add_development_dependency(%q<mocha>, [">= 0"])
79
+ s.add_development_dependency(%q<simplecov>, ["~> 0.6.4"])
52
80
  s.add_development_dependency(%q<rake>, [">= 0"])
53
81
  s.add_development_dependency(%q<rack>, [">= 0"])
54
- s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
82
+ s.add_development_dependency(%q<sdoc>, [">= 0"])
55
83
  s.add_development_dependency(%q<bundler>, [">= 0"])
56
84
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
57
85
  s.add_development_dependency(%q<turn>, ["~> 0.8.2"])
@@ -61,11 +89,14 @@ Gem::Specification.new do |s|
61
89
  s.add_dependency(%q<redis>, [">= 0"])
62
90
  s.add_dependency(%q<i18n>, [">= 0"])
63
91
  s.add_dependency(%q<activesupport>, [">= 0"])
92
+ s.add_dependency(%q<activemodel>, [">= 0"])
64
93
  s.add_dependency(%q<shoulda>, [">= 0"])
65
94
  s.add_dependency(%q<shoulda-context>, [">= 0"])
95
+ s.add_dependency(%q<mocha>, [">= 0"])
96
+ s.add_dependency(%q<simplecov>, ["~> 0.6.4"])
66
97
  s.add_dependency(%q<rake>, [">= 0"])
67
98
  s.add_dependency(%q<rack>, [">= 0"])
68
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
99
+ s.add_dependency(%q<sdoc>, [">= 0"])
69
100
  s.add_dependency(%q<bundler>, [">= 0"])
70
101
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
71
102
  s.add_dependency(%q<turn>, ["~> 0.8.2"])
@@ -76,11 +107,14 @@ Gem::Specification.new do |s|
76
107
  s.add_dependency(%q<redis>, [">= 0"])
77
108
  s.add_dependency(%q<i18n>, [">= 0"])
78
109
  s.add_dependency(%q<activesupport>, [">= 0"])
110
+ s.add_dependency(%q<activemodel>, [">= 0"])
79
111
  s.add_dependency(%q<shoulda>, [">= 0"])
80
112
  s.add_dependency(%q<shoulda-context>, [">= 0"])
113
+ s.add_dependency(%q<mocha>, [">= 0"])
114
+ s.add_dependency(%q<simplecov>, ["~> 0.6.4"])
81
115
  s.add_dependency(%q<rake>, [">= 0"])
82
116
  s.add_dependency(%q<rack>, [">= 0"])
83
- s.add_dependency(%q<rdoc>, ["~> 3.12"])
117
+ s.add_dependency(%q<sdoc>, [">= 0"])
84
118
  s.add_dependency(%q<bundler>, [">= 0"])
85
119
  s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
86
120
  s.add_dependency(%q<turn>, ["~> 0.8.2"])
data/test/helper.rb CHANGED
@@ -1,5 +1,16 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter "/test/"
5
+ add_filter "/config/"
6
+ add_filter "database"
7
+
8
+ add_group 'Lib', 'lib/'
9
+ end
10
+
1
11
  require 'rubygems'
2
12
  require 'bundler'
13
+
3
14
  begin
4
15
  Bundler.setup(:default, :development)
5
16
  rescue Bundler::BundlerError => e
@@ -7,7 +18,9 @@ rescue Bundler::BundlerError => e
7
18
  $stderr.puts "Run `bundle install` to install missing gems"
8
19
  exit e.status_code
9
20
  end
21
+
10
22
  require 'test/unit'
23
+ require 'mocha'
11
24
  require 'turn'
12
25
  require 'shoulda-context'
13
26
 
@@ -15,5 +28,7 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
15
28
  $LOAD_PATH.unshift(File.dirname(__FILE__))
16
29
  require 'redis-model-extension'
17
30
 
18
- class Test::Unit::TestCase
19
- end
31
+ require File.expand_path(File.join(File.dirname(__FILE__),'models.rb'))
32
+
33
+ #clear database connection
34
+ RedisModelExtension::Database.redis = nil
data/test/models.rb ADDED
@@ -0,0 +1,83 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ class TestOldRedisModel
4
+ REDIS_MODEL_CONF = {
5
+ :fields => {
6
+ :integer => :to_i,
7
+ :boolean => :to_bool,
8
+ :string => :to_s,
9
+ :symbol => :to_sym,
10
+ :array => :to_array,
11
+ :hash => :to_hash,
12
+ },
13
+ :required => [:integer, :string],
14
+ :redis_key => [:string],
15
+ :redis_aliases => {
16
+ :token => [:symbol]
17
+ },
18
+ :reject_nil_values => true,
19
+ }
20
+ include RedisModel
21
+ initialize_redis_model_methods REDIS_MODEL_CONF
22
+ end
23
+
24
+ class TestRedisModel
25
+ include RedisModelExtension
26
+ redis_field :integer, :integer
27
+ redis_field :boolean, :bool
28
+ redis_field :string, :string
29
+ redis_field :symbol, :symbol, :default
30
+ redis_field :array, :array
31
+ redis_field :hash, :hash
32
+ redis_field :time, :time
33
+ redis_field :date, :date
34
+ redis_field :float, :float
35
+
36
+ validates :integer, :presence => true
37
+
38
+ redis_key :string
39
+
40
+ redis_alias :token, [:symbol]
41
+
42
+ end
43
+
44
+ class AutoincrementNotSet
45
+ include RedisModelExtension
46
+ redis_field :name, :string
47
+ redis_field :email, :string
48
+ end
49
+
50
+ class AutoincrementSetRedisKey
51
+ include RedisModelExtension
52
+ redis_field :name, :string
53
+ redis_field :email, :string
54
+ redis_key [:id]
55
+ end
56
+
57
+ class DynamicAlias
58
+ include RedisModelExtension
59
+ redis_field :name, :string
60
+ redis_field :items, :hash
61
+ redis_key :name
62
+ redis_alias :items_with_name, [:name], :items_order, :items
63
+ end
64
+
65
+ class WithCallbacks
66
+ include RedisModelExtension
67
+
68
+ before_save :before_save_method
69
+ after_save :after_save_method
70
+ before_destroy { @destroyed_flag = true }
71
+ before_create :before_create_method
72
+
73
+ redis_field :name, :string
74
+
75
+ def before_save_method
76
+ end
77
+
78
+ def after_save_method
79
+ end
80
+
81
+ def before_create_method
82
+ end
83
+ end