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 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", "~> 0.6.4"
13
+ gem "simplecov"
13
14
  gem "rake"
14
15
  gem "rack"
15
16
  gem "sdoc" # sdoc -N .
16
17
  gem "bundler"
17
- gem "jeweler", "~> 1.8.3"
18
- gem "turn", "~> 0.8.2"
18
+ gem "jeweler"
19
+ gem "turn"
19
20
  gem "minitest"
20
- gem "ansi", "~> 1.2.5"
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
- if foo.valid?
99
- foo.save #save object
100
- else
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
- # custom errors in initialize etc.
105
- #class declaration
106
- def initialize args = {}
107
- error << "My custom error"
108
- super args
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
- #then valid? will produce false and when asked instance.errors you will get array with your errors
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(:token, :field4=> true)
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.0
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
- def self.included(base)
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
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
- 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
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
- 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
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
- extend ActiveModel::Callbacks
53
- define_model_callbacks :save, :destroy, :create
54
- end
52
+ extend ActiveModel::Callbacks
53
+ define_model_callbacks :save, :destroy, :create
55
54
  end
56
55
  end
57
56
 
@@ -31,7 +31,7 @@ module RedisModelExtension
31
31
 
32
32
  # set value into instance variable
33
33
  def value_set name, value
34
- instance_variable_set(:"@#{name}", value)
34
+ instance_variable_set(:"@#{name}", value_parse(value, redis_fields_defaults_config[name]))
35
35
  end
36
36
 
37
37
  end
@@ -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
- if klass.valid_key?(args)
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(klass.generate_key(args)).each do |key|
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
- if klass.valid_alias_key?(alias_name, args)
54
- out << klass.get_by_alias(alias_name, args) if klass.alias_exists?(alias_name, args)
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(klass.generate_alias_key(alias_name, args)).each do |key|
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
- key = RedisModelExtension::Database.redis.get(klass.generate_alias_key(alias_name, args))
100
- return klass.new_by_key(key) if RedisModelExtension::Database.redis.exists(key)
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
- key = RedisModelExtension::Database.redis.get(alias_key)
125
- return klass.new_by_key(key) if RedisModelExtension::Database.redis.exists(key)
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 = HashWithIndifferentAccess.new(RedisModelExtension::Database.redis.hgetall(key))
141
+ args = RedisModelExtension::Database.redis.hgetall(key).symbolize_keys
138
142
 
139
- new_instance = self.name.constantize.new(args)
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 = [:id]
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
- # can be saved into redis?
20
- if valid?
21
- perform = lambda do
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
- run_callbacks :save do
48
- unless exists?
49
- run_callbacks :create do
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.set(redis_alias_key(alias_name), main_key) if valid_alias_key? alias_name
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.del alias_key
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.0"
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-13"
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>, ["~> 0.6.4"])
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>, ["~> 1.8.3"])
85
- s.add_development_dependency(%q<turn>, ["~> 0.8.2"])
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>, ["~> 1.2.5"])
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>, ["~> 0.6.4"])
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>, ["~> 1.8.3"])
102
- s.add_dependency(%q<turn>, ["~> 0.8.2"])
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>, ["~> 1.2.5"])
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>, ["~> 0.6.4"])
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>, ["~> 1.8.3"])
120
- s.add_dependency(%q<turn>, ["~> 0.8.2"])
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>, ["~> 1.2.5"])
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 => {"foo"=>"bar", "test" => 2}}
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, {"foo"=>"bar", "test" => 2}
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 => {"foo"=>"bar", "test" => 2},
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(:id => @dynamic_alias.id)), false, "Should not exist by class method"
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
- @getted_model = DynamicAlias.get_by_alias(:items_with_name, @args)
92
- assert_not_nil @getted_model, "Should return model"
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
- @getted_model = DynamicAlias.get_by_items_with_name(@args)
99
- assert_not_nil @getted_model, "Should return model"
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
- assert_equal DynamicAlias.get_by_alias(:items_with_name ,@getted_model.to_arg).name, @getted_model.name
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
- getted_model = TestRedisModel.get_by_alias(:token ,@args)
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, {"foo"=>"bar", "test" => 2}
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 = {"bar" => "foo"}
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, {"bar" => "foo"}
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.0
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-13 00:00:00.000000000 Z
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: &70174569560300 !ruby/object:Gem::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: *70174569560300
24
+ version_requirements: *70323131409560
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: i18n
27
- requirement: &70174569559800 !ruby/object:Gem::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: *70174569559800
35
+ version_requirements: *70323131409020
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: activesupport
38
- requirement: &70174569552680 !ruby/object:Gem::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: *70174569552680
46
+ version_requirements: *70323131408240
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: activemodel
49
- requirement: &70174569552000 !ruby/object:Gem::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: *70174569552000
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: &70174569551340 !ruby/object:Gem::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: *70174569551340
79
+ version_requirements: *70323131406320
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: shoulda-context
71
- requirement: &70174569550640 !ruby/object:Gem::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: *70174569550640
90
+ version_requirements: *70323131405480
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: mocha
82
- requirement: &70174569548520 !ruby/object:Gem::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: *70174569548520
101
+ version_requirements: *70323131404320
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: simplecov
93
- requirement: &70174569547740 !ruby/object:Gem::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.6.4
109
+ version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *70174569547740
112
+ version_requirements: *70323131403740
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: rake
104
- requirement: &70174569547120 !ruby/object:Gem::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: *70174569547120
123
+ version_requirements: *70323131402900
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: rack
115
- requirement: &70174569546140 !ruby/object:Gem::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: *70174569546140
134
+ version_requirements: *70323131402080
124
135
  - !ruby/object:Gem::Dependency
125
136
  name: sdoc
126
- requirement: &70174569545300 !ruby/object:Gem::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: *70174569545300
145
+ version_requirements: *70323131671260
135
146
  - !ruby/object:Gem::Dependency
136
147
  name: bundler
137
- requirement: &70174569541400 !ruby/object:Gem::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: *70174569541400
156
+ version_requirements: *70323131670560
146
157
  - !ruby/object:Gem::Dependency
147
158
  name: jeweler
148
- requirement: &70174569540420 !ruby/object:Gem::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: 1.8.3
164
+ version: '0'
154
165
  type: :development
155
166
  prerelease: false
156
- version_requirements: *70174569540420
167
+ version_requirements: *70323131669940
157
168
  - !ruby/object:Gem::Dependency
158
169
  name: turn
159
- requirement: &70174569539040 !ruby/object:Gem::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.8.2
175
+ version: '0'
165
176
  type: :development
166
177
  prerelease: false
167
- version_requirements: *70174569539040
178
+ version_requirements: *70323131669400
168
179
  - !ruby/object:Gem::Dependency
169
180
  name: minitest
170
- requirement: &70174569537700 !ruby/object:Gem::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: *70174569537700
189
+ version_requirements: *70323131668760
179
190
  - !ruby/object:Gem::Dependency
180
191
  name: ansi
181
- requirement: &70174569536400 !ruby/object:Gem::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: 1.2.5
197
+ version: '0'
187
198
  type: :development
188
199
  prerelease: false
189
- version_requirements: *70174569536400
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: 1205580068854408278
267
+ hash: 4312848391343916827
256
268
  required_rubygems_version: !ruby/object:Gem::Requirement
257
269
  none: false
258
270
  requirements: