redis_storage 0.2.3
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/.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
|
+
|