redis-model-extension 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +5 -4
- data/README.markdown +63 -23
- data/VERSION +1 -1
- data/example/benchmark.rb +66 -0
- data/lib/redis-model-extension.rb +30 -31
- data/lib/redis-model-extension/attributes.rb +1 -1
- data/lib/redis-model-extension/get_find.rb +21 -17
- data/lib/redis-model-extension/initialize.rb +8 -11
- data/lib/redis-model-extension/old_initialize.rb +2 -0
- data/lib/redis-model-extension/save_destroy.rb +17 -12
- data/lib/redis-model-extension/value_transform.rb +1 -1
- data/redis-model-extension.gemspec +18 -14
- data/test/models.rb +15 -0
- data/test/redis_model_old/test_redis_model_old_config.rb +6 -20
- data/test/redis_model_parts/test_attributes.rb +9 -1
- data/test/redis_model_parts/test_dynamic_alias.rb +13 -10
- data/test/redis_model_parts/test_get_find.rb +15 -3
- data/test/redis_model_parts/test_redis_key.rb +12 -1
- data/test/redis_model_parts/test_variable_types.rb +3 -3
- metadata +55 -43
data/Gemfile
CHANGED
@@ -4,19 +4,20 @@ gem "redis"
|
|
4
4
|
gem "i18n"
|
5
5
|
gem "activesupport"
|
6
6
|
gem "activemodel"
|
7
|
+
gem "hashr"
|
7
8
|
|
8
9
|
group :development do
|
9
10
|
gem "shoulda", ">= 0"
|
10
11
|
gem 'shoulda-context'
|
11
12
|
gem 'mocha'
|
12
|
-
gem "simplecov"
|
13
|
+
gem "simplecov"
|
13
14
|
gem "rake"
|
14
15
|
gem "rack"
|
15
16
|
gem "sdoc" # sdoc -N .
|
16
17
|
gem "bundler"
|
17
|
-
gem "jeweler"
|
18
|
-
gem "turn"
|
18
|
+
gem "jeweler"
|
19
|
+
gem "turn"
|
19
20
|
gem "minitest"
|
20
|
-
gem "ansi"
|
21
|
+
gem "ansi"
|
21
22
|
end
|
22
23
|
|
data/README.markdown
CHANGED
@@ -55,6 +55,14 @@ RedisModelExtension::Database.redis_config(:host => "127.0.0.1", :port => 6379,
|
|
55
55
|
Your class needs to include RedisModel and there is your testing configuration:
|
56
56
|
([old initialization - still working :)](https://github.com/ondrejbartas/redis-model-extension/wiki/Old-initialization))
|
57
57
|
|
58
|
+
Lots of aditional informations can be found in [WIKI](https://github.com/ondrejbartas/redis-model-extension/wiki) or directly:
|
59
|
+
|
60
|
+
* [Auto-increment IDs](https://github.com/ondrejbartas/redis-model-extension/wiki/Auto-increment-IDs)
|
61
|
+
* [Validations](https://github.com/ondrejbartas/redis-model-extension/wiki/Validations)
|
62
|
+
* [Aliases](https://github.com/ondrejbartas/redis-model-extension/wiki/Aliases)
|
63
|
+
* [Update multiple attributes](https://github.com/ondrejbartas/redis-model-extension/wiki/Update-multiple-attributes)
|
64
|
+
* [Before After Hooks](https://github.com/ondrejbartas/redis-model-extension/wiki/Before-After-Hooks)
|
65
|
+
|
58
66
|
``` ruby
|
59
67
|
class TestRedisModel
|
60
68
|
include RedisModelExtension
|
@@ -93,27 +101,39 @@ end
|
|
93
101
|
|
94
102
|
foo = TestRedisModel.new()
|
95
103
|
|
104
|
+
# you can set/get values
|
105
|
+
foo.field3
|
106
|
+
#=> "Default string" #getting default value
|
107
|
+
foo.field3 = "bar"
|
108
|
+
#=> "bar"
|
109
|
+
foo.field3
|
110
|
+
#=> "bar"
|
111
|
+
|
112
|
+
#you can get all attributes by calling
|
113
|
+
foo.to_args
|
114
|
+
#or to JSON
|
115
|
+
foo.to_json
|
116
|
+
|
117
|
+
#you can update more attributes at once
|
118
|
+
foo.update(:field1 => 234, :field3 => "bar")
|
119
|
+
|
96
120
|
# you can validate your object
|
97
121
|
|
98
|
-
|
99
|
-
|
100
|
-
|
122
|
+
foo.valid?
|
123
|
+
#=> true | false -> depending on validations
|
124
|
+
|
125
|
+
#You can save
|
126
|
+
unless foo.save #save returns instance -> valid save | false -> some errors
|
101
127
|
puts foo.errors #you can get nice errors what is wrong
|
102
128
|
end
|
103
129
|
|
104
|
-
#
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
130
|
+
# you can use create
|
131
|
+
bar = TestRedisModel.create field1: 123
|
132
|
+
# but don't forget to ask for errors
|
133
|
+
if (bar = TestRedisModel.create field1: 123).errors.any?
|
134
|
+
puts bar.errors
|
109
135
|
end
|
110
|
-
#
|
111
|
-
|
112
|
-
|
113
|
-
#you can update more attributes at once
|
114
|
-
foo.update(:field1 => 234, :field3 => "bar")
|
115
|
-
|
116
|
-
# !!! if you try to save invalid object you will get ArgumentError exception !!!
|
136
|
+
# this will return if there was validation error before creation
|
117
137
|
|
118
138
|
# after save you can find and get object find_by_alias
|
119
139
|
|
@@ -132,17 +152,37 @@ TestRedisModel.exists?(:field3 => "foo", :field4=> true)
|
|
132
152
|
|
133
153
|
#you can try to find by alias - alias needs to be uniq
|
134
154
|
#use alias only for uniq combination of keys
|
135
|
-
TestRedisModel.find_by_alias
|
136
|
-
|
155
|
+
TestRedisModel.find_by_alias :token, :field4=> true
|
156
|
+
# or by generated method:
|
157
|
+
TestRedisModel.find_by_token :field4=> true
|
158
|
+
# if nothing exists
|
159
|
+
#=> nil
|
160
|
+
# if there is saved something
|
161
|
+
#=> [<TestRedisModel: ...>, <TestRedisModel: ...>, ...]
|
137
162
|
```
|
138
163
|
|
139
|
-
Now you can easily access all attributes from TestRedisModel by `foo.integer` or exists? `foo.integer?` or set value by `foo.integer = 1234`
|
140
|
-
|
141
|
-
You can initialize model by `foo = TestRedisModel.new(:field1 => 123, :field3 => "bar")` and then access it same as above.
|
142
|
-
|
143
|
-
Saving is easy too: `foo.save` -> It will raise exception if :required attributes aren't filled. Error message says what is missing.
|
144
|
-
|
145
164
|
|
165
|
+
## Change log
|
166
|
+
|
167
|
+
* 0.4.1
|
168
|
+
* Fixed bugs in intialization
|
169
|
+
* Changed aliases to use key - array instead of key - value (enable find by category...) WIKI: [Aliases](https://github.com/ondrejbartas/redis-model-extension/wiki/Aliases)
|
170
|
+
* Add better readme and filled [WIKI](https://github.com/ondrejbartas/redis-model-extension/wiki)
|
171
|
+
* 0.4.0
|
172
|
+
* Redesigned initialization method from: [old one](https://github.com/ondrejbartas/redis-model-extension/wiki/Old-initialization) to: [new one](https://github.com/ondrejbartas/redis-model-extension/wiki/New-initialization)
|
173
|
+
* Added [Before After Hooks](https://github.com/ondrejbartas/redis-model-extension/wiki/Before-After-Hooks)
|
174
|
+
* Added [Auto-increment IDs](https://github.com/ondrejbartas/redis-model-extension/wiki/Auto-increment-IDs)
|
175
|
+
* Added dynamic aliases
|
176
|
+
* Added [Active Model Validations](https://github.com/ondrejbartas/redis-model-extension/wiki/Validations)
|
177
|
+
* REFACTORED whole structure of redis model (similar methods moved to separate modules)
|
178
|
+
* Set default to save nil values to redis
|
179
|
+
* 0.3.8
|
180
|
+
* Allow to don't save nil values into redis
|
181
|
+
* 0.3.7
|
182
|
+
* Fix dependencies
|
183
|
+
* 0.3.6
|
184
|
+
* Fix problem with working in Forks
|
185
|
+
* for older look at [Commit messages](https://github.com/ondrejbartas/redis-model-extension/commits/master)
|
146
186
|
|
147
187
|
## Contributing to redis-model-extension
|
148
188
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.1
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
4
|
+
require 'pp'
|
5
|
+
require 'benchmark'
|
6
|
+
require 'redis-model-extension'
|
7
|
+
COUNT = (ENV['COUNT'] || 10000).to_i
|
8
|
+
|
9
|
+
RedisModelExtension::Database.redis = Redis.new db: 15
|
10
|
+
RedisModelExtension::Database.redis.flushdb
|
11
|
+
|
12
|
+
class Movie
|
13
|
+
include RedisModelExtension
|
14
|
+
redis_field :name, :string
|
15
|
+
redis_field :director, :string
|
16
|
+
redis_field :length, :integer
|
17
|
+
redis_field :object, :hash
|
18
|
+
end
|
19
|
+
|
20
|
+
puts "Beginning the benchmark script", "", '='*80
|
21
|
+
sleep 5
|
22
|
+
|
23
|
+
|
24
|
+
puts "Saving #{COUNT} records into a Redis database..."
|
25
|
+
|
26
|
+
elapsed = Benchmark.realtime do
|
27
|
+
(1..COUNT).map do |i|
|
28
|
+
m = Movie.create name: "Move name #{i}", length: Random.rand(100..200), director: "Director #{i}", hash: { ttesting: "benchmark", and_more: {foo: :bar}}
|
29
|
+
pp m.errors.to_a if m.errors.any?
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
puts "Duration: #{elapsed} seconds, rate: #{COUNT.to_f/elapsed} docs/sec",
|
34
|
+
'-'*80
|
35
|
+
|
36
|
+
puts "Finding all movies..."
|
37
|
+
elapsed = Benchmark.realtime do
|
38
|
+
pp Movie.find().size
|
39
|
+
end
|
40
|
+
puts "Duration: #{elapsed} seconds, rate: #{COUNT.to_f/elapsed} docs/sec",
|
41
|
+
'-'*80
|
42
|
+
|
43
|
+
puts "_"*80,"="*80
|
44
|
+
puts "ONLY REDIS"
|
45
|
+
puts "Saving #{COUNT} records into a Redis database..."
|
46
|
+
|
47
|
+
elapsed = Benchmark.realtime do
|
48
|
+
(1..COUNT).map do |i|
|
49
|
+
RedisModelExtension::Database.redis.hmset "movie:key:#{i}", "name","Move name #{i}", "length",Random.rand(100..200), "director", "Director #{i}", "hash", { ttesting: "benchmark", and_more: {foo: :bar}}.to_json
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
puts "Duration: #{elapsed} seconds, rate: #{COUNT.to_f/elapsed} docs/sec",
|
54
|
+
'-'*80
|
55
|
+
|
56
|
+
puts "Finding all movies..."
|
57
|
+
elapsed = Benchmark.realtime do
|
58
|
+
RedisModelExtension::Database.redis.keys("movie:key:*").each do |key|
|
59
|
+
RedisModelExtension::Database.redis.hgetall(key)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
puts "Duration: #{elapsed} seconds, rate: #{COUNT.to_f/elapsed} docs/sec",
|
63
|
+
'-'*80
|
64
|
+
|
65
|
+
|
66
|
+
puts "Finding #{COUNT} movies one by one..."
|
@@ -3,6 +3,7 @@ require 'pp'
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'json'
|
5
5
|
require 'redis'
|
6
|
+
require 'hashr'
|
6
7
|
require 'active_model'
|
7
8
|
require 'active_support'
|
8
9
|
require 'active_support/inflector'
|
@@ -10,48 +11,46 @@ require 'active_support/inflector/inflections'
|
|
10
11
|
require 'active_support/core_ext/hash/keys'
|
11
12
|
require 'active_support/core_ext/hash/indifferent_access'
|
12
13
|
require 'active_support/core_ext/object/blank'
|
13
|
-
require 'active_support/core_ext/class/inheritable_attributes'
|
14
14
|
require 'string_to_bool'
|
15
15
|
require 'database'
|
16
16
|
|
17
17
|
module RedisModelExtension
|
18
18
|
extend ActiveSupport::Concern
|
19
|
+
|
19
20
|
#include all needed modules directly into main class
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
extend ClassAutoincrementId
|
21
|
+
included 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
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
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
|
42
41
|
end
|
43
42
|
|
44
43
|
module ActiveModelIntegration
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
extend ActiveSupport::Concern
|
45
|
+
|
46
|
+
included do
|
47
|
+
include ActiveModel::AttributeMethods
|
48
|
+
include ActiveModel::Validations
|
49
|
+
include ActiveModel::Naming
|
50
|
+
include ActiveModel::Conversion
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
end
|
52
|
+
extend ActiveModel::Callbacks
|
53
|
+
define_model_callbacks :save, :destroy, :create
|
55
54
|
end
|
56
55
|
end
|
57
56
|
|
@@ -24,14 +24,12 @@ module RedisModelExtension
|
|
24
24
|
|
25
25
|
out = []
|
26
26
|
klass = self.name.constantize
|
27
|
-
|
27
|
+
search_key = klass.generate_key(args)
|
28
28
|
#is key specified directly? -> no needs of looking for other keys! -> faster
|
29
|
-
|
30
|
-
if klass.exists?(args)
|
31
|
-
out << klass.new_by_key(klass.generate_key(args))
|
32
|
-
end
|
29
|
+
unless search_key =~ /\*/
|
30
|
+
out << klass.new_by_key(search_key) if klass.exists?(args)
|
33
31
|
else
|
34
|
-
RedisModelExtension::Database.redis.keys(
|
32
|
+
RedisModelExtension::Database.redis.keys(search_key).each do |key|
|
35
33
|
out << klass.new_by_key(key)
|
36
34
|
end
|
37
35
|
end
|
@@ -49,15 +47,16 @@ module RedisModelExtension
|
|
49
47
|
|
50
48
|
out = []
|
51
49
|
klass = self.name.constantize
|
50
|
+
search_key = klass.generate_alias_key(alias_name, args)
|
52
51
|
#is key specified directly? -> no needs of looking for other keys! -> faster
|
53
|
-
|
54
|
-
out
|
52
|
+
unless search_key =~ /\*/
|
53
|
+
out = klass.get_by_alias(alias_name, args) if klass.alias_exists?(alias_name, args)
|
55
54
|
else
|
56
|
-
RedisModelExtension::Database.redis.keys(
|
55
|
+
RedisModelExtension::Database.redis.keys(search_key).each do |key|
|
57
56
|
out << klass.get_by_alias_key(key)
|
58
57
|
end
|
59
58
|
end
|
60
|
-
out
|
59
|
+
out.flatten
|
61
60
|
end
|
62
61
|
|
63
62
|
######################################
|
@@ -96,8 +95,11 @@ module RedisModelExtension
|
|
96
95
|
|
97
96
|
klass = self.name.constantize
|
98
97
|
if klass.valid_alias_key?(alias_name, args) && klass.alias_exists?(alias_name, args)
|
99
|
-
|
100
|
-
|
98
|
+
out = []
|
99
|
+
RedisModelExtension::Database.redis.smembers(klass.generate_alias_key(alias_name, args)).each do |key|
|
100
|
+
out << klass.new_by_key(key) if RedisModelExtension::Database.redis.exists(key)
|
101
|
+
end
|
102
|
+
return out
|
101
103
|
end
|
102
104
|
nil
|
103
105
|
end
|
@@ -121,22 +123,24 @@ module RedisModelExtension
|
|
121
123
|
def get_by_alias_key(alias_key)
|
122
124
|
klass = self.name.constantize
|
123
125
|
if RedisModelExtension::Database.redis.exists(alias_key)
|
124
|
-
|
125
|
-
|
126
|
+
out = []
|
127
|
+
RedisModelExtension::Database.redis.smembers(alias_key).each do |key|
|
128
|
+
out << klass.new_by_key(key) if RedisModelExtension::Database.redis.exists(key)
|
129
|
+
end
|
130
|
+
return out
|
126
131
|
end
|
127
132
|
nil
|
128
133
|
end
|
129
134
|
|
130
|
-
|
131
135
|
######################################
|
132
136
|
# CREATE NEW OBJECT BY HASH VALUES
|
133
137
|
######################################
|
134
138
|
|
135
139
|
# read all data from redis and create new instance (used for Find & Get method)
|
136
140
|
def new_by_key(key)
|
137
|
-
args =
|
141
|
+
args = RedisModelExtension::Database.redis.hgetall(key).symbolize_keys
|
138
142
|
|
139
|
-
new_instance =
|
143
|
+
new_instance = new(args)
|
140
144
|
new_instance.store_keys
|
141
145
|
|
142
146
|
return new_instance
|
@@ -36,16 +36,10 @@ module RedisModelExtension
|
|
36
36
|
define_method "#{name}?" do
|
37
37
|
value_get(name) && !value_get(name).blank? ? true : false
|
38
38
|
end
|
39
|
-
|
40
|
-
# default saving nil values to redis
|
41
|
-
redis_save_fields_with_nil true
|
42
|
-
|
43
|
-
#set default key to autoincrement id
|
44
|
-
set_redis_autoincrement_key
|
45
39
|
end
|
46
40
|
|
47
41
|
def set_redis_autoincrement_key
|
48
|
-
@redis_key_config
|
42
|
+
@redis_key_config ||= [:id]
|
49
43
|
|
50
44
|
# get value
|
51
45
|
define_method :id do
|
@@ -64,12 +58,9 @@ module RedisModelExtension
|
|
64
58
|
private :id= #set it as private
|
65
59
|
|
66
60
|
redis_fields_config[:id] = :autoincrement
|
67
|
-
|
68
61
|
end
|
69
62
|
|
70
63
|
def remove_redis_autoincrement_key
|
71
|
-
|
72
|
-
puts "#{self.name} : remove"
|
73
64
|
# remove get value
|
74
65
|
remove_method :id
|
75
66
|
|
@@ -155,6 +146,12 @@ module RedisModelExtension
|
|
155
146
|
end
|
156
147
|
|
157
148
|
module Initialize
|
149
|
+
extend ActiveSupport::Concern
|
150
|
+
|
151
|
+
included do
|
152
|
+
redis_save_fields_with_nil true
|
153
|
+
set_redis_autoincrement_key
|
154
|
+
end
|
158
155
|
|
159
156
|
# initialize instance
|
160
157
|
def initialize(args={})
|
@@ -176,4 +173,4 @@ module RedisModelExtension
|
|
176
173
|
end
|
177
174
|
|
178
175
|
end
|
179
|
-
end
|
176
|
+
end
|
@@ -38,6 +38,8 @@ module RedisModelExtension
|
|
38
38
|
def initialize_redis_model_methods conf
|
39
39
|
puts "WARNING: This initilization method is deprecated and will be removed in future! \n Please read documentation how to change your model to use new initialization methods"
|
40
40
|
|
41
|
+
remove_redis_autoincrement_key
|
42
|
+
|
41
43
|
@conf = {:reject_nil_values => true}.merge(conf)
|
42
44
|
#take all fields and make methods for them
|
43
45
|
conf[:fields].each do |name, action|
|
@@ -16,9 +16,10 @@ module RedisModelExtension
|
|
16
16
|
|
17
17
|
# save method - save all attributes (fields) and create aliases
|
18
18
|
def save
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
perform = lambda do
|
20
|
+
# can be saved into redis?
|
21
|
+
if valid?
|
22
|
+
|
22
23
|
#autoicrement id
|
23
24
|
self.send("id=", increment_id) if redis_key_config.include?(:id) && !self.id?
|
24
25
|
|
@@ -36,23 +37,25 @@ module RedisModelExtension
|
|
36
37
|
#perform save to redis hash
|
37
38
|
RedisModelExtension::Database.redis.hmset(generated_key, *args.inject([]){ |arr,kv| arr + [kv[0], value_to_redis(kv[0], kv[1])]})
|
38
39
|
|
39
|
-
#destroy aliases
|
40
|
+
# destroy aliases
|
40
41
|
destroy_aliases!
|
41
42
|
create_aliases
|
42
43
|
|
43
44
|
#after save make sure instance remember old key to know if it needs to be ranamed
|
44
45
|
store_keys
|
45
46
|
end
|
47
|
+
end
|
46
48
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
perform.()
|
51
|
-
end
|
52
|
-
else
|
49
|
+
run_callbacks :save do
|
50
|
+
unless exists?
|
51
|
+
run_callbacks :create do
|
53
52
|
perform.()
|
54
53
|
end
|
54
|
+
else
|
55
|
+
perform.()
|
55
56
|
end
|
57
|
+
end
|
58
|
+
unless errors.any?
|
56
59
|
return self
|
57
60
|
else
|
58
61
|
return false
|
@@ -63,7 +66,7 @@ module RedisModelExtension
|
|
63
66
|
def create_aliases
|
64
67
|
main_key = redis_key
|
65
68
|
redis_alias_config.each do |alias_name, fields|
|
66
|
-
RedisModelExtension::Database.redis.
|
69
|
+
RedisModelExtension::Database.redis.sadd(redis_alias_key(alias_name), main_key) if valid_alias_key? alias_name
|
67
70
|
end
|
68
71
|
end
|
69
72
|
|
@@ -95,7 +98,9 @@ module RedisModelExtension
|
|
95
98
|
#do it only if it is existing object!
|
96
99
|
if redis_old_keys[:aliases].size > 0
|
97
100
|
redis_old_keys[:aliases].each do |alias_key|
|
98
|
-
RedisModelExtension::Database.redis.
|
101
|
+
RedisModelExtension::Database.redis.srem alias_key, redis_old_keys[:key]
|
102
|
+
#delete alias with 0 keys
|
103
|
+
RedisModelExtension::Database.redis.del(alias_key) if RedisModelExtension::Database.redis.scard(alias_key).to_i == 0
|
99
104
|
end
|
100
105
|
end
|
101
106
|
end
|
@@ -40,7 +40,7 @@ module RedisModelExtension
|
|
40
40
|
when :bool then value.to_s.to_bool
|
41
41
|
when :symbol then value.to_s.to_sym
|
42
42
|
when :array then value.is_a?(String) ? JSON.parse(value) : value
|
43
|
-
when :hash then value.is_a?(String) ? JSON.parse(value) : value
|
43
|
+
when :hash then value.is_a?(String) ? Hashr.new(JSON.parse(value)) : Hashr.new(value)
|
44
44
|
when :time then value.is_a?(String) ? Time.parse(value) : value
|
45
45
|
when :date then value.is_a?(String) ? Date.parse(value) : value
|
46
46
|
else value
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "redis-model-extension"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.1"
|
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-30"
|
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 = [
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
"VERSION",
|
26
26
|
"config/redis_config.yml.example",
|
27
27
|
"config/redis_setup.conf",
|
28
|
+
"example/benchmark.rb",
|
28
29
|
"lib/database.rb",
|
29
30
|
"lib/redis-model-extension.rb",
|
30
31
|
"lib/redis-model-extension/attributes.rb",
|
@@ -73,53 +74,56 @@ Gem::Specification.new do |s|
|
|
73
74
|
s.add_runtime_dependency(%q<i18n>, [">= 0"])
|
74
75
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
75
76
|
s.add_runtime_dependency(%q<activemodel>, [">= 0"])
|
77
|
+
s.add_runtime_dependency(%q<hashr>, [">= 0"])
|
76
78
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
77
79
|
s.add_development_dependency(%q<shoulda-context>, [">= 0"])
|
78
80
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
79
|
-
s.add_development_dependency(%q<simplecov>, ["
|
81
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
80
82
|
s.add_development_dependency(%q<rake>, [">= 0"])
|
81
83
|
s.add_development_dependency(%q<rack>, [">= 0"])
|
82
84
|
s.add_development_dependency(%q<sdoc>, [">= 0"])
|
83
85
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
84
|
-
s.add_development_dependency(%q<jeweler>, ["
|
85
|
-
s.add_development_dependency(%q<turn>, ["
|
86
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
87
|
+
s.add_development_dependency(%q<turn>, [">= 0"])
|
86
88
|
s.add_development_dependency(%q<minitest>, [">= 0"])
|
87
|
-
s.add_development_dependency(%q<ansi>, ["
|
89
|
+
s.add_development_dependency(%q<ansi>, [">= 0"])
|
88
90
|
else
|
89
91
|
s.add_dependency(%q<redis>, [">= 0"])
|
90
92
|
s.add_dependency(%q<i18n>, [">= 0"])
|
91
93
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
92
94
|
s.add_dependency(%q<activemodel>, [">= 0"])
|
95
|
+
s.add_dependency(%q<hashr>, [">= 0"])
|
93
96
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
94
97
|
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
95
98
|
s.add_dependency(%q<mocha>, [">= 0"])
|
96
|
-
s.add_dependency(%q<simplecov>, ["
|
99
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
97
100
|
s.add_dependency(%q<rake>, [">= 0"])
|
98
101
|
s.add_dependency(%q<rack>, [">= 0"])
|
99
102
|
s.add_dependency(%q<sdoc>, [">= 0"])
|
100
103
|
s.add_dependency(%q<bundler>, [">= 0"])
|
101
|
-
s.add_dependency(%q<jeweler>, ["
|
102
|
-
s.add_dependency(%q<turn>, ["
|
104
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
105
|
+
s.add_dependency(%q<turn>, [">= 0"])
|
103
106
|
s.add_dependency(%q<minitest>, [">= 0"])
|
104
|
-
s.add_dependency(%q<ansi>, ["
|
107
|
+
s.add_dependency(%q<ansi>, [">= 0"])
|
105
108
|
end
|
106
109
|
else
|
107
110
|
s.add_dependency(%q<redis>, [">= 0"])
|
108
111
|
s.add_dependency(%q<i18n>, [">= 0"])
|
109
112
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
110
113
|
s.add_dependency(%q<activemodel>, [">= 0"])
|
114
|
+
s.add_dependency(%q<hashr>, [">= 0"])
|
111
115
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
112
116
|
s.add_dependency(%q<shoulda-context>, [">= 0"])
|
113
117
|
s.add_dependency(%q<mocha>, [">= 0"])
|
114
|
-
s.add_dependency(%q<simplecov>, ["
|
118
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
115
119
|
s.add_dependency(%q<rake>, [">= 0"])
|
116
120
|
s.add_dependency(%q<rack>, [">= 0"])
|
117
121
|
s.add_dependency(%q<sdoc>, [">= 0"])
|
118
122
|
s.add_dependency(%q<bundler>, [">= 0"])
|
119
|
-
s.add_dependency(%q<jeweler>, ["
|
120
|
-
s.add_dependency(%q<turn>, ["
|
123
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
124
|
+
s.add_dependency(%q<turn>, [">= 0"])
|
121
125
|
s.add_dependency(%q<minitest>, [">= 0"])
|
122
|
-
s.add_dependency(%q<ansi>, ["
|
126
|
+
s.add_dependency(%q<ansi>, [">= 0"])
|
123
127
|
end
|
124
128
|
end
|
125
129
|
|
data/test/models.rb
CHANGED
@@ -81,3 +81,18 @@ class WithCallbacks
|
|
81
81
|
def before_create_method
|
82
82
|
end
|
83
83
|
end
|
84
|
+
|
85
|
+
class NilTestOldRedisModel
|
86
|
+
REDIS_MODEL_CONF = {
|
87
|
+
:fields => {
|
88
|
+
:integer => :to_i,
|
89
|
+
:string => :to_s,
|
90
|
+
},
|
91
|
+
:required => [:string],
|
92
|
+
:redis_key => [:string],
|
93
|
+
:redis_aliases => {},
|
94
|
+
:reject_nil_values => false
|
95
|
+
}
|
96
|
+
include RedisModel
|
97
|
+
initialize_redis_model_methods REDIS_MODEL_CONF
|
98
|
+
end
|
@@ -5,7 +5,7 @@ class RedisModelOldConfigTest < Test::Unit::TestCase
|
|
5
5
|
setup do
|
6
6
|
RedisModelExtension::Database.redis.flushdb
|
7
7
|
|
8
|
-
@args = {"integer" => 12345, :string => "foo", :symbol => :bar, :boolean => true, :array => [1,2,3], :hash => {
|
8
|
+
@args = {"integer" => 12345, :string => "foo", :symbol => :bar, :boolean => true, :array => [1,2,3], :hash => {:foo=>"bar", :test => 2}}
|
9
9
|
@test_model = TestOldRedisModel.new(@args)
|
10
10
|
@test_model_partial = TestOldRedisModel.new(:integer => 12345, :string => "foo")
|
11
11
|
end
|
@@ -28,7 +28,7 @@ class RedisModelOldConfigTest < Test::Unit::TestCase
|
|
28
28
|
assert_equal @test_model.symbol, :bar
|
29
29
|
assert_equal @test_model.boolean, true
|
30
30
|
assert_equal @test_model.array, [1,2,3]
|
31
|
-
assert_equal @test_model.hash, {
|
31
|
+
assert_equal @test_model.hash, {:foo=>"bar", :test => 2}
|
32
32
|
end
|
33
33
|
|
34
34
|
should "return valid exists?" do
|
@@ -150,7 +150,7 @@ class RedisModelOldConfigTest < Test::Unit::TestCase
|
|
150
150
|
|
151
151
|
context "alias" do
|
152
152
|
should "be getted by alias" do
|
153
|
-
@getted_model = TestOldRedisModel.get_by_alias(:token ,@args)
|
153
|
+
@getted_model = TestOldRedisModel.get_by_alias(:token ,@args).first
|
154
154
|
assert_equal @getted_model.integer, @test_model.integer
|
155
155
|
assert_equal @getted_model.string, @test_model.string
|
156
156
|
assert_equal @getted_model.symbol, @test_model.symbol
|
@@ -158,30 +158,16 @@ class RedisModelOldConfigTest < Test::Unit::TestCase
|
|
158
158
|
end
|
159
159
|
|
160
160
|
should "be getted after change in alias" do
|
161
|
-
getted_model = TestOldRedisModel.get_by_alias(:token ,@args)
|
161
|
+
getted_model = TestOldRedisModel.get_by_alias(:token ,@args).first
|
162
162
|
getted_model.symbol = "Test_token"
|
163
163
|
getted_model.save
|
164
|
-
assert_equal getted_model.integer, TestOldRedisModel.get_by_alias(:token ,:symbol => "Test_token").integer
|
164
|
+
assert_equal getted_model.integer, TestOldRedisModel.get_by_alias(:token ,:symbol => "Test_token").first.integer
|
165
165
|
end
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
169
|
context "without rejected nil values on save" do
|
170
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
171
|
@args = {integer: 100, string: "test"}
|
186
172
|
@nil_test_model = NilTestOldRedisModel.new(@args)
|
187
173
|
end
|
@@ -215,4 +201,4 @@ class RedisModelOldConfigTest < Test::Unit::TestCase
|
|
215
201
|
end
|
216
202
|
end
|
217
203
|
end
|
218
|
-
end
|
204
|
+
end
|
@@ -10,7 +10,7 @@ class AttributesTest < Test::Unit::TestCase
|
|
10
10
|
:symbol => :bar,
|
11
11
|
:boolean => true,
|
12
12
|
:array => [1,2,3],
|
13
|
-
:hash => {
|
13
|
+
:hash => {:foo=>"bar", :test => 2},
|
14
14
|
:time => @time,
|
15
15
|
:date => Date.today,
|
16
16
|
:float => 12.32,
|
@@ -30,5 +30,13 @@ class AttributesTest < Test::Unit::TestCase
|
|
30
30
|
assert_same_elements @test_model.to_json.split(","), @args.to_json.split(",")
|
31
31
|
end
|
32
32
|
|
33
|
+
should "should access hash by []" do
|
34
|
+
assert_equal @test_model.hash[:foo], "bar"
|
35
|
+
end
|
36
|
+
|
37
|
+
should "should access hash by hashr" do
|
38
|
+
assert_equal @test_model.hash.foo, "bar"
|
39
|
+
end
|
40
|
+
|
33
41
|
end
|
34
42
|
end
|
@@ -72,10 +72,9 @@ class DynamicAliasTest < Test::Unit::TestCase
|
|
72
72
|
end
|
73
73
|
|
74
74
|
should "destroy!" do
|
75
|
-
pp RedisModelExtension::Database.redis.keys("*")
|
76
75
|
@dynamic_alias.destroy!
|
77
76
|
assert_equal @dynamic_alias.exists?, false, "Should not exists"
|
78
|
-
assert_equal DynamicAlias.exists?(@args.merge(:
|
77
|
+
assert_equal DynamicAlias.exists?(@args.merge(:name => @dynamic_alias.name)), false, "Should not exist by class method"
|
79
78
|
end
|
80
79
|
|
81
80
|
end
|
@@ -88,15 +87,19 @@ class DynamicAliasTest < Test::Unit::TestCase
|
|
88
87
|
end
|
89
88
|
|
90
89
|
should "be getted by dynamic alias" do
|
91
|
-
@
|
92
|
-
assert_not_nil @
|
90
|
+
@getted_models = DynamicAlias.get_by_alias(:items_with_name, @args)
|
91
|
+
assert_not_nil @getted_models, "Should return array"
|
92
|
+
assert_equal @getted_models.size, 1, "Should return [] with 1 instance"
|
93
|
+
@getted_model = @getted_models.first
|
93
94
|
assert_equal @getted_model.name, @dynamic_alias.name
|
94
95
|
assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
|
95
96
|
end
|
96
97
|
|
97
98
|
should "be getted by get_by_name_of_alias" do
|
98
|
-
@
|
99
|
-
assert_not_nil @
|
99
|
+
@getted_models = DynamicAlias.get_by_items_with_name(@args)
|
100
|
+
assert_not_nil @getted_models, "Should return array"
|
101
|
+
assert_equal @getted_models.size, 1, "Should return [] with 1 instance"
|
102
|
+
@getted_model = @getted_models.first
|
100
103
|
assert_equal @getted_model.name, @dynamic_alias.name
|
101
104
|
assert_same_elements @getted_model.items.to_json.split(","), @dynamic_alias.items.to_json.split(",")
|
102
105
|
end
|
@@ -134,14 +137,14 @@ class DynamicAliasTest < Test::Unit::TestCase
|
|
134
137
|
end
|
135
138
|
|
136
139
|
should "be getted after change in alias" do
|
137
|
-
@getted_model = DynamicAlias.get_by_alias(:items_with_name ,@args)
|
140
|
+
@getted_model = DynamicAlias.get_by_alias(:items_with_name ,@args).first
|
138
141
|
assert_not_nil @getted_model, "Should return model"
|
139
142
|
@getted_model.items[:bar] = "Test_bar"
|
140
143
|
@getted_model.save
|
141
|
-
|
142
|
-
|
144
|
+
assert_equal DynamicAlias.get_by_alias(:items_with_name ,@getted_model.to_arg).first.name, @getted_model.name
|
145
|
+
assert_nil DynamicAlias.get_by_alias(:items_with_name ,@args), "Should not be found by old alias"
|
143
146
|
end
|
144
147
|
end
|
145
148
|
|
146
149
|
end
|
147
|
-
end
|
150
|
+
end
|
@@ -58,13 +58,23 @@ class GetFindTest < Test::Unit::TestCase
|
|
58
58
|
end
|
59
59
|
|
60
60
|
should "be getted by alias" do
|
61
|
-
@getted_model = TestRedisModel.get_by_alias(:token, @args)
|
61
|
+
@getted_model = TestRedisModel.get_by_alias(:token, @args).first
|
62
62
|
assert_equal @getted_model.integer, @test_model.integer
|
63
63
|
assert_equal @getted_model.string, @test_model.string
|
64
64
|
assert_equal @getted_model.symbol, @test_model.symbol
|
65
65
|
assert_equal @getted_model.boolean, @test_model.boolean
|
66
66
|
end
|
67
67
|
|
68
|
+
should "and have more than one instances in one alias" do
|
69
|
+
test_model2 = TestRedisModel.new(@args.merge(string: "test2"))
|
70
|
+
test_model2.save
|
71
|
+
test_model3 = TestRedisModel.new(@args.merge(string: "test3"))
|
72
|
+
test_model3.save
|
73
|
+
assert_equal TestRedisModel.get_by_alias(:token, @args).size, 3, "Should have 3 instances under 1 alias (find)"
|
74
|
+
assert_equal TestRedisModel.find_by_alias(:token, @args).size, 3, "Should have 3 instances under 1 alias (get)"
|
75
|
+
assert_same_elements TestRedisModel.find_by_alias(:token, @args).collect{|t| t.string }, ["foo", "test2", "test3"]
|
76
|
+
end
|
77
|
+
|
68
78
|
should "be find by alias" do
|
69
79
|
@getted_models = TestRedisModel.find_by_alias(:token, :symbol => :bar)
|
70
80
|
assert_equal @getted_models.size, 1, "Should be only one with alias"
|
@@ -100,10 +110,12 @@ class GetFindTest < Test::Unit::TestCase
|
|
100
110
|
end
|
101
111
|
|
102
112
|
should "be getted after change in alias" do
|
103
|
-
|
113
|
+
getted_models = TestRedisModel.get_by_alias(:token ,@args)
|
114
|
+
assert_equal getted_models.size, 1, "Should return array of objects"
|
115
|
+
getted_model = getted_models.first
|
104
116
|
getted_model.symbol = "Test_token"
|
105
117
|
getted_model.save
|
106
|
-
assert_equal getted_model.integer, TestRedisModel.get_by_alias(:token ,:symbol => "Test_token").integer
|
118
|
+
assert_equal getted_model.integer, TestRedisModel.get_by_alias(:token ,:symbol => "Test_token").first.integer
|
107
119
|
end
|
108
120
|
end
|
109
121
|
|
@@ -24,6 +24,17 @@ class RedisKeyTest < Test::Unit::TestCase
|
|
24
24
|
assert_equal TestRedisModel.generate_key(@args.merge({:string => nil})), "#{TestRedisModel.to_s.underscore}:key:*"
|
25
25
|
end
|
26
26
|
|
27
|
+
should "generate right search key even if the order is random" do
|
28
|
+
class Article
|
29
|
+
include RedisModelExtension
|
30
|
+
redis_field :aid, :integer
|
31
|
+
redis_key :aid
|
32
|
+
redis_field :owner_id, :string
|
33
|
+
end
|
34
|
+
|
35
|
+
assert_equal 'redis_key_test/article:key:2', Article.generate_key(aid: 2)
|
36
|
+
end
|
37
|
+
|
27
38
|
|
28
39
|
should "generate right key" do
|
29
40
|
assert_equal @test_model.redis_key, "#{TestRedisModel.to_s.underscore}:key:foo"
|
@@ -116,4 +127,4 @@ class RedisKeyTest < Test::Unit::TestCase
|
|
116
127
|
|
117
128
|
end
|
118
129
|
end
|
119
|
-
end
|
130
|
+
end
|
@@ -35,7 +35,7 @@ class VariableTypesTest < Test::Unit::TestCase
|
|
35
35
|
assert_equal @test_model.symbol, :bar
|
36
36
|
assert_equal @test_model.boolean, true
|
37
37
|
assert_equal @test_model.array, [1,2,3]
|
38
|
-
assert_equal @test_model.hash, {
|
38
|
+
assert_equal @test_model.hash, {:foo=>"bar", :test => 2}
|
39
39
|
assert_equal @test_model.time, @time
|
40
40
|
assert_equal @test_model.date, Date.today
|
41
41
|
assert_equal @test_model.float, 12.43
|
@@ -73,7 +73,7 @@ class VariableTypesTest < Test::Unit::TestCase
|
|
73
73
|
@test_model.symbol = :foo
|
74
74
|
@test_model.boolean = false
|
75
75
|
@test_model.array = [4,5,6]
|
76
|
-
@test_model.hash = {
|
76
|
+
@test_model.hash = {:bar => "foo"}
|
77
77
|
@test_model.time = @time-100
|
78
78
|
@test_model.date = Date.today-10
|
79
79
|
@test_model.float = 25.43
|
@@ -82,7 +82,7 @@ class VariableTypesTest < Test::Unit::TestCase
|
|
82
82
|
assert_equal @test_model.symbol, :foo
|
83
83
|
assert_equal @test_model.boolean, false
|
84
84
|
assert_equal @test_model.array, [4,5,6]
|
85
|
-
assert_equal @test_model.hash, {
|
85
|
+
assert_equal @test_model.hash, {:bar => "foo"}
|
86
86
|
assert_equal @test_model.time, @time-100
|
87
87
|
assert_equal @test_model.date, Date.today-10
|
88
88
|
assert_equal @test_model.float, 25.43
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis-model-extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &70323131409560 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70323131409560
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: i18n
|
27
|
-
requirement: &
|
27
|
+
requirement: &70323131409020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70323131409020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: activesupport
|
38
|
-
requirement: &
|
38
|
+
requirement: &70323131408240 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70323131408240
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: activemodel
|
49
|
-
requirement: &
|
49
|
+
requirement: &70323131407640 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,21 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70323131407640
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: hashr
|
60
|
+
requirement: &70323131407100 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70323131407100
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: shoulda
|
60
|
-
requirement: &
|
71
|
+
requirement: &70323131406320 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *70323131406320
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: shoulda-context
|
71
|
-
requirement: &
|
82
|
+
requirement: &70323131405480 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - ! '>='
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '0'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *70323131405480
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: mocha
|
82
|
-
requirement: &
|
93
|
+
requirement: &70323131404320 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - ! '>='
|
@@ -87,21 +98,21 @@ dependencies:
|
|
87
98
|
version: '0'
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *70323131404320
|
91
102
|
- !ruby/object:Gem::Dependency
|
92
103
|
name: simplecov
|
93
|
-
requirement: &
|
104
|
+
requirement: &70323131403740 !ruby/object:Gem::Requirement
|
94
105
|
none: false
|
95
106
|
requirements:
|
96
|
-
- -
|
107
|
+
- - ! '>='
|
97
108
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0
|
109
|
+
version: '0'
|
99
110
|
type: :development
|
100
111
|
prerelease: false
|
101
|
-
version_requirements: *
|
112
|
+
version_requirements: *70323131403740
|
102
113
|
- !ruby/object:Gem::Dependency
|
103
114
|
name: rake
|
104
|
-
requirement: &
|
115
|
+
requirement: &70323131402900 !ruby/object:Gem::Requirement
|
105
116
|
none: false
|
106
117
|
requirements:
|
107
118
|
- - ! '>='
|
@@ -109,10 +120,10 @@ dependencies:
|
|
109
120
|
version: '0'
|
110
121
|
type: :development
|
111
122
|
prerelease: false
|
112
|
-
version_requirements: *
|
123
|
+
version_requirements: *70323131402900
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: rack
|
115
|
-
requirement: &
|
126
|
+
requirement: &70323131402080 !ruby/object:Gem::Requirement
|
116
127
|
none: false
|
117
128
|
requirements:
|
118
129
|
- - ! '>='
|
@@ -120,10 +131,10 @@ dependencies:
|
|
120
131
|
version: '0'
|
121
132
|
type: :development
|
122
133
|
prerelease: false
|
123
|
-
version_requirements: *
|
134
|
+
version_requirements: *70323131402080
|
124
135
|
- !ruby/object:Gem::Dependency
|
125
136
|
name: sdoc
|
126
|
-
requirement: &
|
137
|
+
requirement: &70323131671260 !ruby/object:Gem::Requirement
|
127
138
|
none: false
|
128
139
|
requirements:
|
129
140
|
- - ! '>='
|
@@ -131,10 +142,10 @@ dependencies:
|
|
131
142
|
version: '0'
|
132
143
|
type: :development
|
133
144
|
prerelease: false
|
134
|
-
version_requirements: *
|
145
|
+
version_requirements: *70323131671260
|
135
146
|
- !ruby/object:Gem::Dependency
|
136
147
|
name: bundler
|
137
|
-
requirement: &
|
148
|
+
requirement: &70323131670560 !ruby/object:Gem::Requirement
|
138
149
|
none: false
|
139
150
|
requirements:
|
140
151
|
- - ! '>='
|
@@ -142,32 +153,32 @@ dependencies:
|
|
142
153
|
version: '0'
|
143
154
|
type: :development
|
144
155
|
prerelease: false
|
145
|
-
version_requirements: *
|
156
|
+
version_requirements: *70323131670560
|
146
157
|
- !ruby/object:Gem::Dependency
|
147
158
|
name: jeweler
|
148
|
-
requirement: &
|
159
|
+
requirement: &70323131669940 !ruby/object:Gem::Requirement
|
149
160
|
none: false
|
150
161
|
requirements:
|
151
|
-
- -
|
162
|
+
- - ! '>='
|
152
163
|
- !ruby/object:Gem::Version
|
153
|
-
version:
|
164
|
+
version: '0'
|
154
165
|
type: :development
|
155
166
|
prerelease: false
|
156
|
-
version_requirements: *
|
167
|
+
version_requirements: *70323131669940
|
157
168
|
- !ruby/object:Gem::Dependency
|
158
169
|
name: turn
|
159
|
-
requirement: &
|
170
|
+
requirement: &70323131669400 !ruby/object:Gem::Requirement
|
160
171
|
none: false
|
161
172
|
requirements:
|
162
|
-
- -
|
173
|
+
- - ! '>='
|
163
174
|
- !ruby/object:Gem::Version
|
164
|
-
version: 0
|
175
|
+
version: '0'
|
165
176
|
type: :development
|
166
177
|
prerelease: false
|
167
|
-
version_requirements: *
|
178
|
+
version_requirements: *70323131669400
|
168
179
|
- !ruby/object:Gem::Dependency
|
169
180
|
name: minitest
|
170
|
-
requirement: &
|
181
|
+
requirement: &70323131668760 !ruby/object:Gem::Requirement
|
171
182
|
none: false
|
172
183
|
requirements:
|
173
184
|
- - ! '>='
|
@@ -175,18 +186,18 @@ dependencies:
|
|
175
186
|
version: '0'
|
176
187
|
type: :development
|
177
188
|
prerelease: false
|
178
|
-
version_requirements: *
|
189
|
+
version_requirements: *70323131668760
|
179
190
|
- !ruby/object:Gem::Dependency
|
180
191
|
name: ansi
|
181
|
-
requirement: &
|
192
|
+
requirement: &70323131668020 !ruby/object:Gem::Requirement
|
182
193
|
none: false
|
183
194
|
requirements:
|
184
|
-
- -
|
195
|
+
- - ! '>='
|
185
196
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
197
|
+
version: '0'
|
187
198
|
type: :development
|
188
199
|
prerelease: false
|
189
|
-
version_requirements: *
|
200
|
+
version_requirements: *70323131668020
|
190
201
|
description: It provides functions as find, find_by_alias, get, exists?, validate,
|
191
202
|
save etc.
|
192
203
|
email: ondrej@bartas.cz
|
@@ -204,6 +215,7 @@ files:
|
|
204
215
|
- VERSION
|
205
216
|
- config/redis_config.yml.example
|
206
217
|
- config/redis_setup.conf
|
218
|
+
- example/benchmark.rb
|
207
219
|
- lib/database.rb
|
208
220
|
- lib/redis-model-extension.rb
|
209
221
|
- lib/redis-model-extension/attributes.rb
|
@@ -252,7 +264,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
252
264
|
version: '0'
|
253
265
|
segments:
|
254
266
|
- 0
|
255
|
-
hash:
|
267
|
+
hash: 4312848391343916827
|
256
268
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
269
|
none: false
|
258
270
|
requirements:
|