redis_storage 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/.rvmrc +9 -0
- data/Gemfile +13 -0
- data/README +82 -0
- data/Rakefile +9 -0
- data/lib/generators/rails/redis_generator.rb +17 -0
- data/lib/generators/templates/model.rb +6 -0
- data/lib/redis_storage/railtie.rb +13 -0
- data/lib/redis_storage/version.rb +3 -0
- data/lib/redis_storage.rb +124 -0
- data/lib/tasks/redis_storage.rake +31 -0
- data/redis_storage.gemspec +31 -0
- data/spec/model_spec.rb +174 -0
- data/spec/spec_helper.rb +34 -0
- data/test/generator_test.rb +35 -0
- metadata +198 -0
data/.rspec
ADDED
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
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,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,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,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
|
data/spec/model_spec.rb
ADDED
@@ -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
|
data/spec/spec_helper.rb
ADDED
@@ -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
|
+
|