redis_assist 0.9.0 → 0.10.0
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.
- checksums.yaml +4 -4
- data/lib/redis_assist.rb +1 -0
- data/lib/redis_assist/base.rb +10 -76
- data/lib/redis_assist/finders.rb +102 -0
- data/lib/redis_assist/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d4ea0740c8e9da01b4fc9cd16be301974435766
|
4
|
+
data.tar.gz: 4b3a675d57e7a2ee4c7fafb88e731a0a5a3d6fde
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 869875ea789eabf01018c43aebe0777f4cc4bc712d047728add8f317d73e72ffe40cd992a0df0a49209e705fd93a036d1b9ba0c2e31ccbae2d9c1fbf4f37009a
|
7
|
+
data.tar.gz: f6eaee0706cd91d18240d458d7466d2c5ec8903a46f8cd66429da9a76df10993ca69d950f441ab78b7155ef2f221414936dd75c55c52aab3480e4370843326c5
|
data/lib/redis_assist.rb
CHANGED
data/lib/redis_assist/base.rb
CHANGED
@@ -4,6 +4,10 @@ module RedisAssist
|
|
4
4
|
include Callbacks
|
5
5
|
include Validations
|
6
6
|
include Associations
|
7
|
+
|
8
|
+
|
9
|
+
extend RedisAssist::Finders
|
10
|
+
|
7
11
|
|
8
12
|
def self.inherited(base)
|
9
13
|
base.before_create {|record| record.send(:created_at=, Time.now.to_f) if record.respond_to?(:created_at) }
|
@@ -32,77 +36,6 @@ module RedisAssist
|
|
32
36
|
def count
|
33
37
|
redis.zcard(index_key_for(:id))
|
34
38
|
end
|
35
|
-
|
36
|
-
|
37
|
-
def all
|
38
|
-
ids = redis.zrange(index_key_for(:id), 0, -1)
|
39
|
-
find(ids)
|
40
|
-
end
|
41
|
-
|
42
|
-
|
43
|
-
def first(limit=1, offset=0)
|
44
|
-
from = offset
|
45
|
-
to = from + limit - 1
|
46
|
-
members = redis.zrange(index_key_for(:id), from, to)
|
47
|
-
|
48
|
-
find(limit > 1 ? members : members.first)
|
49
|
-
end
|
50
|
-
|
51
|
-
|
52
|
-
def last(limit=1, offset=0)
|
53
|
-
from = offset
|
54
|
-
to = from + limit - 1
|
55
|
-
members = redis.zrange(index_key_for(:id), (to * -1) + -1, (from * -1) + -1).reverse
|
56
|
-
|
57
|
-
find(limit > 1 ? members : members.first)
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
|
-
def find(ids, opts={})
|
62
|
-
ids.is_a?(Array) ? find_by_ids(ids, opts) : find_by_id(ids, opts)
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
# find articles in batches
|
67
|
-
def find_in_batches(params={})
|
68
|
-
start = params[:start] || 0
|
69
|
-
marker = start
|
70
|
-
batch_size = params[:batch_size] || 500
|
71
|
-
record_ids = redis.zrange(index_key_for(:id), marker, marker + batch_size - 1)
|
72
|
-
|
73
|
-
while record_ids.length > 0
|
74
|
-
records_count = record_ids.length
|
75
|
-
marker += records_count
|
76
|
-
records = find(record_ids)
|
77
|
-
|
78
|
-
yield records
|
79
|
-
|
80
|
-
break if records_count < batch_size
|
81
|
-
|
82
|
-
record_ids = redis.zrange(index_key_for(:id), marker, marker + batch_size - 1)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
|
87
|
-
# Deprecated finds
|
88
|
-
def find_by_id(id, opts={})
|
89
|
-
raw_attributes = load_attributes(id)
|
90
|
-
return nil unless raw_attributes[id][:exists].value
|
91
|
-
obj = new(id: id, raw_attributes: raw_attributes[id])
|
92
|
-
(obj.deleted? && !opts[:deleted].eql?(true)) ? nil : obj
|
93
|
-
end
|
94
|
-
|
95
|
-
|
96
|
-
def find_by_ids(ids, opts={})
|
97
|
-
attrs = load_attributes(*ids)
|
98
|
-
raw_attributes = attrs
|
99
|
-
ids.each_with_object([]) do |id, instances|
|
100
|
-
if raw_attributes[id][:exists].value
|
101
|
-
instance = new(id: id, raw_attributes: raw_attributes[id])
|
102
|
-
instances << instance if instance && (!instance.deleted? || opts[:deleted].eql?(true))
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
39
|
|
107
40
|
|
108
41
|
def create(attrs={})
|
@@ -111,11 +44,6 @@ module RedisAssist
|
|
111
44
|
end
|
112
45
|
|
113
46
|
|
114
|
-
def exists?(id)
|
115
|
-
redis.exists(key_for(id, :attributes))
|
116
|
-
end
|
117
|
-
|
118
|
-
|
119
47
|
# TODO: needs a refactor. Should this be an interface for skipping validations?
|
120
48
|
# Should we optimize and skip the find? Support an array of ids?
|
121
49
|
def update(id, params={}, opts={})
|
@@ -509,6 +437,12 @@ module RedisAssist
|
|
509
437
|
end
|
510
438
|
|
511
439
|
|
440
|
+
def inspect
|
441
|
+
attr_list = self.class.persisted_attrs.map{|key,val| "#{key}: #{send(key).to_s[0, 200]}" } * ", "
|
442
|
+
"#<#{self.class.name} id: #{id}, #{attr_list}>"
|
443
|
+
end
|
444
|
+
|
445
|
+
|
512
446
|
protected
|
513
447
|
|
514
448
|
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module RedisAssist
|
2
|
+
module Finders
|
3
|
+
|
4
|
+
# Checks to see if a record exists for the given `id`
|
5
|
+
# @param id [Integer] the record id
|
6
|
+
# @return [true, false]
|
7
|
+
def exists?(id)
|
8
|
+
redis.exists(key_for(id, :attributes))
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
# Find every saved record
|
13
|
+
# @return [Array] the array of models
|
14
|
+
def all
|
15
|
+
ids = redis.zrange(index_key_for(:id), 0, -1)
|
16
|
+
find(ids)
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
# Find the first saved record
|
21
|
+
# @note `first` uses a sorted set as an index of `ids` and finds the lowest id.
|
22
|
+
# @param limit [Integer] returns one or many
|
23
|
+
# @param offset [Integer] from the beginning of the index, forward.
|
24
|
+
# @return [Base, Array]
|
25
|
+
def first(limit=1, offset=0)
|
26
|
+
from = offset
|
27
|
+
to = from + limit - 1
|
28
|
+
members = redis.zrange(index_key_for(:id), from, to)
|
29
|
+
|
30
|
+
find(limit > 1 ? members : members.first)
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# Find the first saved record
|
35
|
+
# @note `last` uses a sorted set as an index of `ids` and finds the highest id.
|
36
|
+
# @param limit [Integer] returns one or many
|
37
|
+
# @param offset [Integer] from the end of the index, back
|
38
|
+
# @return [Base, Array]
|
39
|
+
def last(limit=1, offset=0)
|
40
|
+
from = offset
|
41
|
+
to = from + limit - 1
|
42
|
+
members = redis.zrange(index_key_for(:id), (to * -1) + -1, (from * -1) + -1).reverse
|
43
|
+
|
44
|
+
find(limit > 1 ? members : members.first)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Find a record by `id`
|
48
|
+
# @param ids [Integer, Array<Integer>] of the record(s) to lookup.
|
49
|
+
# @return [Base, Array] matching records
|
50
|
+
def find(ids, opts={})
|
51
|
+
ids.is_a?(Array) ? find_by_ids(ids, opts) : find_by_id(ids, opts)
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
# @deprecated Use {#find} instead
|
56
|
+
def find_by_id(id, opts={})
|
57
|
+
raw_attributes = load_attributes(id)
|
58
|
+
return nil unless raw_attributes[id][:exists].value
|
59
|
+
obj = new(id: id, raw_attributes: raw_attributes[id])
|
60
|
+
(obj.deleted? && !opts[:deleted].eql?(true)) ? nil : obj
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
# @deprecated Use {#find} instead
|
65
|
+
def find_by_ids(ids, opts={})
|
66
|
+
attrs = load_attributes(*ids)
|
67
|
+
raw_attributes = attrs
|
68
|
+
ids.each_with_object([]) do |id, instances|
|
69
|
+
if raw_attributes[id][:exists].value
|
70
|
+
instance = new(id: id, raw_attributes: raw_attributes[id])
|
71
|
+
instances << instance if instance && (!instance.deleted? || opts[:deleted].eql?(true))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
# Iterate over all records in batches
|
78
|
+
# @param options [Hash] accepts options
|
79
|
+
# `:start` to offset from the beginning of index,
|
80
|
+
# `:batch_size` the size of the batch, default is 500.
|
81
|
+
# @param &block [Proc] passes each batch of articles to the Proc.
|
82
|
+
def find_in_batches(options={})
|
83
|
+
start = options[:start] || 0
|
84
|
+
marker = start
|
85
|
+
batch_size = options[:batch_size] || 500
|
86
|
+
record_ids = redis.zrange(index_key_for(:id), marker, marker + batch_size - 1)
|
87
|
+
|
88
|
+
while record_ids.length > 0
|
89
|
+
records_count = record_ids.length
|
90
|
+
marker += records_count
|
91
|
+
records = find(record_ids)
|
92
|
+
|
93
|
+
yield records
|
94
|
+
|
95
|
+
break if records_count < batch_size
|
96
|
+
|
97
|
+
record_ids = redis.zrange(index_key_for(:id), marker, marker + batch_size - 1)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
data/lib/redis_assist/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis_assist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Love
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- lib/redis_assist/base.rb
|
106
106
|
- lib/redis_assist/callbacks.rb
|
107
107
|
- lib/redis_assist/config.rb
|
108
|
+
- lib/redis_assist/finders.rb
|
108
109
|
- lib/redis_assist/transform.rb
|
109
110
|
- lib/redis_assist/transforms/boolean_transform.rb
|
110
111
|
- lib/redis_assist/transforms/float_transform.rb
|