redis_storage 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ tmp/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.rvmrc ADDED
@@ -0,0 +1,9 @@
1
+ #rvm use rbx-2.0.0pre@redisrecord --create
2
+ #export RBXOPT=-Xrbc.db=$HOME/.rbx
3
+ rvm use ree@redisrecord --create
4
+
5
+ if ! command -v bundle ; then
6
+ gem install bundler
7
+ fi
8
+ # Bundle while redcing excess noise.
9
+ bundle | grep -v 'Using' | grep -v 'complete' | sed '/^$/d'
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in redis_record.gemspec
4
+ gemspec
5
+
6
+ group :development do
7
+ # irb stuff
8
+ gem 'wirble'
9
+ gem 'hirb'
10
+ gem 'awesome_print'
11
+ gem 'bond'
12
+ gem 'sketches'
13
+ end
data/README ADDED
@@ -0,0 +1,82 @@
1
+ RedisStorage
2
+ ---
3
+
4
+ * some kind of database mapper for redis on rails
5
+ * uses ActiveModel to provide things like validations
6
+ * provides a Rails 3 Generator
7
+
8
+ Installation
9
+ ---
10
+
11
+ As this gem need redis running you will have to install it(see redis.io for more information on that task)
12
+
13
+ Then just add the gem to your Gemfile and run bundler
14
+
15
+ gem 'redis_storage'
16
+
17
+ or just install it manually
18
+
19
+ gem install redis_storage
20
+
21
+ Then this gem will need a global object $db which just is a Redis connection.
22
+
23
+ redis_config = { :host => 'localhost', :port => 6379, :password => '', :db => 1 }
24
+ $db = Redis.new(redis_config)
25
+
26
+ Usage
27
+ ---
28
+
29
+ require the gem in your code
30
+
31
+ require 'redis_storage'
32
+
33
+ create a model which inherit from RedisStorage::Model
34
+
35
+ class MyModel < RedisStorage::Model
36
+ ...
37
+ end
38
+
39
+ and define the models attributes via self.attrs, additional to the defined attributes there will always be an attribute id
40
+
41
+ def self.attrs
42
+ [:body, :title]
43
+ end
44
+ attr_accessor *attrs
45
+
46
+ Minimal Example
47
+ ---
48
+
49
+ require 'redis_storage'
50
+ class MyModel < RedisStorage::Model
51
+ def self.attrs
52
+ [:body, :title]
53
+ end
54
+ attr_accessor *attrs
55
+ end
56
+
57
+ Rails 3 Integration
58
+ ---
59
+
60
+ to initialize redis there is a rake task
61
+
62
+ rake install_redis
63
+
64
+ The task will install a initializer file which creates the above mentioned $db object and a redis.yml file to configure the redis connection.
65
+
66
+ There is also a Rails 3 Generator which will generates the above mentioned model
67
+
68
+ rails g redis model attr1 attr2
69
+
70
+ or
71
+
72
+ rails g scaffold model attr1:string attr2:int -o redis
73
+
74
+ meta
75
+ ---
76
+
77
+ Inspired by
78
+
79
+ * some ideas from the redis backend in [scanty-redis](https://github.com/adamwiggins/scanty-redis)
80
+ * various small sinatra projects from myself which use a pre version of this gem
81
+
82
+ sch1zo
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ include Rake::DSL
2
+ require 'bundler'
3
+ Bundler::GemHelper.install_tasks
4
+
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new('spec')
7
+
8
+ # If you want to make this the default task
9
+ task :default => :spec
@@ -0,0 +1,17 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/named_base'
3
+
4
+ module Rails
5
+ module Generators
6
+ class RedisGenerator < Rails::Generators::NamedBase
7
+ source_root File.expand_path('../../templates', __FILE__)
8
+ argument :attrs, :type => :array, :default => [], :banner => "field field"
9
+ check_class_collision
10
+ desc "This generator creates an model for redis"
11
+
12
+ def create_model_file
13
+ template 'model.rb', File.join('app/models',class_path,"#{file_name}.rb")
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,6 @@
1
+ class <%= class_name %> < RedisStorage::Model
2
+ def self.attrs
3
+ [ :id<%=", :" unless attrs.empty?%><%= attrs.map{|e| e.split(':')[0]}.join(', :') %> ]
4
+ end
5
+ attr_accessor *attrs
6
+ end
@@ -0,0 +1,13 @@
1
+ require 'redis_storage'
2
+ module RedisStorage
3
+ class Railtie <::Rails::Railtie
4
+ rake_tasks do
5
+ load "tasks/redis_storage.rake"
6
+ end
7
+ #if ::Rails.version.to_f >= 3.1
8
+ # config.app_generators.orm :redis
9
+ #else
10
+ # config.generators.orm :redis
11
+ #end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module RedisStorage
2
+ VERSION = "0.2.3"
3
+ end
@@ -0,0 +1,124 @@
1
+ require 'json'
2
+ require 'active_model'
3
+
4
+ module RedisStorage
5
+ require 'redis_storage/railtie' if defined?(Rails)
6
+
7
+ class Model
8
+ include ActiveModel::Validations
9
+ include ActiveModel::Conversion
10
+ extend ActiveModel::Naming
11
+
12
+ validates_presence_of :id
13
+
14
+ def self.attrs
15
+ []
16
+ end
17
+
18
+ attr_accessor *attrs
19
+ attr_accessor :id
20
+ attr_reader :errors
21
+
22
+ def self.build(params)
23
+ new params
24
+ end
25
+
26
+ def self.create(params)
27
+ obj = build params
28
+ obj.save
29
+ obj
30
+ end
31
+
32
+ def self.find(params=nil)
33
+ return find_by_id(params) unless params.nil? #TODO perhaps make this at some point more generic
34
+ return all
35
+ end
36
+ def self.find_by_id(entry_id)
37
+ r = $db.get("#{db_key}:#{entry_id}")
38
+ new(JSON.parse(r)) unless r.nil?
39
+ end
40
+
41
+ def self.all
42
+ keys = $db.smembers("#{db_key}:persisted").map do |i|
43
+ "#{db_key}:#{i}"
44
+ end
45
+
46
+ if keys.empty?
47
+ []
48
+ else
49
+ $db.mget(*keys).inject([]) do |a,json|
50
+ a << new(JSON.parse(json))
51
+ end
52
+ end
53
+ end
54
+
55
+ def serializable_hash
56
+ self.class.attrs.inject({:id => @id}) do |a,key|
57
+ a[key] = send(key)
58
+ a
59
+ end
60
+ end
61
+ def to_json
62
+ serializable_hash.to_json
63
+ end
64
+
65
+ def update_attributes(params)
66
+ params.each do |key, value|
67
+ send("#{key}=", value) unless key.to_sym == :id
68
+ end
69
+ save
70
+ end
71
+ def save
72
+ unless persisted?
73
+ @id = $db.incr("#{db_key}:nextid")
74
+ end
75
+ if valid?
76
+ $db.multi do
77
+ $db.set db_key, serializable_hash.to_json
78
+ $db.sadd "#{self.class.db_key}:persisted", id
79
+ end
80
+ @id
81
+ else
82
+ nil
83
+ end
84
+ end
85
+
86
+ def destroy
87
+ delete! #for the default rails controller
88
+ end
89
+ def delete!
90
+ if persisted?
91
+ $db.multi do
92
+ $db.del db_key
93
+ $db.srem "#{self.class.db_key}:persisted", id
94
+ end
95
+ true
96
+ else
97
+ false
98
+ end
99
+ end
100
+
101
+ def persisted?
102
+ if id.nil?
103
+ false
104
+ else
105
+ $db.sismember("#{self.class.db_key}:persisted", id)
106
+ end
107
+ end
108
+
109
+ def self.db_key
110
+ model_name.downcase
111
+ end
112
+ def db_key
113
+ "#{self.class.db_key}:#{self.id}"
114
+ end
115
+
116
+ def initialize(params={})
117
+ @id = nil
118
+ @errors = ActiveModel::Errors.new(self)
119
+ params.each do |key, value|
120
+ send("#{key}=", value)
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,31 @@
1
+ desc "copies an initializer for redis into the app"
2
+ task :install_redis do
3
+ init= <<-INIT
4
+ require 'redis'
5
+ c = YAML.load_file("\#{::Rails.root.to_s}/config/redis.yml")[::Rails.env]
6
+ redis_config = { :host => c['host'], :port => c['port'], :password => c['password'], :db => c['db'] }
7
+
8
+ $db = Redis.new(redis_config)
9
+ INIT
10
+ yml= <<-YAML
11
+ development:
12
+ host: "localhost"
13
+ port: 6379
14
+ password:
15
+ db: 3
16
+ test:
17
+ host: "localhost"
18
+ port: 6379
19
+ password:
20
+ path: 12
21
+ productive:
22
+ host: "localhost"
23
+ port: 6379
24
+ password:
25
+ path: 1
26
+ YAML
27
+ p "create config/initializers/redis.rb"
28
+ File.open('config/initializers/redis.rb', 'w') {|f| f.write(init) }
29
+ p "create config/redis.yml"
30
+ File.open('config/redis.yml', 'w') {|f| f.write(yml) }
31
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "redis_storage/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "redis_storage"
7
+ s.version = RedisStorage::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Andreas Eger"]
10
+ s.email = ["dev@eger-andreas.de"]
11
+ s.homepage = "https://github.com/sch1zo/redis_storage"
12
+ s.summary = %q{A simple Redis ORM for Rails}
13
+ s.description = %q{Provides a databackend for a Redis in Rails, will also provide a Rails 3 Generator}
14
+
15
+ s.add_dependency 'redis'
16
+ s.add_dependency 'json'
17
+ s.add_dependency 'activemodel', '>= 3.0.0'
18
+
19
+ s.add_development_dependency 'rspec', '>= 2.0.0'
20
+ s.add_development_dependency 'mocha'
21
+ s.add_development_dependency 'autotest'
22
+ s.add_development_dependency 'redis'
23
+ s.add_development_dependency 'rails', '>= 3.0.0'
24
+
25
+ s.rubyforge_project = "redis_storage"
26
+
27
+ s.files = `git ls-files`.split("\n")
28
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
29
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
30
+ s.require_paths = ["lib"]
31
+ end
@@ -0,0 +1,174 @@
1
+ require 'spec_helper'
2
+ class MockModel < RedisStorage::Model
3
+ def self.attrs
4
+ [:body, :title]
5
+ end
6
+ attr_accessor *attrs
7
+ end
8
+
9
+ describe RedisStorage::Model do
10
+ it_should_behave_like "ActiveModel"
11
+ let(:modelhash) do
12
+ {'body'=>"Lorem Ipsum", 'title' => "some test"}
13
+ end
14
+
15
+ context 'class' do
16
+ it 'should have a db_key with the name of the class' do
17
+ MockModel.db_key.should eq('mockmodel')
18
+ end
19
+ context '#build' do
20
+ it 'should simply call new on MockModel' do
21
+ MockModel.expects(:new)
22
+ MockModel.build modelhash
23
+ end
24
+ it 'should create accessors for all hash key/value pairs' do
25
+ model = MockModel.build modelhash
26
+ model.body.should == modelhash['body']
27
+ model.title.should == modelhash['title']
28
+ end
29
+ end
30
+ context '#create' do
31
+ before(:each) do
32
+ @model = MockModel.build modelhash
33
+ end
34
+ it 'should call new to create the accessors' do
35
+ MockModel.expects(:build).returns(@model)
36
+ MockModel.create modelhash
37
+ end
38
+ it 'should call save to save the record' do
39
+ @model.expects(:save)
40
+ MockModel.stubs(:build).returns(@model)
41
+ MockModel.create modelhash
42
+ end
43
+ end
44
+ context '#find' do
45
+ let(:h) do
46
+ [ {'body' =>"Lorem Ipsum", 'title' => "first test"},
47
+ {'body' =>"Dolor Sit", 'title' => "second test"},
48
+ {'body' =>"Amet consetetur", 'title' => "third test"},
49
+ {'body' =>"sadipscing elitr", 'title' => "forth test"}]
50
+ end
51
+ before(:each) do
52
+ h.each do |e|
53
+ MockModel.create e
54
+ end
55
+ end
56
+ it 'should call .all if .find is called with no parama' do
57
+ MockModel.expects(:all)
58
+ MockModel.find
59
+ end
60
+ it 'should push the given Params from .find to .find_by_id' do
61
+ MockModel.expects(:find_by_id).with(3)
62
+ MockModel.find(3)
63
+ end
64
+ context '#find_by_id' do
65
+ 1.upto(4) do |i|
66
+ it "should find record #{i} and create a new instance" do
67
+ record = MockModel.find_by_id(i)
68
+ record.id.should == i
69
+ record.body.should == h[i-1]['body']
70
+ record.title.should == h[i-1]['title']
71
+ end
72
+ end
73
+ end
74
+ context '#all' do
75
+ it 'should return an empty array if there are no entries' do
76
+ Redis.any_instance.stubs(:smembers => [])
77
+ records = MockModel.all
78
+ records.should eq([])
79
+ end
80
+ it 'should return all entries' do
81
+ records = MockModel.all
82
+ records.size.should eq(4)
83
+ end
84
+ it 'should return an Array with all entries' do
85
+ records = MockModel.all
86
+ records.each do |m|
87
+ i = m.id
88
+ m.body.should eq(h[i-1]['body'])
89
+ m.title.should eq(h[i-1]['title'])
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+
96
+ context 'instance' do
97
+ let(:model) do
98
+ model = MockModel.build modelhash
99
+ end
100
+ context '#persisted?' do
101
+ it 'should be false if it did not get saved yet' do
102
+ model.persisted?.should be_false
103
+ end
104
+ it 'should be true if the model got saved' do
105
+ model.save
106
+ model.persisted?.should be_true
107
+ end
108
+ end
109
+ context '#save' do
110
+ it 'should be valid to save the model' do
111
+ model.stubs(:valid? => true)
112
+ model.save.should_not be_nil
113
+ end
114
+ it 'should not save the model if its invalid' do
115
+ model.stubs(:valid? => false)
116
+ model.save.should be_nil
117
+ end
118
+ it 'should create a redis entry' do
119
+ id = model.save
120
+ JSON.parse($db.get("mockmodel:#{id}")).should == modelhash.merge('id'=>id)
121
+ end
122
+ it 'should add the id to the persisted set in redis' do
123
+ id = model.save
124
+ $db.sismember("mockmodel:persisted", id).should be_true
125
+ end
126
+ end
127
+ context '#update_attributes' do
128
+ it 'should take the given hash to update the attributes' do
129
+ model.update_attributes({:body => 'updated body'})
130
+ model.body.should eq('updated body')
131
+ end
132
+ it 'should call save' do
133
+ model.expects(:save=>1)
134
+ model.update_attributes({:body => 'updated body'})
135
+ end
136
+ end
137
+ context '#delete!' do
138
+ it 'should return false if the object is not persisted' do
139
+ model.stubs(:persisted? => false)
140
+ model.delete!.should be_false
141
+ end
142
+ it 'should return true if the object was persisted' do
143
+ model.stubs(:persisted? => true)
144
+ model.delete!.should be_true
145
+ end
146
+ it 'should remove the key from redis' do
147
+ id=model.save
148
+ model.delete!
149
+ $db.get("mockmodel:#{id}").should be_nil
150
+ end
151
+ it 'should remove the id from the persisted set in redis' do
152
+ id=model.save
153
+ model.delete!
154
+ $db.sismember("mockmodel:persisted", id).should be_false
155
+ end
156
+ end
157
+
158
+ #context '#dirty' do
159
+ # it 'should be true till first saved' do
160
+ # model.changed?.should be_true
161
+ # end
162
+ # it 'should be false after saving' do
163
+ # model.save
164
+ # model.changed?.should be_false
165
+ # end
166
+ # it 'should be true if something got changed since last save' do
167
+ # model.save
168
+ # model.changed?.should be_false
169
+ # model.body = 'lorem ipsum'
170
+ # model.changed?.should be_true
171
+ # end
172
+ #end
173
+ end
174
+ end
@@ -0,0 +1,34 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'lib/redis_storage' # and any other gems you need
5
+ require 'redis'
6
+
7
+ RSpec.configure do |config|
8
+ config.mock_with :mocha
9
+ config.before(:all) do
10
+ $db = Redis.new({})
11
+ end
12
+ config.before(:each) do
13
+ $db.select 12
14
+ $db.flushdb
15
+ end
16
+ end
17
+
18
+ shared_examples_for "ActiveModel" do
19
+ require 'test/unit/assertions'
20
+ require 'active_model/lint'
21
+ include Test::Unit::Assertions
22
+ include ActiveModel::Lint::Tests
23
+
24
+ # to_s is to support ruby-1.9
25
+ ActiveModel::Lint::Tests.public_instance_methods.map{|m| m.to_s}.grep(/^test/).each do |m|
26
+ example m.gsub('_',' ') do
27
+ send m
28
+ end
29
+ end
30
+
31
+ def model
32
+ subject
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ require 'bundler'
5
+ Bundler.setup
6
+
7
+ require 'lib/generators/rails/redis_generator'
8
+
9
+ class RedisGeneratorTest < Rails::Generators::TestCase
10
+ destination File.expand_path("../tmp", File.dirname(__FILE__))
11
+ setup :prepare_destination
12
+ tests ::Rails::Generators::RedisGenerator
13
+
14
+ test 'should create a model file with a few basic lines' do
15
+ run_generator %w(Schedule title body created_at)
16
+ assert_file 'app/models/schedule.rb', /class Schedule < RedisStorage::Model/
17
+ assert_file 'app/models/schedule.rb', /attr_accessor \*attrs/
18
+ end
19
+ test 'should set the classes attrs' do
20
+ run_generator %w(Schedule title body created_at)
21
+ assert_file 'app/models/schedule.rb' do |model|
22
+ assert_class_method :attrs, model do |attrs|
23
+ assert_match /[ :id, :title, :body, :created_at ]/, attrs
24
+ end
25
+ end
26
+ end
27
+ test 'should set id as only class attribute if none given' do
28
+ run_generator %w(Schedule title body)
29
+ assert_file 'app/models/schedule.rb' do |model|
30
+ assert_class_method :attrs, model do |attrs|
31
+ assert_match /[ :title, :body ]/, attrs
32
+ end
33
+ end
34
+ end
35
+ end
metadata ADDED
@@ -0,0 +1,198 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redis_storage
3
+ version: !ruby/object:Gem::Version
4
+ hash: 17
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 3
10
+ version: 0.2.3
11
+ platform: ruby
12
+ authors:
13
+ - Andreas Eger
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-06-24 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: redis
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: json
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: activemodel
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ hash: 7
57
+ segments:
58
+ - 3
59
+ - 0
60
+ - 0
61
+ version: 3.0.0
62
+ type: :runtime
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: rspec
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 15
73
+ segments:
74
+ - 2
75
+ - 0
76
+ - 0
77
+ version: 2.0.0
78
+ type: :development
79
+ version_requirements: *id004
80
+ - !ruby/object:Gem::Dependency
81
+ name: mocha
82
+ prerelease: false
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ type: :development
93
+ version_requirements: *id005
94
+ - !ruby/object:Gem::Dependency
95
+ name: autotest
96
+ prerelease: false
97
+ requirement: &id006 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 3
103
+ segments:
104
+ - 0
105
+ version: "0"
106
+ type: :development
107
+ version_requirements: *id006
108
+ - !ruby/object:Gem::Dependency
109
+ name: redis
110
+ prerelease: false
111
+ requirement: &id007 !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ hash: 3
117
+ segments:
118
+ - 0
119
+ version: "0"
120
+ type: :development
121
+ version_requirements: *id007
122
+ - !ruby/object:Gem::Dependency
123
+ name: rails
124
+ prerelease: false
125
+ requirement: &id008 !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ hash: 7
131
+ segments:
132
+ - 3
133
+ - 0
134
+ - 0
135
+ version: 3.0.0
136
+ type: :development
137
+ version_requirements: *id008
138
+ description: Provides a databackend for a Redis in Rails, will also provide a Rails 3 Generator
139
+ email:
140
+ - dev@eger-andreas.de
141
+ executables: []
142
+
143
+ extensions: []
144
+
145
+ extra_rdoc_files: []
146
+
147
+ files:
148
+ - .gitignore
149
+ - .rspec
150
+ - .rvmrc
151
+ - Gemfile
152
+ - README
153
+ - Rakefile
154
+ - lib/generators/rails/redis_generator.rb
155
+ - lib/generators/templates/model.rb
156
+ - lib/redis_storage.rb
157
+ - lib/redis_storage/railtie.rb
158
+ - lib/redis_storage/version.rb
159
+ - lib/tasks/redis_storage.rake
160
+ - redis_storage.gemspec
161
+ - spec/model_spec.rb
162
+ - spec/spec_helper.rb
163
+ - test/generator_test.rb
164
+ homepage: https://github.com/sch1zo/redis_storage
165
+ licenses: []
166
+
167
+ post_install_message:
168
+ rdoc_options: []
169
+
170
+ require_paths:
171
+ - lib
172
+ required_ruby_version: !ruby/object:Gem::Requirement
173
+ none: false
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ hash: 3
178
+ segments:
179
+ - 0
180
+ version: "0"
181
+ required_rubygems_version: !ruby/object:Gem::Requirement
182
+ none: false
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ hash: 3
187
+ segments:
188
+ - 0
189
+ version: "0"
190
+ requirements: []
191
+
192
+ rubyforge_project: redis_storage
193
+ rubygems_version: 1.8.5
194
+ signing_key:
195
+ specification_version: 3
196
+ summary: A simple Redis ORM for Rails
197
+ test_files: []
198
+