redis_backed_model 0.0.5 → 1.0.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.
- data/README.md +11 -1
- data/lib/redis_backed_model/inflections.rb +3 -1
- data/lib/redis_backed_model/redis_backed_model.rb +9 -0
- data/lib/redis_backed_model/sorted_set.rb +9 -8
- data/lib/redis_backed_model/version.rb +1 -1
- data/redis_backed_model.gemspec +1 -1
- data/spec/redis_backed_model_spec.rb +0 -27
- metadata +11 -28
- data/spec/extras/person.rb +0 -50
data/README.md
CHANGED
@@ -22,7 +22,6 @@ Subclass your models from RedisBackedModel::RedisBackedModel
|
|
22
22
|
|
23
23
|
```ruby
|
24
24
|
class Person < RedisBackedModel::RedisBackedModel
|
25
|
-
...
|
26
25
|
end
|
27
26
|
```
|
28
27
|
|
@@ -46,6 +45,17 @@ You can use RBM to get Redis commands that will save your object as a hash
|
|
46
45
|
|
47
46
|
You can parse these and pass them to Redis yourself or use the gem 'redis_pipeline': https://github.com/SeniorServiceAmerica/redis_pipeline
|
48
47
|
|
48
|
+
Once your data is in Redis, you can use RBM to find and instantiate objects:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
p = Person.find(2) => #<Person:0x00000104023a00 @id=2, @first_name=Bill, @last_name=Smith>
|
52
|
+
```
|
53
|
+
|
54
|
+
You can also find multiple records:
|
55
|
+
|
56
|
+
```ruby
|
57
|
+
p = Person.find([1,2,3]) => [person,person,person]
|
58
|
+
```
|
49
59
|
|
50
60
|
## Contributing
|
51
61
|
|
@@ -1,15 +1,17 @@
|
|
1
1
|
module ActiveSupport::Inflector
|
2
2
|
|
3
|
+
# Downcases and removes a leading @
|
3
4
|
def deinstance_variableize(the_string)
|
4
5
|
result = the_string.to_s.dup
|
5
6
|
result.downcase.gsub(/^@/, '')
|
6
7
|
end
|
7
8
|
|
9
|
+
# Adds a @ to the beginning of <tt>the_string</tt> and returns it as a symbol
|
8
10
|
def instance_variableize(the_string)
|
9
11
|
"@#{the_string}".to_sym
|
10
12
|
end
|
11
|
-
|
12
13
|
end
|
14
|
+
|
13
15
|
class String
|
14
16
|
def deinstance_variableize
|
15
17
|
ActiveSupport::Inflector.deinstance_variableize(self)
|
@@ -1,6 +1,12 @@
|
|
1
1
|
module RedisBackedModel
|
2
2
|
class RedisBackedModel
|
3
3
|
|
4
|
+
# Finds and returns one or more objects by their id.
|
5
|
+
# Pass in a single id or an array of ids.
|
6
|
+
# obj.find(1) => obj
|
7
|
+
# obj.find([1,2,3]) => [obj,obj,obj]
|
8
|
+
# returns an empty array if no object matches the id in Redis
|
9
|
+
# obj.find(bad_id) => []
|
4
10
|
def self.find(*args)
|
5
11
|
found = []
|
6
12
|
args.flatten.each do |id|
|
@@ -10,6 +16,8 @@ module RedisBackedModel
|
|
10
16
|
(found.count == 1) ? found.first : found
|
11
17
|
end
|
12
18
|
|
19
|
+
# Instantiates the object with the provided attributes.
|
20
|
+
# If the object does not have an instance variable that matches one of the passed attributes, one will be created.
|
13
21
|
def initialize(attributes={})
|
14
22
|
if attributes.class == Hash
|
15
23
|
attributes.each do |key, value|
|
@@ -20,6 +28,7 @@ module RedisBackedModel
|
|
20
28
|
end
|
21
29
|
end
|
22
30
|
|
31
|
+
# Serializes the object as redis commands.
|
23
32
|
def to_redis
|
24
33
|
redis_commands = []
|
25
34
|
redis_commands << id_set_command
|
@@ -5,26 +5,27 @@ module RedisBackedModel
|
|
5
5
|
|
6
6
|
|
7
7
|
def initialize(model, model_id, definition)
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
self.model = model
|
9
|
+
self.model_id = model_id
|
10
|
+
self.definition = definition
|
11
11
|
self
|
12
12
|
end
|
13
13
|
|
14
|
+
# Serializes the object as a redis command to create a sorted set.
|
14
15
|
def to_redis
|
15
16
|
"zadd|#{key}|#{score}|#{member}"
|
16
17
|
end
|
17
18
|
|
18
19
|
private
|
19
20
|
|
20
|
-
attr_accessor :model, :model_id
|
21
|
+
attr_accessor :model, :model_id, :definition
|
21
22
|
|
22
23
|
def definition_keys
|
23
|
-
|
24
|
+
definition.keys.first
|
24
25
|
end
|
25
26
|
|
26
27
|
def definition_values
|
27
|
-
|
28
|
+
definition.values.first
|
28
29
|
end
|
29
30
|
|
30
31
|
def key_by
|
@@ -36,7 +37,7 @@ module RedisBackedModel
|
|
36
37
|
end
|
37
38
|
|
38
39
|
def key_model_name
|
39
|
-
|
40
|
+
model.to_s.underscore.pluralize
|
40
41
|
end
|
41
42
|
|
42
43
|
def key_for_value
|
@@ -44,7 +45,7 @@ module RedisBackedModel
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def member
|
47
|
-
|
48
|
+
model_id
|
48
49
|
end
|
49
50
|
|
50
51
|
def key
|
data/redis_backed_model.gemspec
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require 'extras/person'
|
3
2
|
|
4
3
|
describe RedisBackedModel do
|
5
4
|
before(:all) do
|
@@ -190,29 +189,3 @@ describe RedisBackedModel do
|
|
190
189
|
end
|
191
190
|
|
192
191
|
end
|
193
|
-
|
194
|
-
# test inheriting from RedisBackedModel
|
195
|
-
describe Person do
|
196
|
-
|
197
|
-
before(:all) do
|
198
|
-
$redis.hset 'person:0', 'first_name', 'jane'
|
199
|
-
$redis.hset 'person:0', 'last_name', 'doe'
|
200
|
-
end
|
201
|
-
|
202
|
-
it "should set its instance_variables from redis, using RedisBackedModel initialize" do
|
203
|
-
person = Person.find(0)
|
204
|
-
person.instance_variables.include?(:@first_name).should eq(true)
|
205
|
-
person.instance_variables.include?(:@last_name).should eq(true)
|
206
|
-
person.instance_variables.include?(:@id).should eq(true)
|
207
|
-
end
|
208
|
-
|
209
|
-
it "should have same name method" do
|
210
|
-
person = Person.find(0)
|
211
|
-
person.name.should eq('jane doe')
|
212
|
-
end
|
213
|
-
|
214
|
-
after(:all) do
|
215
|
-
$redis.hdel 'person:0', 'first_name'
|
216
|
-
$redis.hdel 'person:0', 'last_name'
|
217
|
-
end
|
218
|
-
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redis_backed_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-09-05 00:00:00.
|
13
|
+
date: 2012-09-05 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirement: &2165686260 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,15 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements:
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ! '>='
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: '0'
|
25
|
+
version_requirements: *2165686260
|
31
26
|
- !ruby/object:Gem::Dependency
|
32
27
|
name: redis
|
33
|
-
requirement: !ruby/object:Gem::Requirement
|
28
|
+
requirement: &2165685840 !ruby/object:Gem::Requirement
|
34
29
|
none: false
|
35
30
|
requirements:
|
36
31
|
- - ! '>='
|
@@ -38,28 +33,18 @@ dependencies:
|
|
38
33
|
version: '0'
|
39
34
|
type: :development
|
40
35
|
prerelease: false
|
41
|
-
version_requirements:
|
42
|
-
none: false
|
43
|
-
requirements:
|
44
|
-
- - ! '>='
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '0'
|
36
|
+
version_requirements: *2165685840
|
47
37
|
- !ruby/object:Gem::Dependency
|
48
38
|
name: activesupport
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirement: &2165685340 !ruby/object:Gem::Requirement
|
50
40
|
none: false
|
51
41
|
requirements:
|
52
|
-
- -
|
42
|
+
- - ~>
|
53
43
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
44
|
+
version: 3.0.0
|
55
45
|
type: :runtime
|
56
46
|
prerelease: false
|
57
|
-
version_requirements:
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ! '>='
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
47
|
+
version_requirements: *2165685340
|
63
48
|
description: Provides methods to models that are backed by a redis instance.
|
64
49
|
email:
|
65
50
|
- iwhitney@ssa-i.org
|
@@ -79,7 +64,6 @@ files:
|
|
79
64
|
- lib/redis_backed_model/sorted_set.rb
|
80
65
|
- lib/redis_backed_model/version.rb
|
81
66
|
- redis_backed_model.gemspec
|
82
|
-
- spec/extras/person.rb
|
83
67
|
- spec/redis_backed_model/inflections_spec.rb
|
84
68
|
- spec/redis_backed_model/sorted_set_spec.rb
|
85
69
|
- spec/redis_backed_model_spec.rb
|
@@ -104,14 +88,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
88
|
version: '0'
|
105
89
|
requirements: []
|
106
90
|
rubyforge_project:
|
107
|
-
rubygems_version: 1.8.
|
91
|
+
rubygems_version: 1.8.16
|
108
92
|
signing_key:
|
109
93
|
specification_version: 3
|
110
94
|
summary: Provides methods for the creation of redis-backed models, specifically the
|
111
95
|
handling of sorted-set attributes and returning commands that will store the object
|
112
96
|
in redis.
|
113
97
|
test_files:
|
114
|
-
- spec/extras/person.rb
|
115
98
|
- spec/redis_backed_model/inflections_spec.rb
|
116
99
|
- spec/redis_backed_model/sorted_set_spec.rb
|
117
100
|
- spec/redis_backed_model_spec.rb
|
data/spec/extras/person.rb
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
class Person < RedisBackedModel::RedisBackedModel
|
2
|
-
attr_reader :id, :first_name, :last_name
|
3
|
-
|
4
|
-
def self.all
|
5
|
-
all = []
|
6
|
-
ids.each do |id|
|
7
|
-
all << self.find(id)
|
8
|
-
end
|
9
|
-
all
|
10
|
-
end
|
11
|
-
|
12
|
-
#def self.first
|
13
|
-
#id = ids.first
|
14
|
-
#self.find(id)
|
15
|
-
#end
|
16
|
-
|
17
|
-
def self.find(id)
|
18
|
-
attr = $redis.hgetall("person:#{id}")
|
19
|
-
self.new(attr.merge({:id => id}))
|
20
|
-
end
|
21
|
-
|
22
|
-
#def self.last
|
23
|
-
#id = ids.last
|
24
|
-
#self.find(id)
|
25
|
-
#end
|
26
|
-
|
27
|
-
def self.to_csv
|
28
|
-
f = File.new("person.csv", "w+")
|
29
|
-
f << "id,first_name,last_name\n"
|
30
|
-
self.all.each do |x|
|
31
|
-
f << "#{x.id},#{x.first_name},#{x.last_name}\n"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# def initialize(attr)
|
36
|
-
# @id = attr[:id]
|
37
|
-
# @first_name = attr["first_name"]
|
38
|
-
# @last_name = attr["last_name"]
|
39
|
-
# end
|
40
|
-
|
41
|
-
def name
|
42
|
-
"#{self.first_name} #{self.last_name}"
|
43
|
-
end
|
44
|
-
|
45
|
-
private
|
46
|
-
|
47
|
-
def self.ids
|
48
|
-
@ids ||= $redis.sort('person_ids')
|
49
|
-
end
|
50
|
-
end
|