activeredis 0.0.5 → 0.0.6

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.
@@ -237,7 +237,9 @@ module ActiveRedis
237
237
  # TODO Interim fix, "QUEUED" is find(id) rescue
238
238
  ids = connection.zrange "#{key_namespace}:all", 0, count
239
239
  ids.each do |id|
240
- records << find(id)
240
+ record = find(id)
241
+ records << record if record
242
+ #records << find(id)
241
243
  end
242
244
  records
243
245
  end
@@ -259,7 +261,8 @@ module ActiveRedis
259
261
  def self.find(id)
260
262
  return find_all if id == :all
261
263
  exists = connection.zscore "#{key_namespace}:all", id
262
- raise RecordNotFound.new("Couldn't find #{self.name} with ID=#{id}") unless exists
264
+ return nil unless exists
265
+ #raise RecordNotFound.new("Couldn't find #{self.name} with ID=#{id}") unless exists
263
266
  attributes = connection.hgetall "#{key_namespace}:#{id}:attributes"
264
267
  obj = self.new attributes, id
265
268
  return obj
@@ -269,7 +272,7 @@ module ActiveRedis
269
272
  finded = []
270
273
  records = find_all
271
274
  records.each do |record|
272
- if record.attributes[field.to_s] == value.to_s
275
+ if record && record.attributes[field.to_s] == value.to_s
273
276
  finded << record
274
277
  end
275
278
  end
@@ -282,7 +285,7 @@ module ActiveRedis
282
285
  ids = connection.zrange "#{key_namespace}:all", 0, count
283
286
  ids.each do |id|
284
287
  record = find(id)
285
- if record.attributes[field.to_s] == value.to_s
288
+ if record && record.attributes[field.to_s] == value.to_s
286
289
  return record
287
290
  end
288
291
  end
@@ -290,11 +293,13 @@ module ActiveRedis
290
293
  end
291
294
 
292
295
  def self.fast_find_by_param(field, value)
293
- if ActiveRedis.fast_find_field != nil && ActiveRedis.fast_find_field == field
296
+ find_id = nil
297
+ if ActiveRedis.fast_find_field == field
294
298
  find_id = connection.hget "#{key_namespace}:fast_find_field", value
295
299
  elsif field == :no
296
300
  find_id = connection.hget "#{key_namespace}:no", value
297
301
  end
302
+ find_id
298
303
  end
299
304
 
300
305
  def self.method_missing(name, *args)
@@ -1,3 +1,3 @@
1
1
  module ActiveRedis
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeredis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-01 00:00:00.000000000 Z
13
+ date: 2013-04-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: redis
@@ -79,7 +79,6 @@ files:
79
79
  - benchmark_results.txt
80
80
  - lib/activeredis.rb
81
81
  - lib/activeredis/version.rb
82
- - lib/old_activeredis.rb
83
82
  - sample/user.rb
84
83
  - spec/active_redis_spec.rb
85
84
  - spec/spec_helper.rb
@@ -1,326 +0,0 @@
1
- require 'redis'
2
- require 'time'
3
- require 'active_model'
4
-
5
- require 'active_model/version'
6
-
7
- class Module
8
- def module_attr_reader(*syms)
9
- syms.each do |sym|
10
- class_eval(<<-EOS, __FILE__, __LINE__ + 1)
11
- @@#{sym} = nil unless defined?(@@#{sym})
12
- def self.#{sym}()
13
- return @@#{sym}
14
- end
15
- EOS
16
- end
17
- end
18
- def module_attr_writer(*syms)
19
- syms.each do |sym|
20
- class_eval(<<-EOS, __FILE__, __LINE__ + 1)
21
- def self.#{sym}=(obj)
22
- @@#{sym} = obj
23
- end
24
- EOS
25
- end
26
- end
27
- def module_attr_accessor(*syms)
28
- module_attr_reader(*syms)
29
- module_attr_writer(*syms)
30
- end
31
- end
32
-
33
- module ActiveRedis
34
- module_attr_accessor :host, :port
35
- @@host = "localhost"
36
- @@port = "6379"
37
-
38
- class ActiveRedisError < StandardError
39
- end
40
-
41
- # Raised when Active Redis cannot find record by given id or set of ids.
42
- class RecordNotFound < ActiveRedisError
43
- end
44
-
45
- class Base
46
- include ActiveModel::Validations
47
- include ActiveModel::Dirty
48
- include ActiveModel::Serialization
49
- include ActiveModel::Serializers::JSON
50
- include ActiveModel::Naming
51
-
52
- QUEUED = "QUEUED"
53
-
54
- # RAILSISM
55
- # Returns a hash of all the attributes with their names as keys and the values of the attributes as values
56
- # --> means: Strings as keys!
57
- # --> initialize stringifies
58
- #
59
- # called by to_json for_example
60
- attr_reader :attributes
61
- attr_reader :id
62
- attr :frozen
63
-
64
- class << self; attr_accessor :_fields; end
65
-
66
- # INSTANCE METHODS
67
-
68
- def initialize(attributes = {}, id = nil)
69
- @id = id if id
70
- @attributes = {}
71
- initialize_attributes(attributes)
72
- frozen = false
73
- end
74
-
75
- # Object's attributes' keys are converted to strings because of railsisms.
76
- # Because of activeredisism, also values are converted to strings for consistency.
77
- def initialize_attributes(attributes)
78
- fields = Hash[[self.class._fields, Array.new(self.class._fields.size)].transpose]
79
- fields.stringify_keys! # NEEDS to be strings for railsisms
80
- attributes.stringify_keys! # NEEDS to be strings for railsisms
81
- attributes.each_pair { |key, value| attributes[key] = value.to_s }
82
- fields.merge!(attributes)
83
- @attributes.merge!(fields)
84
- @attributes.each_pair do |key, value|
85
- self.class.define_field key
86
- end
87
- end
88
-
89
- def save
90
- creation = new_record?
91
- @id = self.class.fetch_new_identifier if creation
92
- while true
93
- begin
94
- connection.multi
95
- rescue
96
- sleep(0.1)
97
- redo
98
- end
99
- break
100
- end
101
- if @attributes.size > 0
102
- @attributes.each_pair { |key, value|
103
- if key.to_sym == :updated_at
104
- value = Time.now.to_s
105
- end
106
- connection.hset("#{key_namespace}:attributes", key, value)
107
- }
108
- end
109
- connection.zadd("#{class_namespace}:all", @id, @id)
110
- connection.exec
111
- return true
112
- end
113
-
114
- def update_attributes(attributes)
115
- attributes.stringify_keys! # NEEDS to be strings for railsisms
116
- attributes.each_pair { |key, value| attributes[key] = value.to_s }
117
- @attributes.merge!(attributes)
118
- attributes.each_pair do |key, value|
119
- self.class.define_field key
120
- end
121
- save
122
- end
123
-
124
- def reload
125
- @attributes = connection.hgetall "#{key_namespace}:attributes"
126
- end
127
-
128
- def new_record?
129
- @id == nil
130
- end
131
-
132
- def key_namespace
133
- "#{self.class.key_namespace}:#{self.id}"
134
- end
135
-
136
- def class_namespace
137
- "#{self.class.key_namespace}"
138
- end
139
-
140
- def connection
141
- self.class.connection
142
- end
143
-
144
- def destroy
145
- connection.multi do
146
- connection.del "#{key_namespace}:attributes"
147
- connection.zrem "#{class_namespace}:all", @id
148
- @frozen = true
149
- end
150
- return true
151
- end
152
-
153
- def frozen?
154
- @frozen
155
- end
156
-
157
- def add_attribute(name, value=nil)
158
- initialize_attributes({name => value})
159
- end
160
-
161
- def [](field)
162
- send(field)
163
- end
164
-
165
- def []=(field, value)
166
- send(field+"=", value)
167
- end
168
-
169
- #
170
- # CLASS METHODS
171
- #
172
-
173
- def self.create(attributes)
174
- self.new(attributes).save
175
- end
176
-
177
- def self.define_field(field)
178
- define_method field.to_sym do
179
- if field.to_sym == :updated_at
180
- Time.parse(@attributes["#{field}"])
181
- else
182
- @attributes["#{field}"]
183
- end
184
- end
185
-
186
- define_method "#{field}=".to_sym do |new_value|
187
- @attributes["#{field}"] = new_value.to_s
188
- end
189
- end
190
-
191
- # Run this method to declare the fields of your model.
192
- def self.fields(*fields)
193
- self._fields ||= []
194
- self._fields = fields
195
- end
196
-
197
- def self.get_fields
198
- self._fields
199
- end
200
-
201
- def self.key_namespace
202
- "#{self}"
203
- end
204
-
205
- def self.fetch_new_identifier
206
- self.connection.incr self.identifier_sequencer
207
- end
208
-
209
- def self.identifier_sequencer
210
- "#{key_namespace}:sequence"
211
- end
212
-
213
- def self.inherited(child)
214
- #puts "Redis.new(:host => #{ActiveRedis.host}, :port => #{ActiveRedis.port})"
215
- @@redis = Redis.new(:host => ActiveRedis.host, :port => ActiveRedis.port)
216
- @@class = child
217
- end
218
-
219
- def self.redis_information
220
- connection.info # call_command [:info]
221
- end
222
-
223
- def self.connection
224
- @@redis
225
- end
226
-
227
- def self.count
228
- begin
229
- size = connection.zcard "#{key_namespace}:all"
230
- while size == QUEUED
231
- sleep(0.1)
232
- size = connection.zcard "#{key_namespace}:all"
233
- end
234
- return size
235
- rescue RuntimeError => e
236
- return 0
237
- end
238
- end
239
-
240
- def self.find_all()
241
- record = []
242
- # TODO Interim fix, "QUEUED" is find(id) rescue
243
- while true
244
- ids = nil
245
- while true
246
- ids = connection.zrange "#{key_namespace}:all", 0, count
247
- break if ids != QUEUED
248
- sleep(0.1)
249
- end
250
- begin
251
- ids.each do |id|
252
- record << find(id)
253
- end
254
- rescue
255
- redo
256
- end
257
- break
258
- end
259
- record
260
- end
261
-
262
- def self.all
263
- find_all
264
- end
265
-
266
- def self.delete_all
267
- records = find_all
268
- records.each do |record|
269
- record.destroy
270
- end
271
- end
272
-
273
- def self.find(id)
274
- return find_all if id == :all
275
- exists = connection.zscore "#{key_namespace}:all", id
276
- raise RecordNotFound.new("Couldn't find #{self.name} with ID=#{id}") unless exists
277
- attributes = connection.hgetall "#{key_namespace}:#{id}:attributes"
278
- obj = self.new attributes, id
279
- return obj
280
- end
281
-
282
- def self.find_all_by_param(field, value)
283
- finded = []
284
- records = find_all
285
- records.each do |record|
286
- if record.attributes[field.to_s] == value.to_s
287
- finded << record
288
- end
289
- end
290
- return finded
291
- end
292
-
293
- def self.find_by_param(field, value)
294
- records = find_all_by_param(field, value)
295
- if records.size > 0
296
- return records[0]
297
- else
298
- nil
299
- end
300
- end
301
-
302
- def self.method_missing(name, *args)
303
- return find_by_param($1.to_sym, args[0]) if name.to_s =~ /^find_by_(.*)/
304
- return find_all_by_param($1.to_sym, args[0]) if name.to_s =~ /^find_all_by_(.*)/
305
- super
306
- end
307
-
308
- def self.delete_unused_field
309
- ids = connection.zrange "#{key_namespace}:all", 0, count
310
- if ids.size > 0
311
- attributes = connection.hgetall "#{key_namespace}:#{ids[0]}:attributes"
312
- now_keys = self.get_fields
313
- array = []
314
- now_keys.each do |key|
315
- array << key.to_s
316
- end
317
- attributes.reject! {|key| array.include? key }
318
- attributes.keys.each do |delete_key|
319
- ids.each do |id|
320
- connection.hdel "#{key_namespace}:#{id}:attributes", delete_key
321
- end
322
- end
323
- end
324
- end
325
- end
326
- end