redis-store 1.0.0.1 → 1.1.0.rc
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.
Potentially problematic release.
This version of redis-store might be problematic. Click here for more details.
- data/Gemfile +2 -34
- data/README.md +17 -220
- data/Rakefile +7 -54
- data/lib/redis-store.rb +11 -44
- data/lib/redis/distributed_store.rb +8 -1
- data/lib/redis/factory.rb +17 -21
- data/lib/redis/store.rb +3 -8
- data/lib/redis/store/interface.rb +4 -0
- data/lib/redis/store/marshalling.rb +4 -0
- data/lib/redis/store/version.rb +1 -8
- data/lib/tasks/redis.tasks.rb +167 -0
- data/redis-store.gemspec +22 -97
- data/{spec → test}/config/node-one.conf +2 -2
- data/{spec → test}/config/node-two.conf +2 -2
- data/{spec → test}/config/redis.conf +3 -2
- data/{spec/redis/distributed_store_spec.rb → test/redis/distributed_store_test.rb} +13 -15
- data/test/redis/factory_test.rb +98 -0
- data/test/redis/store/interface_test.rb +27 -0
- data/test/redis/store/marshalling_test.rb +127 -0
- data/test/redis/store/namespace_test.rb +86 -0
- data/test/redis/store/version_test.rb +7 -0
- data/test/redis/store_test.rb +17 -0
- data/test/test_helper.rb +22 -0
- metadata +85 -97
- data/.travis.yml +0 -7
- data/CHANGELOG +0 -311
- data/VERSION +0 -1
- data/lib/action_controller/session/redis_session_store.rb +0 -81
- data/lib/active_support/cache/redis_store.rb +0 -254
- data/lib/cache/merb/redis_store.rb +0 -79
- data/lib/cache/sinatra/redis_store.rb +0 -131
- data/lib/i18n/backend/redis.rb +0 -67
- data/lib/rack/cache/redis_entitystore.rb +0 -48
- data/lib/rack/cache/redis_metastore.rb +0 -40
- data/lib/rack/session/merb.rb +0 -32
- data/lib/rack/session/redis.rb +0 -88
- data/spec/action_controller/session/redis_session_store_spec.rb +0 -126
- data/spec/active_support/cache/redis_store_spec.rb +0 -426
- data/spec/cache/merb/redis_store_spec.rb +0 -143
- data/spec/cache/sinatra/redis_store_spec.rb +0 -192
- data/spec/i18n/backend/redis_spec.rb +0 -72
- data/spec/rack/cache/entitystore/pony.jpg +0 -0
- data/spec/rack/cache/entitystore/redis_spec.rb +0 -124
- data/spec/rack/cache/metastore/redis_spec.rb +0 -259
- data/spec/rack/session/redis_spec.rb +0 -234
- data/spec/redis/factory_spec.rb +0 -110
- data/spec/redis/store/interface_spec.rb +0 -23
- data/spec/redis/store/marshalling_spec.rb +0 -119
- data/spec/redis/store/namespace_spec.rb +0 -76
- data/spec/redis/store/version_spec.rb +0 -7
- data/spec/redis/store_spec.rb +0 -13
- data/spec/spec_helper.rb +0 -43
- data/tasks/redis.tasks.rb +0 -235
data/lib/redis/store.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'redis/store/ttl'
|
2
|
+
require 'redis/store/interface'
|
3
|
+
|
1
4
|
class Redis
|
2
5
|
class Store < self
|
3
6
|
include Ttl, Interface
|
@@ -8,14 +11,6 @@ class Redis
|
|
8
11
|
_extend_namespace options
|
9
12
|
end
|
10
13
|
|
11
|
-
def self.rails3? #:nodoc:
|
12
|
-
defined?(::Rails) && ::Rails::VERSION::MAJOR == 3
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.rails31? #:nodoc:
|
16
|
-
defined?(::Rails) && ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR == 1
|
17
|
-
end
|
18
|
-
|
19
14
|
def reconnect
|
20
15
|
@client.reconnect
|
21
16
|
end
|
@@ -9,6 +9,10 @@ class Redis
|
|
9
9
|
_marshal(value, options) { |value| super encode(key), encode(value), options }
|
10
10
|
end
|
11
11
|
|
12
|
+
def setex(key, expiry, value, options = nil)
|
13
|
+
_marshal(value, options) { |value| super encode(key), expiry, encode(value), options }
|
14
|
+
end
|
15
|
+
|
12
16
|
def get(key, options = nil)
|
13
17
|
_unmarshal super(key), options
|
14
18
|
end
|
data/lib/redis/store/version.rb
CHANGED
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'open-uri'
|
5
|
+
|
6
|
+
class RedisRunner
|
7
|
+
def self.redisdir
|
8
|
+
File.expand_path("../../../vendor/redis", __FILE__)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.configuration
|
12
|
+
File.expand_path("../../../test/config/redis.conf", __FILE__)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.pid_file
|
16
|
+
File.expand_path(Dir.pwd + "/tmp/pids/redis.pid")
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.pid
|
20
|
+
File.open(pid_file).read.to_i
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.start
|
24
|
+
system %(redis-server #{configuration})
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.stop
|
28
|
+
begin
|
29
|
+
Process.kill('SIGTERM', pid)
|
30
|
+
rescue
|
31
|
+
# Suppress exceptions for Travis CI
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class NodeOneRedisRunner < RedisRunner
|
37
|
+
def self.configuration
|
38
|
+
File.expand_path("../../../test/config/node-one.conf", __FILE__)
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.pid_file
|
42
|
+
File.expand_path(Dir.pwd + "/tmp/pids/node-one.pid")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class NodeTwoRedisRunner < RedisRunner
|
47
|
+
def self.configuration
|
48
|
+
File.expand_path("../../../test/config/node-two.conf", __FILE__)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.pid_file
|
52
|
+
File.expand_path(Dir.pwd + "/tmp/pids/node-two.pid")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class RedisReplicationRunner
|
57
|
+
def self.runners
|
58
|
+
[ RedisRunner, NodeOneRedisRunner, NodeTwoRedisRunner ]
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.start
|
62
|
+
runners.each do |runner|
|
63
|
+
runner.start
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.stop
|
68
|
+
runners.each do |runner|
|
69
|
+
runner.stop
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
namespace :redis do
|
75
|
+
desc 'About redis'
|
76
|
+
task :about do
|
77
|
+
puts "\nSee http://code.google.com/p/redis/ for information about redis.\n\n"
|
78
|
+
end
|
79
|
+
|
80
|
+
desc 'Install the lastest verison of Redis from Github (requires git, duh)'
|
81
|
+
task :install => [ :about, :download, :make ] do
|
82
|
+
%w(redis-benchmark redis-cli redis-server).each do |bin|
|
83
|
+
if File.exist?(path = "#{RedisRunner.redisdir}/src/#{bin}")
|
84
|
+
sh "sudo cp #{path} /usr/bin/"
|
85
|
+
else
|
86
|
+
sh "sudo cp #{RedisRunner.redisdir}/#{bin} /usr/bin/"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
puts "Installed redis-benchmark, redis-cli and redis-server to /usr/bin/"
|
91
|
+
|
92
|
+
sh "sudo cp #{RedisRunner.redisdir}/redis.conf /etc/"
|
93
|
+
puts "Installed redis.conf to /etc/ \n You should look at this file!"
|
94
|
+
end
|
95
|
+
|
96
|
+
task :make do
|
97
|
+
sh "cd #{RedisRunner.redisdir} && make clean"
|
98
|
+
sh "cd #{RedisRunner.redisdir} && make"
|
99
|
+
end
|
100
|
+
|
101
|
+
desc "Download package"
|
102
|
+
task :download do
|
103
|
+
require 'git'
|
104
|
+
|
105
|
+
sh "rm -rf #{RedisRunner.redisdir} && mkdir -p vendor && rm -rf redis"
|
106
|
+
Git.clone("git://github.com/antirez/redis.git", "redis")
|
107
|
+
sh "mv redis vendor"
|
108
|
+
|
109
|
+
commit = case ENV['VERSION']
|
110
|
+
when "1.3.12" then "26ef09a83526e5099bce"
|
111
|
+
when "2.2.12" then "5960ac9dec5184bf4184"
|
112
|
+
when "2.2.4" then "2b886275e9756bb8619a"
|
113
|
+
when "2.0.5" then "9b695bb0a00c01ad4d55"
|
114
|
+
end
|
115
|
+
|
116
|
+
arguments = commit.nil? ? "pull origin master" : "reset --hard #{commit}"
|
117
|
+
sh "cd #{RedisRunner.redisdir} && git #{arguments}"
|
118
|
+
end
|
119
|
+
|
120
|
+
namespace :test do
|
121
|
+
desc "Run all the examples by starting a background Redis instance"
|
122
|
+
task :suite => 'redis:test:prepare' do
|
123
|
+
invoke_with_redis_replication 'redis:test:run'
|
124
|
+
end
|
125
|
+
|
126
|
+
Rake::TestTask.new(:run) do |t|
|
127
|
+
t.libs.push 'lib'
|
128
|
+
t.test_files = FileList['test/**/*_test.rb']
|
129
|
+
t.ruby_opts = ["-I test"]
|
130
|
+
t.verbose = true
|
131
|
+
end
|
132
|
+
|
133
|
+
task :prepare do
|
134
|
+
FileUtils.mkdir_p 'tmp/pids'
|
135
|
+
FileUtils.rm Dir.glob('tmp/*.rdb')
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
namespace :replication do
|
140
|
+
desc "Starts redis replication servers"
|
141
|
+
task :start do
|
142
|
+
RedisReplicationRunner.start
|
143
|
+
end
|
144
|
+
|
145
|
+
desc "Stops redis replication servers"
|
146
|
+
task :stop do
|
147
|
+
RedisReplicationRunner.stop
|
148
|
+
end
|
149
|
+
|
150
|
+
desc "Open an IRb session with the master/slave replication"
|
151
|
+
task :console do
|
152
|
+
RedisReplicationRunner.start
|
153
|
+
system "bundle exec irb -I lib -I extra -r redis-store.rb"
|
154
|
+
RedisReplicationRunner.stop
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
def invoke_with_redis_replication(task_name)
|
160
|
+
begin
|
161
|
+
Rake::Task["redis:replication:start"].invoke
|
162
|
+
Rake::Task[task_name].invoke
|
163
|
+
ensure
|
164
|
+
Rake::Task["redis:replication:stop"].invoke
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
data/redis-store.gemspec
CHANGED
@@ -1,105 +1,30 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "redis/store/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
6
|
+
s.name = "redis-store"
|
7
|
+
s.version = Redis::Store::VERSION
|
8
|
+
s.authors = ["Luca Guidi"]
|
9
|
+
s.email = ["guidi.luca@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Redis stores for Ruby frameworks}
|
13
12
|
s.description = %q{Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for Ruby web frameworks.}
|
14
|
-
s.email = %q{guidi.luca@gmail.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"README.md"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".travis.yml",
|
20
|
-
"CHANGELOG",
|
21
|
-
"Gemfile",
|
22
|
-
"MIT-LICENSE",
|
23
|
-
"README.md",
|
24
|
-
"Rakefile",
|
25
|
-
"VERSION",
|
26
|
-
"lib/action_controller/session/redis_session_store.rb",
|
27
|
-
"lib/active_support/cache/redis_store.rb",
|
28
|
-
"lib/cache/merb/redis_store.rb",
|
29
|
-
"lib/cache/sinatra/redis_store.rb",
|
30
|
-
"lib/i18n/backend/redis.rb",
|
31
|
-
"lib/rack/cache/redis_entitystore.rb",
|
32
|
-
"lib/rack/cache/redis_metastore.rb",
|
33
|
-
"lib/rack/session/merb.rb",
|
34
|
-
"lib/rack/session/redis.rb",
|
35
|
-
"lib/redis-store.rb",
|
36
|
-
"lib/redis/distributed_store.rb",
|
37
|
-
"lib/redis/factory.rb",
|
38
|
-
"lib/redis/store.rb",
|
39
|
-
"lib/redis/store/interface.rb",
|
40
|
-
"lib/redis/store/marshalling.rb",
|
41
|
-
"lib/redis/store/namespace.rb",
|
42
|
-
"lib/redis/store/ttl.rb",
|
43
|
-
"lib/redis/store/version.rb",
|
44
|
-
"redis-store.gemspec",
|
45
|
-
"spec/action_controller/session/redis_session_store_spec.rb",
|
46
|
-
"spec/active_support/cache/redis_store_spec.rb",
|
47
|
-
"spec/cache/merb/redis_store_spec.rb",
|
48
|
-
"spec/cache/sinatra/redis_store_spec.rb",
|
49
|
-
"spec/config/node-one.conf",
|
50
|
-
"spec/config/node-two.conf",
|
51
|
-
"spec/config/redis.conf",
|
52
|
-
"spec/i18n/backend/redis_spec.rb",
|
53
|
-
"spec/rack/cache/entitystore/pony.jpg",
|
54
|
-
"spec/rack/cache/entitystore/redis_spec.rb",
|
55
|
-
"spec/rack/cache/metastore/redis_spec.rb",
|
56
|
-
"spec/rack/session/redis_spec.rb",
|
57
|
-
"spec/redis/distributed_store_spec.rb",
|
58
|
-
"spec/redis/factory_spec.rb",
|
59
|
-
"spec/redis/store/interface_spec.rb",
|
60
|
-
"spec/redis/store/marshalling_spec.rb",
|
61
|
-
"spec/redis/store/namespace_spec.rb",
|
62
|
-
"spec/redis/store/version_spec.rb",
|
63
|
-
"spec/redis/store_spec.rb",
|
64
|
-
"spec/spec_helper.rb",
|
65
|
-
"tasks/redis.tasks.rb"
|
66
|
-
]
|
67
|
-
s.homepage = %q{http://github.com/jodosha/redis-store}
|
68
|
-
s.require_paths = [%q{lib}]
|
69
|
-
s.rubygems_version = %q{1.8.6}
|
70
|
-
s.summary = %q{Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for Ruby web frameworks.}
|
71
13
|
|
72
|
-
|
73
|
-
|
14
|
+
s.rubyforge_project = "redis-store"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'redis', '~> 2.2.0'
|
74
22
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
|
82
|
-
s.add_development_dependency(%q<i18n>, [">= 0"])
|
83
|
-
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
84
|
-
else
|
85
|
-
s.add_dependency(%q<redis>, ["~> 2.2.1"])
|
86
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
87
|
-
s.add_dependency(%q<git>, [">= 0"])
|
88
|
-
s.add_dependency(%q<rack-cache>, [">= 0"])
|
89
|
-
s.add_dependency(%q<merb>, ["= 1.1.0"])
|
90
|
-
s.add_dependency(%q<rspec>, ["= 1.3.0"])
|
91
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
92
|
-
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
93
|
-
end
|
94
|
-
else
|
95
|
-
s.add_dependency(%q<redis>, ["~> 2.2.1"])
|
96
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
97
|
-
s.add_dependency(%q<git>, [">= 0"])
|
98
|
-
s.add_dependency(%q<rack-cache>, [">= 0"])
|
99
|
-
s.add_dependency(%q<merb>, ["= 1.1.0"])
|
100
|
-
s.add_dependency(%q<rspec>, ["= 1.3.0"])
|
101
|
-
s.add_dependency(%q<i18n>, [">= 0"])
|
102
|
-
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
103
|
-
end
|
23
|
+
s.add_development_dependency 'rake', '~> 0.9.2.2'
|
24
|
+
s.add_development_dependency 'bundler', '~> 1.1.rc'
|
25
|
+
s.add_development_dependency 'mocha', '~> 0.10.0'
|
26
|
+
s.add_development_dependency 'minitest', '~> 2.8.0'
|
27
|
+
s.add_development_dependency 'purdytest', '~> 1.0.0'
|
28
|
+
s.add_development_dependency 'git', '~> 1.2.5'
|
104
29
|
end
|
105
30
|
|
@@ -14,11 +14,11 @@
|
|
14
14
|
|
15
15
|
# By default Redis does not run as a daemon. Use 'yes' if you need it.
|
16
16
|
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
|
17
|
-
daemonize
|
17
|
+
daemonize yes
|
18
18
|
|
19
19
|
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
|
20
20
|
# default. You can specify a custom pid file location here.
|
21
|
-
pidfile /
|
21
|
+
pidfile ./tmp/pids/node-one.pid
|
22
22
|
|
23
23
|
# Accept connections on the specified port, default is 6379.
|
24
24
|
# If port 0 is specified Redis will not listen on a TCP socket.
|
@@ -14,11 +14,11 @@
|
|
14
14
|
|
15
15
|
# By default Redis does not run as a daemon. Use 'yes' if you need it.
|
16
16
|
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
|
17
|
-
daemonize
|
17
|
+
daemonize yes
|
18
18
|
|
19
19
|
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
|
20
20
|
# default. You can specify a custom pid file location here.
|
21
|
-
pidfile /
|
21
|
+
pidfile ./tmp/pids/node-two.pid
|
22
22
|
|
23
23
|
# Accept connections on the specified port, default is 6379.
|
24
24
|
# If port 0 is specified Redis will not listen on a TCP socket.
|
@@ -14,11 +14,12 @@
|
|
14
14
|
|
15
15
|
# By default Redis does not run as a daemon. Use 'yes' if you need it.
|
16
16
|
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
|
17
|
-
daemonize
|
17
|
+
daemonize yes
|
18
18
|
|
19
19
|
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
|
20
20
|
# default. You can specify a custom pid file location here.
|
21
|
-
pidfile /var/run/redis.pid
|
21
|
+
# pidfile /var/run/redis.pid
|
22
|
+
pidfile ./tmp/pids/redis.pid
|
22
23
|
|
23
24
|
# Accept connections on the specified port, default is 6379.
|
24
25
|
# If port 0 is specified Redis will not listen on a TCP socket.
|
@@ -1,7 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
describe "Redis::DistributedStore" do
|
4
|
-
|
4
|
+
def setup
|
5
5
|
@dmr = Redis::DistributedStore.new [
|
6
6
|
{:host => "localhost", :port => "6380", :db => 0},
|
7
7
|
{:host => "localhost", :port => "6381", :db => 0}
|
@@ -11,44 +11,42 @@ describe "Redis::DistributedStore" do
|
|
11
11
|
@dmr.set "rabbit", @rabbit
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
def teardown
|
15
15
|
@dmr.ring.nodes.each { |server| server.flushdb }
|
16
16
|
end
|
17
17
|
|
18
|
-
it "
|
18
|
+
it "accepts connection params" do
|
19
19
|
dmr = Redis::DistributedStore.new [ :host => "localhost", :port => "6380", :db => "1" ]
|
20
20
|
dmr.ring.nodes.size == 1
|
21
21
|
mr = dmr.ring.nodes.first
|
22
|
-
mr.to_s.
|
22
|
+
mr.to_s.must_equal("Redis Client connected to localhost:6380 against DB 1")
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
25
|
+
it "forces reconnection" do
|
26
26
|
@dmr.nodes.each do |node|
|
27
|
-
node.
|
27
|
+
node.expects(:reconnect)
|
28
28
|
end
|
29
29
|
|
30
30
|
@dmr.reconnect
|
31
31
|
end
|
32
32
|
|
33
|
-
it "
|
33
|
+
it "sets an object" do
|
34
34
|
@dmr.set "rabbit", @white_rabbit
|
35
|
-
@dmr.get("rabbit").
|
35
|
+
@dmr.get("rabbit").must_equal(@white_rabbit)
|
36
36
|
end
|
37
37
|
|
38
|
-
it "
|
39
|
-
@dmr.get("rabbit").
|
38
|
+
it "gets an object" do
|
39
|
+
@dmr.get("rabbit").must_equal(@rabbit)
|
40
40
|
end
|
41
41
|
|
42
42
|
describe "namespace" do
|
43
|
-
|
43
|
+
it "uses namespaced key" do
|
44
44
|
@dmr = Redis::DistributedStore.new [
|
45
45
|
{:host => "localhost", :port => "6380", :db => 0},
|
46
46
|
{:host => "localhost", :port => "6381", :db => 0}
|
47
47
|
], :namespace => "theplaylist"
|
48
|
-
end
|
49
48
|
|
50
|
-
|
51
|
-
@dmr.should_receive(:node_for).with("theplaylist:rabbit").and_return @dmr.nodes.first
|
49
|
+
@dmr.expects(:node_for).with("theplaylist:rabbit").returns(@dmr.nodes.first)
|
52
50
|
@dmr.get "rabbit"
|
53
51
|
end
|
54
52
|
end
|