redis-model-extension 0.4.0 → 0.4.1
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 +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:
|