robut-rdio 0.1.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/.document +5 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +54 -0
- data/LICENSE.txt +20 -0
- data/README.md +79 -0
- data/README.rdoc +19 -0
- data/Rakefile +54 -0
- data/VERSION +1 -0
- data/lib/robut-rdio.rb +174 -0
- data/lib/server/public/css/rdio.css +141 -0
- data/lib/server/public/css/style.css +79 -0
- data/lib/server/public/css/style_after.css +42 -0
- data/lib/server/public/images/background.png +0 -0
- data/lib/server/public/images/no-album.png +0 -0
- data/lib/server/public/index.html +43 -0
- data/lib/server/public/js/libs/dd_belatedpng.js +13 -0
- data/lib/server/public/js/libs/jquery-1.5.1.min.js +16 -0
- data/lib/server/public/js/libs/modernizr-1.7.min.js +2 -0
- data/lib/server/public/js/rdio.js +170 -0
- data/lib/server/public/js/script.js +3 -0
- data/lib/server/server.rb +72 -0
- data/lib/tasks/shell.rake +1 -0
- data/plugin-tester.rb +52 -0
- data/robut-rdio.gemspec +92 -0
- data/spec/robut-rdio_spec.rb +101 -0
- data/spec/spec_helper.rb +12 -0
- metadata +178 -0
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'robut'
|
2
|
+
require 'sinatra'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class Robut::Plugin::Rdio
|
6
|
+
include Robut::Plugin
|
7
|
+
|
8
|
+
# A simple server to communicate new Rdio sources to the Web
|
9
|
+
# Playback API. The client will update
|
10
|
+
# Robut::Plugin::Rdio::Server.queue with any new sources, and a call
|
11
|
+
# to /queue.json will pull those new sources as a json object.
|
12
|
+
class Server < Sinatra::Base
|
13
|
+
|
14
|
+
set :root, File.dirname(__FILE__)
|
15
|
+
|
16
|
+
class << self
|
17
|
+
# A list of items that haven't been fetched by the web playback
|
18
|
+
# API yet.
|
19
|
+
attr_accessor :queue
|
20
|
+
|
21
|
+
# A command list for the player to execute
|
22
|
+
attr_accessor :command
|
23
|
+
|
24
|
+
# The playback token for +domain+. If you're accessing Rdio over
|
25
|
+
# localhost, you shouldn't need to change this. Otherwise,
|
26
|
+
# download the rdio-python plugin:
|
27
|
+
#
|
28
|
+
# https://github.com/rdio/rdio-python
|
29
|
+
#
|
30
|
+
# and generate a new token for your domain:
|
31
|
+
#
|
32
|
+
# ./rdio-call --consumer-key=YOUR_CONSUMER_KEY --consumer-secret=YOUR_CONSUMER_SECRET getPlaybackToken domain=YOUR_DOMAIN
|
33
|
+
attr_accessor :token
|
34
|
+
|
35
|
+
# The domain associated with +token+. Defaults to localhost.
|
36
|
+
attr_accessor :domain
|
37
|
+
end
|
38
|
+
self.queue = []
|
39
|
+
self.command = []
|
40
|
+
|
41
|
+
# Renders a simple Rdio web player.
|
42
|
+
get '/' do
|
43
|
+
File.read(File.expand_path('public/index.html', File.dirname(__FILE__)))
|
44
|
+
end
|
45
|
+
|
46
|
+
get '/js/vars.js' do
|
47
|
+
content_type 'text/javascript'
|
48
|
+
<<END
|
49
|
+
var rdio_token = '#{self.class.token}';
|
50
|
+
var rdio_domain = '#{self.class.domain}';
|
51
|
+
END
|
52
|
+
end
|
53
|
+
|
54
|
+
# Returns the sources that haven't been fetched yet.
|
55
|
+
get '/queue.json' do
|
56
|
+
queue = self.class.queue.dup
|
57
|
+
self.class.queue = []
|
58
|
+
queue.to_json
|
59
|
+
end
|
60
|
+
|
61
|
+
# Returns the command for the player
|
62
|
+
get '/command.json' do
|
63
|
+
command = self.class.command.dup
|
64
|
+
self.class.command = []
|
65
|
+
command.to_json
|
66
|
+
end
|
67
|
+
|
68
|
+
# start the server if ruby file executed directly
|
69
|
+
run! if app_file == $0
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
|
data/plugin-tester.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'robut'
|
3
|
+
require_relative 'lib/robut-rdio'
|
4
|
+
require 'highline/import'
|
5
|
+
|
6
|
+
|
7
|
+
Robut::Plugin::Rdio.key = ENV['RDIO_KEY']
|
8
|
+
Robut::Plugin::Rdio.secret = ENV['RDIO_SECRET']
|
9
|
+
puts "Starting sinatra..."
|
10
|
+
Robut::Plugin::Rdio.start_server
|
11
|
+
|
12
|
+
@plugin = Robut::Plugin::Rdio.new(nil)
|
13
|
+
|
14
|
+
|
15
|
+
def @plugin.nick
|
16
|
+
return 'dj'
|
17
|
+
end
|
18
|
+
|
19
|
+
def @plugin.reply(msg)
|
20
|
+
puts msg
|
21
|
+
end
|
22
|
+
|
23
|
+
def fade_out
|
24
|
+
puts
|
25
|
+
puts 'Exiting fake hipchat client...'
|
26
|
+
puts
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
|
30
|
+
sleep(0.5)
|
31
|
+
puts <<-EOMSG
|
32
|
+
Welcome to the robut plugin test environment.
|
33
|
+
|
34
|
+
You can direct your messages to the bot using:
|
35
|
+
@#{@plugin.nick}
|
36
|
+
|
37
|
+
Type 'exit' or 'quit' to exit this session
|
38
|
+
|
39
|
+
EOMSG
|
40
|
+
while(true) do
|
41
|
+
begin
|
42
|
+
msg = ask('hipchat> ')
|
43
|
+
|
44
|
+
@plugin.handle(Time.now, 'Bob', msg)
|
45
|
+
|
46
|
+
if msg =~ /quit|exit/
|
47
|
+
fade_out
|
48
|
+
end
|
49
|
+
rescue Interrupt
|
50
|
+
fade_out
|
51
|
+
end
|
52
|
+
end
|
data/robut-rdio.gemspec
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "robut-rdio"
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Adam Pearson"]
|
12
|
+
s.date = "2011-11-10"
|
13
|
+
s.description = ""
|
14
|
+
s.email = "ampearson@gmail.com"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.md",
|
18
|
+
"README.rdoc"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".document",
|
22
|
+
".rspec",
|
23
|
+
".rvmrc",
|
24
|
+
"Gemfile",
|
25
|
+
"Gemfile.lock",
|
26
|
+
"LICENSE.txt",
|
27
|
+
"README.md",
|
28
|
+
"README.rdoc",
|
29
|
+
"Rakefile",
|
30
|
+
"VERSION",
|
31
|
+
"lib/robut-rdio.rb",
|
32
|
+
"lib/server/public/css/rdio.css",
|
33
|
+
"lib/server/public/css/style.css",
|
34
|
+
"lib/server/public/css/style_after.css",
|
35
|
+
"lib/server/public/images/background.png",
|
36
|
+
"lib/server/public/images/no-album.png",
|
37
|
+
"lib/server/public/index.html",
|
38
|
+
"lib/server/public/js/libs/dd_belatedpng.js",
|
39
|
+
"lib/server/public/js/libs/jquery-1.5.1.min.js",
|
40
|
+
"lib/server/public/js/libs/modernizr-1.7.min.js",
|
41
|
+
"lib/server/public/js/rdio.js",
|
42
|
+
"lib/server/public/js/script.js",
|
43
|
+
"lib/server/server.rb",
|
44
|
+
"lib/tasks/shell.rake",
|
45
|
+
"plugin-tester.rb",
|
46
|
+
"robut-rdio.gemspec",
|
47
|
+
"spec/robut-rdio_spec.rb",
|
48
|
+
"spec/spec_helper.rb"
|
49
|
+
]
|
50
|
+
s.homepage = "http://github.com/radamant/robut-rdio"
|
51
|
+
s.licenses = ["MIT"]
|
52
|
+
s.require_paths = ["lib"]
|
53
|
+
s.rubygems_version = "1.8.10"
|
54
|
+
s.summary = "An RDIO client/server plugin for Robut"
|
55
|
+
|
56
|
+
if s.respond_to? :specification_version then
|
57
|
+
s.specification_version = 3
|
58
|
+
|
59
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
60
|
+
s.add_runtime_dependency(%q<robut>, [">= 0"])
|
61
|
+
s.add_development_dependency(%q<thin>, [">= 0"])
|
62
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
63
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
64
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
65
|
+
s.add_development_dependency(%q<rcov>, [">= 0"])
|
66
|
+
s.add_development_dependency(%q<rdio>, ["= 0.0.91"])
|
67
|
+
s.add_development_dependency(%q<sinatra>, [">= 0"])
|
68
|
+
s.add_development_dependency(%q<highline>, [">= 0"])
|
69
|
+
else
|
70
|
+
s.add_dependency(%q<robut>, [">= 0"])
|
71
|
+
s.add_dependency(%q<thin>, [">= 0"])
|
72
|
+
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
73
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
74
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
75
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
76
|
+
s.add_dependency(%q<rdio>, ["= 0.0.91"])
|
77
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
78
|
+
s.add_dependency(%q<highline>, [">= 0"])
|
79
|
+
end
|
80
|
+
else
|
81
|
+
s.add_dependency(%q<robut>, [">= 0"])
|
82
|
+
s.add_dependency(%q<thin>, [">= 0"])
|
83
|
+
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
84
|
+
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
85
|
+
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
86
|
+
s.add_dependency(%q<rcov>, [">= 0"])
|
87
|
+
s.add_dependency(%q<rdio>, ["= 0.0.91"])
|
88
|
+
s.add_dependency(%q<sinatra>, [">= 0"])
|
89
|
+
s.add_dependency(%q<highline>, [">= 0"])
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
# Wherein we test legacy code, and hopefully refactor and remove this file
|
4
|
+
describe "RobutRdio Super Integration Test" do
|
5
|
+
let(:plugin) do plugin = Robut::Plugin::Rdio.new(nil)
|
6
|
+
def plugin.nick
|
7
|
+
"dj"
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
plugin.stub(:reply){|msg|
|
12
|
+
@reply = msg
|
13
|
+
}
|
14
|
+
|
15
|
+
plugin
|
16
|
+
end
|
17
|
+
|
18
|
+
def say(msg)
|
19
|
+
plugin.handle(Time.now, 'foo bar', msg)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "searching for tracks" do
|
23
|
+
|
24
|
+
|
25
|
+
it 'should make an rdio search' do
|
26
|
+
stub_search('neil young', ['harvest', 'after the gold rush'])
|
27
|
+
say('@dj find neil young')
|
28
|
+
@reply.should == "result: harvest\nresult: after the gold rush\n"
|
29
|
+
end
|
30
|
+
|
31
|
+
def stub_search(mock_query, results)
|
32
|
+
plugin.stub(:search).with(['', mock_query]){results}
|
33
|
+
results.each do |result|
|
34
|
+
plugin.stub(:format_result).with(result, anything()){"result: #{result}"}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'queuing tracks' do
|
42
|
+
|
43
|
+
describe 'when there is a search result' do
|
44
|
+
before do
|
45
|
+
plugin.stub(:result_at){|i| i.to_s}
|
46
|
+
plugin.stub(:queue){|result| @queued = result}
|
47
|
+
plugin.stub(:has_results?){true}
|
48
|
+
plugin.stub(:has_result?){true}
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should queue the track at the given position with "play <number>"' do
|
52
|
+
say '@dj play 1'
|
53
|
+
@queued.should == '1'
|
54
|
+
|
55
|
+
say '@dj 8'
|
56
|
+
@queued.should == '8'
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'when there are no search results' do
|
62
|
+
before do
|
63
|
+
plugin.stub(:has_results?){false}
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should say there are no results' do
|
67
|
+
say '@dj play 9'
|
68
|
+
@reply.should == "I don't have any search results"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'when there are results but not at the requested index' do
|
73
|
+
before do
|
74
|
+
plugin.stub(:has_results?){true}
|
75
|
+
plugin.stub(:has_result?).with(5){false}
|
76
|
+
end
|
77
|
+
it 'should say the result does not exist' do
|
78
|
+
say '@dj play 5'
|
79
|
+
@reply.should == "I don't have that result"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "I'm feeling lucky play/search" do
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
describe 'running commands' do
|
89
|
+
before do
|
90
|
+
plugin.stub(:run_command){|command| @command = command}
|
91
|
+
end
|
92
|
+
|
93
|
+
%w{play unpause pause next restart back clear}.each do |command|
|
94
|
+
it "should run #{command}" do
|
95
|
+
say("@dj #{command}")
|
96
|
+
@command.should == command
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'robut-rdio'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: robut-rdio
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Adam Pearson
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-10 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: robut
|
16
|
+
requirement: &70225959595020 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70225959595020
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: thin
|
27
|
+
requirement: &70225959594500 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70225959594500
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70225959593940 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.3.0
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70225959593940
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
49
|
+
requirement: &70225959593440 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.0.0
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70225959593440
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: jeweler
|
60
|
+
requirement: &70225959592960 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.6.4
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70225959592960
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rcov
|
71
|
+
requirement: &70225959592440 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *70225959592440
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rdio
|
82
|
+
requirement: &70225959591920 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - =
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 0.0.91
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *70225959591920
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: sinatra
|
93
|
+
requirement: &70225959591380 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70225959591380
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: highline
|
104
|
+
requirement: &70225959590900 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *70225959590900
|
113
|
+
description: ''
|
114
|
+
email: ampearson@gmail.com
|
115
|
+
executables: []
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files:
|
118
|
+
- LICENSE.txt
|
119
|
+
- README.md
|
120
|
+
- README.rdoc
|
121
|
+
files:
|
122
|
+
- .document
|
123
|
+
- .rspec
|
124
|
+
- .rvmrc
|
125
|
+
- Gemfile
|
126
|
+
- Gemfile.lock
|
127
|
+
- LICENSE.txt
|
128
|
+
- README.md
|
129
|
+
- README.rdoc
|
130
|
+
- Rakefile
|
131
|
+
- VERSION
|
132
|
+
- lib/robut-rdio.rb
|
133
|
+
- lib/server/public/css/rdio.css
|
134
|
+
- lib/server/public/css/style.css
|
135
|
+
- lib/server/public/css/style_after.css
|
136
|
+
- lib/server/public/images/background.png
|
137
|
+
- lib/server/public/images/no-album.png
|
138
|
+
- lib/server/public/index.html
|
139
|
+
- lib/server/public/js/libs/dd_belatedpng.js
|
140
|
+
- lib/server/public/js/libs/jquery-1.5.1.min.js
|
141
|
+
- lib/server/public/js/libs/modernizr-1.7.min.js
|
142
|
+
- lib/server/public/js/rdio.js
|
143
|
+
- lib/server/public/js/script.js
|
144
|
+
- lib/server/server.rb
|
145
|
+
- lib/tasks/shell.rake
|
146
|
+
- plugin-tester.rb
|
147
|
+
- robut-rdio.gemspec
|
148
|
+
- spec/robut-rdio_spec.rb
|
149
|
+
- spec/spec_helper.rb
|
150
|
+
homepage: http://github.com/radamant/robut-rdio
|
151
|
+
licenses:
|
152
|
+
- MIT
|
153
|
+
post_install_message:
|
154
|
+
rdoc_options: []
|
155
|
+
require_paths:
|
156
|
+
- lib
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
158
|
+
none: false
|
159
|
+
requirements:
|
160
|
+
- - ! '>='
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
segments:
|
164
|
+
- 0
|
165
|
+
hash: 1997263942340461692
|
166
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
|
+
none: false
|
168
|
+
requirements:
|
169
|
+
- - ! '>='
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 1.8.10
|
175
|
+
signing_key:
|
176
|
+
specification_version: 3
|
177
|
+
summary: An RDIO client/server plugin for Robut
|
178
|
+
test_files: []
|