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
@@ -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
|
15
|
-
|
16
|
-
|
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.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
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
|
-
|
250
|
-
|
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
|
-
|
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'
|
data/lib/redis-model.rb
ADDED
@@ -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.
|
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-
|
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<
|
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<
|
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<
|
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
|
-
|
19
|
-
|
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
|