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 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: