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.
@@ -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
@@ -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
@@ -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: []