robut 0.2.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/.gitignore +6 -0
- data/Gemfile +17 -0
- data/README.rdoc +124 -0
- data/Rakefile +27 -0
- data/bin/robut +9 -0
- data/examples/Chatfile +22 -0
- data/lib/robut.rb +5 -0
- data/lib/robut/connection.rb +167 -0
- data/lib/robut/plugin.rb +16 -0
- data/lib/robut/plugin/base.rb +70 -0
- data/lib/robut/plugin/calc.rb +20 -0
- data/lib/robut/plugin/echo.rb +14 -0
- data/lib/robut/plugin/later.rb +73 -0
- data/lib/robut/plugin/lunch.rb +57 -0
- data/lib/robut/plugin/meme.rb +30 -0
- data/lib/robut/plugin/ping.rb +11 -0
- data/lib/robut/plugin/rdio.rb +70 -0
- data/lib/robut/plugin/rdio/public/css/rdio.css +141 -0
- data/lib/robut/plugin/rdio/public/css/style.css +79 -0
- data/lib/robut/plugin/rdio/public/css/style_after.css +42 -0
- data/lib/robut/plugin/rdio/public/images/background.png +0 -0
- data/lib/robut/plugin/rdio/public/images/no-album.png +0 -0
- data/lib/robut/plugin/rdio/public/index.html +42 -0
- data/lib/robut/plugin/rdio/public/js/libs/dd_belatedpng.js +13 -0
- data/lib/robut/plugin/rdio/public/js/libs/jquery-1.5.1.min.js +16 -0
- data/lib/robut/plugin/rdio/public/js/libs/modernizr-1.7.min.js +2 -0
- data/lib/robut/plugin/rdio/public/js/rdio.js +129 -0
- data/lib/robut/plugin/rdio/public/js/script.js +3 -0
- data/lib/robut/plugin/rdio/server.rb +34 -0
- data/lib/robut/plugin/say.rb +20 -0
- data/lib/robut/plugin/sayings.rb +31 -0
- data/lib/robut/plugin/twss.rb +13 -0
- data/lib/robut/storage.rb +3 -0
- data/lib/robut/storage/base.rb +21 -0
- data/lib/robut/storage/hash_store.rb +26 -0
- data/lib/robut/storage/yaml_store.rb +51 -0
- data/lib/robut/version.rb +4 -0
- data/robut.gemspec +23 -0
- data/test/mocks/connection_mock.rb +26 -0
- data/test/simplecov_helper.rb +2 -0
- data/test/test_helper.rb +7 -0
- data/test/unit/connection_test.rb +123 -0
- data/test/unit/plugin/base_test.rb +16 -0
- data/test/unit/plugin/echo_test.rb +26 -0
- data/test/unit/plugin/later_test.rb +39 -0
- data/test/unit/plugin/lunch_test.rb +35 -0
- data/test/unit/plugin/ping_test.rb +21 -0
- data/test/unit/plugin/say_test.rb +28 -0
- data/test/unit/storage/hash_store_test.rb +15 -0
- data/test/unit/storage/yaml_store_test.rb +42 -0
- data/test/unit/storage/yaml_test.yml +1 -0
- metadata +135 -0
data/robut.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "robut/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "robut"
|
7
|
+
s.version = Robut::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Justin Weiss"]
|
10
|
+
s.email = ["justin@uberweiss.org"]
|
11
|
+
s.homepage = "http://rdoc.info/github/justinweiss/robut/master/frames"
|
12
|
+
s.summary = %q{A simple plugin-enabled HipChat bot}
|
13
|
+
s.description = %q{A simple plugin-enabled HipChat bot}
|
14
|
+
|
15
|
+
s.rubyforge_project = "robut"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency "xmpp4r", "~> 0.5.0"
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'robut/storage/hash_store'
|
2
|
+
|
3
|
+
class Robut::ConnectionMock < Robut::Connection
|
4
|
+
|
5
|
+
def initialize(config = nil)
|
6
|
+
self.config = config || self.class.config
|
7
|
+
self.store = Robut::Storage::HashStore
|
8
|
+
end
|
9
|
+
|
10
|
+
def replies
|
11
|
+
@replies ||= []
|
12
|
+
end
|
13
|
+
|
14
|
+
def reply(msg, to = nil)
|
15
|
+
replies << msg
|
16
|
+
end
|
17
|
+
|
18
|
+
def handle_message(plugins, time, nick, message)
|
19
|
+
messages << [time, nick, message]
|
20
|
+
end
|
21
|
+
|
22
|
+
def messages
|
23
|
+
@messages ||= []
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class SimplePlugin
|
4
|
+
attr_accessor :run
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
super(*args)
|
8
|
+
@run = false
|
9
|
+
end
|
10
|
+
|
11
|
+
def handle(*args)
|
12
|
+
self.run = true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class ReplyToUserPlugin < Robut::Plugin::Base
|
17
|
+
def initialize(*args)
|
18
|
+
super(*args)
|
19
|
+
end
|
20
|
+
|
21
|
+
def handle(time, nick, message)
|
22
|
+
reply("Reply", nick)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class ReplyToRoomPlugin < Robut::Plugin::Base
|
27
|
+
def initialize(*args)
|
28
|
+
super(*args)
|
29
|
+
end
|
30
|
+
|
31
|
+
def handle(time, nick, message)
|
32
|
+
reply("Reply", :room)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class ReplyMock
|
37
|
+
attr_accessor :messages
|
38
|
+
|
39
|
+
def initialize
|
40
|
+
@messages = []
|
41
|
+
end
|
42
|
+
|
43
|
+
def send(message)
|
44
|
+
@messages << message
|
45
|
+
end
|
46
|
+
|
47
|
+
def room
|
48
|
+
"my_room@test.com"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class ConnectionTest < Test::Unit::TestCase
|
53
|
+
|
54
|
+
def setup
|
55
|
+
Robut::Plugin.plugins = [SimplePlugin]
|
56
|
+
@connection = Robut::Connection.new({
|
57
|
+
:jid => 'abc@def.com',
|
58
|
+
:nick => "Test Robut"
|
59
|
+
})
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_end_to_end_message
|
63
|
+
Robut::Plugin.plugins = [Robut::Plugin::Echo]
|
64
|
+
@connection.muc = ReplyMock.new
|
65
|
+
@connection.handle_message(plugins(@connection), Time.now, 'Justin', '@test echo Test Message')
|
66
|
+
message = @connection.muc.messages.first
|
67
|
+
assert_equal(@connection.muc.room, message.to.to_s)
|
68
|
+
assert_equal("Test Message", message.body)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_handle_message_delegates_to_plugin
|
72
|
+
plugins = plugins(@connection)
|
73
|
+
assert !plugins.first.run, "The plugin was not set up correctly."
|
74
|
+
@connection.handle_message(plugins, Time.now, 'Justin', 'Test Message')
|
75
|
+
assert plugins.first.run, "The plugin's handle_message method should have been run"
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_handle_message_from_person
|
79
|
+
Robut::Plugin.plugins = [Robut::Plugin::Echo]
|
80
|
+
sender = Jabber::JID.new('justin@example.com')
|
81
|
+
@connection.client = ReplyMock.new
|
82
|
+
@connection.handle_message(plugins(@connection, sender), Time.now, 'Justin', '@test echo Test Message')
|
83
|
+
message = @connection.client.messages.first
|
84
|
+
assert_equal(sender, message.to)
|
85
|
+
assert_equal("Test Message", message.body)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_reply_directly_to_user
|
89
|
+
Robut::Plugin.plugins = [ReplyToUserPlugin]
|
90
|
+
@connection.client = ReplyMock.new
|
91
|
+
justin = Jabber::JID.new('justin@example.com')
|
92
|
+
@connection.roster = OpenStruct.new({
|
93
|
+
:items => {
|
94
|
+
justin => OpenStruct.new({
|
95
|
+
:iname => "Justin Weiss"
|
96
|
+
})
|
97
|
+
}
|
98
|
+
})
|
99
|
+
|
100
|
+
@connection.handle_message(plugins(@connection), Time.now, 'justin WEISS', 'Test Message')
|
101
|
+
message = @connection.client.messages.first
|
102
|
+
assert_equal(justin, message.to.to_s)
|
103
|
+
assert_equal(:chat, message.type)
|
104
|
+
assert_equal("Reply", message.body)
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_reply_directly_to_room
|
108
|
+
Robut::Plugin.plugins = [ReplyToRoomPlugin]
|
109
|
+
sender = Jabber::JID.new('justin@example.com')
|
110
|
+
@connection.muc = ReplyMock.new
|
111
|
+
@connection.handle_message(plugins(@connection, sender), Time.now, 'Justin', '@test echo Test Message')
|
112
|
+
message = @connection.muc.messages.first
|
113
|
+
assert_equal(@connection.muc.room, message.to.to_s)
|
114
|
+
assert_equal("Reply", message.body)
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
def plugins(connection, sender = nil)
|
120
|
+
Robut::Plugin.plugins.map { |p| p.new(connection, sender) }
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Robut::Plugin::BaseTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_sent_to_me?
|
6
|
+
plugin = Robut::Plugin::Base.new(Robut::ConnectionMock.new)
|
7
|
+
|
8
|
+
assert plugin.sent_to_me?("@Robut hello there")
|
9
|
+
assert !plugin.sent_to_me?("@Robuto hello there")
|
10
|
+
assert !plugin.sent_to_me?("@David hello there")
|
11
|
+
assert plugin.sent_to_me?("this is a @Robut message")
|
12
|
+
assert plugin.sent_to_me?("this is a message to @robut")
|
13
|
+
assert !plugin.sent_to_me?("this is a message to@robut")
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'robut/plugin/echo'
|
3
|
+
|
4
|
+
class Robut::Plugin::EchoTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@connection = Robut::ConnectionMock.new
|
8
|
+
@plugin = Robut::Plugin::Echo.new(@connection)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_replies_with_this
|
12
|
+
@plugin.handle(Time.now, "@john", "@robut echo this")
|
13
|
+
assert_equal ["this"], @plugin.connection.replies
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_replies_with_nicks
|
17
|
+
@plugin.handle(Time.now, "@john", "@robut echo @justin look over here!")
|
18
|
+
assert_equal ["@justin look over here!"], @plugin.connection.replies
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_doesnt_reply_with_empty
|
22
|
+
@plugin.handle(Time.now, "@john", "@robut echo")
|
23
|
+
assert_equal [], @plugin.connection.replies
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'robut/plugin/later'
|
3
|
+
|
4
|
+
class Robut::Plugin::LaterTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@connection = Robut::ConnectionMock.new
|
8
|
+
@plugin = Robut::Plugin::Later.new(@connection)
|
9
|
+
@plugin.instance_eval do
|
10
|
+
def threader; yield; end # no threads
|
11
|
+
def sleep(*prms); end # just skip the whole sleeping part
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_replies_with_minutes
|
16
|
+
@plugin.handle(Time.now, "@john", "@robut in 0 minutes msg me")
|
17
|
+
assert_equal ["Ok, see you in 0 minutes"], @plugin.connection.replies
|
18
|
+
message = @plugin.connection.messages.first
|
19
|
+
assert message
|
20
|
+
assert_equal message[1], "@john"
|
21
|
+
assert_equal message[2], "@robut msg me"
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_replies_with_sec
|
25
|
+
@plugin.handle(Time.now, "@john", "@robut in 1 sec msg me")
|
26
|
+
assert_equal ["Ok, see you in 1 sec"], @plugin.connection.replies
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_replies_with_hr
|
30
|
+
@plugin.handle(Time.now, "@john", "@robut in 1 hr msg me")
|
31
|
+
assert_equal ["Ok, see you in 1 hr"], @plugin.connection.replies
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_replies_with_hrs
|
35
|
+
@plugin.handle(Time.now, "@john", "@robut in 2 hrs msg me")
|
36
|
+
assert_equal ["Ok, see you in 2 hrs"], @plugin.connection.replies
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'robut/plugin/lunch'
|
3
|
+
|
4
|
+
class Robut::Plugin::LunchTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@connection = Robut::ConnectionMock.new
|
8
|
+
@plugin = Robut::Plugin::Lunch.new(@connection)
|
9
|
+
@plugin.places = ["Pho"]
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_handle_returns_pho_for_lunch
|
13
|
+
@plugin.handle(Time.now, "John", "lunch?")
|
14
|
+
assert_equal ["Pho!"], @plugin.connection.replies
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_handle_returns_all_places_for_lunch_places
|
18
|
+
@plugin.new_place("Teriyaki")
|
19
|
+
@plugin.handle(Time.now, "John", "@robut lunch places")
|
20
|
+
assert_equal ["Pho, Teriyaki"], @plugin.connection.replies
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_handle_new_lunch_place
|
24
|
+
@plugin.handle(Time.now, "John", "@robut new lunch place Green Leaf")
|
25
|
+
assert_equal ["Ok, I'll add \"Green Leaf\" to the the list of lunch places"], @plugin.connection.replies
|
26
|
+
assert @plugin.places.include?("Green Leaf")
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_handle_remove_lunch_place
|
30
|
+
@plugin.handle(Time.now, "John", "@robut remove lunch place Pho")
|
31
|
+
assert_equal ["I removed \"Pho\" from the list of lunch places"], @plugin.connection.replies
|
32
|
+
assert @plugin.places.empty?
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'robut/plugin/ping'
|
3
|
+
|
4
|
+
class Robut::Plugin::PingTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@connection = Robut::ConnectionMock.new
|
8
|
+
@plugin = Robut::Plugin::Ping.new(@connection)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_replies_wih_pong
|
12
|
+
@plugin.handle(Time.now, "@john", "@robut ping")
|
13
|
+
assert_equal ["pong"], @plugin.connection.replies
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_replies_wih_sec
|
17
|
+
@plugin.handle(Time.now, "@john", "@robut ping pong")
|
18
|
+
assert_equal [], @plugin.connection.replies
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'robut/plugin/say'
|
3
|
+
|
4
|
+
class Robut::Plugin::SayTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@connection = Robut::ConnectionMock.new
|
8
|
+
@plugin = Robut::Plugin::Say.new(@connection)
|
9
|
+
@plugin.instance_eval do
|
10
|
+
# Stub out system
|
11
|
+
def system(c); system_calls << c; end
|
12
|
+
def system_calls; @system_calls ||= []; end;
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_says_stuff
|
17
|
+
@plugin.handle(Time.now, "@john", "@robut say stuff")
|
18
|
+
assert_equal [], @plugin.connection.replies # shouldn't reply to the chat room
|
19
|
+
assert_equal ["say stuff"], @plugin.system_calls
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_doesnt_say_stuff
|
23
|
+
@plugin.handle(Time.now, "@john", "@robut ok don't say stuff")
|
24
|
+
assert_equal [], @plugin.connection.replies
|
25
|
+
assert_equal [], @plugin.system_calls
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'robut/storage/hash_store'
|
3
|
+
|
4
|
+
class Robut::Storage::HashStoreTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@store = Robut::Storage::HashStore
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_can_write_and_read
|
11
|
+
assert_equal 'in the trunk', (@store['junk'] = 'in the trunk')
|
12
|
+
assert_equal 'in the trunk', @store['junk']
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'robut/storage/yaml_store'
|
3
|
+
|
4
|
+
class Robut::Storage::YamlStoreTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@store = Robut::Storage::YamlStore
|
8
|
+
@store.file = new_yaml_file
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
File.delete new_yaml_file if File.exists?(new_yaml_file)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_can_write_and_read
|
16
|
+
assert_equal 'in the trunk', (@store['junk'] = 'in the trunk')
|
17
|
+
assert_equal 'in the trunk', @store['junk']
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_read_from_file
|
21
|
+
@store.file = test_yaml_file
|
22
|
+
assert_equal 'bar', @store['foo']
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_persists_to_file
|
26
|
+
@store['pot'] = 'roast'
|
27
|
+
assert File.exists?(new_yaml_file)
|
28
|
+
yaml = YAML.load_file(new_yaml_file)
|
29
|
+
assert_equal 'roast', yaml['pot']
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def test_yaml_file
|
35
|
+
File.join(File.dirname(__FILE__), 'yaml_test.yml')
|
36
|
+
end
|
37
|
+
|
38
|
+
def new_yaml_file
|
39
|
+
File.join(File.dirname(__FILE__), 'new_yaml_test.yml')
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
foo: bar
|
metadata
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: robut
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Justin Weiss
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-05-18 00:00:00 -07:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: xmpp4r
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ~>
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.5.0
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: *id001
|
27
|
+
description: A simple plugin-enabled HipChat bot
|
28
|
+
email:
|
29
|
+
- justin@uberweiss.org
|
30
|
+
executables:
|
31
|
+
- robut
|
32
|
+
extensions: []
|
33
|
+
|
34
|
+
extra_rdoc_files: []
|
35
|
+
|
36
|
+
files:
|
37
|
+
- .gitignore
|
38
|
+
- Gemfile
|
39
|
+
- README.rdoc
|
40
|
+
- Rakefile
|
41
|
+
- bin/robut
|
42
|
+
- examples/Chatfile
|
43
|
+
- lib/robut.rb
|
44
|
+
- lib/robut/connection.rb
|
45
|
+
- lib/robut/plugin.rb
|
46
|
+
- lib/robut/plugin/base.rb
|
47
|
+
- lib/robut/plugin/calc.rb
|
48
|
+
- lib/robut/plugin/echo.rb
|
49
|
+
- lib/robut/plugin/later.rb
|
50
|
+
- lib/robut/plugin/lunch.rb
|
51
|
+
- lib/robut/plugin/meme.rb
|
52
|
+
- lib/robut/plugin/ping.rb
|
53
|
+
- lib/robut/plugin/rdio.rb
|
54
|
+
- lib/robut/plugin/rdio/public/css/rdio.css
|
55
|
+
- lib/robut/plugin/rdio/public/css/style.css
|
56
|
+
- lib/robut/plugin/rdio/public/css/style_after.css
|
57
|
+
- lib/robut/plugin/rdio/public/images/background.png
|
58
|
+
- lib/robut/plugin/rdio/public/images/no-album.png
|
59
|
+
- lib/robut/plugin/rdio/public/index.html
|
60
|
+
- lib/robut/plugin/rdio/public/js/libs/dd_belatedpng.js
|
61
|
+
- lib/robut/plugin/rdio/public/js/libs/jquery-1.5.1.min.js
|
62
|
+
- lib/robut/plugin/rdio/public/js/libs/modernizr-1.7.min.js
|
63
|
+
- lib/robut/plugin/rdio/public/js/rdio.js
|
64
|
+
- lib/robut/plugin/rdio/public/js/script.js
|
65
|
+
- lib/robut/plugin/rdio/server.rb
|
66
|
+
- lib/robut/plugin/say.rb
|
67
|
+
- lib/robut/plugin/sayings.rb
|
68
|
+
- lib/robut/plugin/twss.rb
|
69
|
+
- lib/robut/storage.rb
|
70
|
+
- lib/robut/storage/base.rb
|
71
|
+
- lib/robut/storage/hash_store.rb
|
72
|
+
- lib/robut/storage/yaml_store.rb
|
73
|
+
- lib/robut/version.rb
|
74
|
+
- robut.gemspec
|
75
|
+
- test/mocks/connection_mock.rb
|
76
|
+
- test/simplecov_helper.rb
|
77
|
+
- test/test_helper.rb
|
78
|
+
- test/unit/connection_test.rb
|
79
|
+
- test/unit/plugin/base_test.rb
|
80
|
+
- test/unit/plugin/echo_test.rb
|
81
|
+
- test/unit/plugin/later_test.rb
|
82
|
+
- test/unit/plugin/lunch_test.rb
|
83
|
+
- test/unit/plugin/ping_test.rb
|
84
|
+
- test/unit/plugin/say_test.rb
|
85
|
+
- test/unit/storage/hash_store_test.rb
|
86
|
+
- test/unit/storage/yaml_store_test.rb
|
87
|
+
- test/unit/storage/yaml_test.yml
|
88
|
+
has_rdoc: true
|
89
|
+
homepage: http://rdoc.info/github/justinweiss/robut/master/frames
|
90
|
+
licenses: []
|
91
|
+
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
|
95
|
+
require_paths:
|
96
|
+
- lib
|
97
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
hash: -555971066717655202
|
103
|
+
segments:
|
104
|
+
- 0
|
105
|
+
version: "0"
|
106
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
hash: -555971066717655202
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
requirements: []
|
116
|
+
|
117
|
+
rubyforge_project: robut
|
118
|
+
rubygems_version: 1.5.2
|
119
|
+
signing_key:
|
120
|
+
specification_version: 3
|
121
|
+
summary: A simple plugin-enabled HipChat bot
|
122
|
+
test_files:
|
123
|
+
- test/mocks/connection_mock.rb
|
124
|
+
- test/simplecov_helper.rb
|
125
|
+
- test/test_helper.rb
|
126
|
+
- test/unit/connection_test.rb
|
127
|
+
- test/unit/plugin/base_test.rb
|
128
|
+
- test/unit/plugin/echo_test.rb
|
129
|
+
- test/unit/plugin/later_test.rb
|
130
|
+
- test/unit/plugin/lunch_test.rb
|
131
|
+
- test/unit/plugin/ping_test.rb
|
132
|
+
- test/unit/plugin/say_test.rb
|
133
|
+
- test/unit/storage/hash_store_test.rb
|
134
|
+
- test/unit/storage/yaml_store_test.rb
|
135
|
+
- test/unit/storage/yaml_test.yml
|