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