redis_backed_model 0.0.5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
- @model = model
9
- @model_id = model_id
10
- @definition = definition
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 #, :by_attribute, :score_label, :score
21
+ attr_accessor :model, :model_id, :definition
21
22
 
22
23
  def definition_keys
23
- @definition.keys.first
24
+ definition.keys.first
24
25
  end
25
26
 
26
27
  def definition_values
27
- @definition.values.first
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
- @model.to_s.underscore.pluralize
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
- @model_id
48
+ model_id
48
49
  end
49
50
 
50
51
  def key
@@ -1,3 +1,3 @@
1
1
  module RedisBackedModel
2
- VERSION = "0.0.5"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -16,5 +16,5 @@ Gem::Specification.new do |gem|
16
16
  gem.version = RedisBackedModel::VERSION
17
17
  gem.add_development_dependency 'rspec'
18
18
  gem.add_development_dependency 'redis'
19
- gem.add_dependency('activesupport')
19
+ gem.add_dependency('activesupport', '~> 3.0.0')
20
20
  end
@@ -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.5
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.000000000 Z
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: !ruby/object:Gem::Requirement
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: !ruby/object:Gem::Requirement
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: '0'
44
+ version: 3.0.0
55
45
  type: :runtime
56
46
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
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.21
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
@@ -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