robut 0.4.0 → 0.5.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.
- checksums.yaml +7 -0
- data/.gitignore +0 -1
- data/.travis.yml +1 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +59 -0
- data/README.rdoc +7 -10
- data/Rakefile +1 -1
- data/bin/robut +1 -0
- data/examples/config.ru +13 -0
- data/lib/robut.rb +1 -0
- data/lib/robut/connection.rb +10 -3
- data/lib/robut/plugin.rb +19 -0
- data/lib/robut/version.rb +1 -1
- data/lib/robut/web.rb +26 -0
- data/robut.gemspec +1 -0
- data/test/mocks/connection_mock.rb +12 -0
- data/test/unit/web_test.rb +46 -0
- metadata +26 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 216b7b1619326105ea953215d118ff0de9c123c8
|
4
|
+
data.tar.gz: 165a69435303dcee8ff52120603ab8ad5fab470c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bf580beaab936d1bf28439a988346f75dee589ff026d824a14abe00ddc59ecf9476b1c940dabd50fa1fed935ce58574aecf77b94a0ff41fd2e5ecb0bbb820bde
|
7
|
+
data.tar.gz: 76a4ac19315db0820c5cc69679888c38bfcef0e892b692b6c04016c9750477a3003874906fdcef5dea16ca937688d1de9d52ba85258713fe5ca2e56bbea6d4a1
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
robut (0.5.0)
|
5
|
+
sinatra (~> 1.3)
|
6
|
+
xmpp4r (~> 0.5.0)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
addressable (2.2.6)
|
12
|
+
calc (1.0.0)
|
13
|
+
classifier (1.3.1)
|
14
|
+
stemmer (>= 1.0.0)
|
15
|
+
crack (0.1.8)
|
16
|
+
meme_generator (1.9)
|
17
|
+
nokogiri (~> 1.4)
|
18
|
+
metaclass (0.0.1)
|
19
|
+
mocha (0.10.0)
|
20
|
+
metaclass (~> 0.0.1)
|
21
|
+
nokogiri (1.4.4)
|
22
|
+
rack (1.5.2)
|
23
|
+
rack-protection (1.5.0)
|
24
|
+
rack
|
25
|
+
rack-test (0.6.2)
|
26
|
+
rack (>= 1.0)
|
27
|
+
rake (10.0.4)
|
28
|
+
simplecov (0.4.2)
|
29
|
+
simplecov-html (~> 0.4.4)
|
30
|
+
simplecov-html (0.4.5)
|
31
|
+
sinatra (1.4.2)
|
32
|
+
rack (~> 1.5, >= 1.5.2)
|
33
|
+
rack-protection (~> 1.4)
|
34
|
+
tilt (~> 1.3, >= 1.3.4)
|
35
|
+
stemmer (1.0.1)
|
36
|
+
tilt (1.4.1)
|
37
|
+
time-warp (1.0.8)
|
38
|
+
twss (0.0.5)
|
39
|
+
classifier (= 1.3.1)
|
40
|
+
webmock (1.6.4)
|
41
|
+
addressable (~> 2.2, > 2.2.5)
|
42
|
+
crack (>= 0.1.7)
|
43
|
+
xmpp4r (0.5)
|
44
|
+
|
45
|
+
PLATFORMS
|
46
|
+
ruby
|
47
|
+
|
48
|
+
DEPENDENCIES
|
49
|
+
calc
|
50
|
+
meme_generator
|
51
|
+
mocha
|
52
|
+
nokogiri
|
53
|
+
rack-test
|
54
|
+
rake
|
55
|
+
robut!
|
56
|
+
simplecov
|
57
|
+
time-warp
|
58
|
+
twss
|
59
|
+
webmock
|
data/README.rdoc
CHANGED
@@ -2,16 +2,6 @@
|
|
2
2
|
|
3
3
|
The friendly plugin-enabled HipChat bot.
|
4
4
|
|
5
|
-
== NOTE: Breaking backwards compatibility!
|
6
|
-
|
7
|
-
A little while ago, HipChat changed the way their mention names
|
8
|
-
work. Instead of just using the first name ('@robut'), they now use
|
9
|
-
the full name ('@RobutTRobot'). Starting from v0.4.0, robut uses this
|
10
|
-
new format by default. If you prefer the old style, you can set it in
|
11
|
-
your Chatfile:
|
12
|
-
|
13
|
-
config.mention_name = 'robut'
|
14
|
-
|
15
5
|
== Installation and usage
|
16
6
|
|
17
7
|
Robut can be installed by running <tt>gem install robut</tt>. This
|
@@ -49,6 +39,13 @@ first parameter:
|
|
49
39
|
|
50
40
|
The Chatfile is just ruby code. A simple example can be found here: Chatfile[https://github.com/justinweiss/robut/blob/master/examples/Chatfile]
|
51
41
|
|
42
|
+
== Robut::Web
|
43
|
+
|
44
|
+
You can run Robut as a rack application, which allows it to accept
|
45
|
+
incoming post requests (e.g. Heroku deploy hooks, GitHub post-recieve hooks, etc.)
|
46
|
+
that can send messages to all connected rooms. Have a look at
|
47
|
+
config.ru[https://github.com/justinweiss/robut/blob/master/examples/config.ru] for an example.
|
48
|
+
|
52
49
|
=== Adding and configuring plugins
|
53
50
|
|
54
51
|
Plugins are ruby classes, so enabling a plugin just requires requiring
|
data/Rakefile
CHANGED
data/bin/robut
CHANGED
data/examples/config.ru
ADDED
data/lib/robut.rb
CHANGED
data/lib/robut/connection.rb
CHANGED
@@ -85,14 +85,21 @@ class Robut::Connection
|
|
85
85
|
self.roster = Jabber::Roster::Helper.new(client)
|
86
86
|
roster.wait_for_roster
|
87
87
|
|
88
|
-
rooms = self.config.rooms.collect do |room_name|
|
88
|
+
self.rooms = self.config.rooms.collect do |room_name|
|
89
89
|
Robut::Room.new(self, room_name).tap {|r| r.join }
|
90
90
|
end
|
91
91
|
|
92
92
|
personal_message = Robut::PM.new(self, rooms)
|
93
93
|
|
94
94
|
trap_signals
|
95
|
-
|
95
|
+
self
|
96
|
+
end
|
97
|
+
|
98
|
+
# Send a message to all rooms.
|
99
|
+
def reply(*args, &block)
|
100
|
+
self.rooms.each do |room|
|
101
|
+
room.reply(*args, &block)
|
102
|
+
end
|
96
103
|
end
|
97
104
|
|
98
105
|
private
|
@@ -111,4 +118,4 @@ private
|
|
111
118
|
old_signal_callbacks[sig] = trap(sig) { signal_callback.call(sig) }
|
112
119
|
end
|
113
120
|
end
|
114
|
-
end
|
121
|
+
end
|
data/lib/robut/plugin.rb
CHANGED
@@ -40,6 +40,25 @@ module Robut::Plugin
|
|
40
40
|
def matchers
|
41
41
|
@matchers ||= []
|
42
42
|
end
|
43
|
+
|
44
|
+
# Allows you to define http methods that this plugin should respond to.
|
45
|
+
# This is useful if you're want to accept generic post data for Robut to
|
46
|
+
# display in all rooms (e.g. Heroku deploy hooks, GitHub post receive
|
47
|
+
# hooks, etc).
|
48
|
+
#
|
49
|
+
# http do
|
50
|
+
# post '/heroku' do
|
51
|
+
# payload = Hashie::Mash.new(params)
|
52
|
+
# say "#{payload.user} deployed #{payload.head} to #{payload.app}", nil
|
53
|
+
# halt 200
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# The action is run in the context of a Sinatra app (+Robut::Web+). So
|
58
|
+
# anything that Sinatra provides is available within the block.
|
59
|
+
def http(&block)
|
60
|
+
Robut::Web.class_eval &block
|
61
|
+
end
|
43
62
|
end
|
44
63
|
|
45
64
|
class << self
|
data/lib/robut/version.rb
CHANGED
data/lib/robut/web.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
module Robut
|
4
|
+
class Web < Sinatra::Base
|
5
|
+
helpers do
|
6
|
+
# Say something to all connected rooms. Delegates to #reply
|
7
|
+
def say(*args)
|
8
|
+
reply(*args)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Easy access to the current connection context.
|
12
|
+
def connection
|
13
|
+
settings.connection
|
14
|
+
end
|
15
|
+
|
16
|
+
# Delegates to Connection#reply
|
17
|
+
def reply(*args)
|
18
|
+
connection.reply(*args)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
get '/' do
|
23
|
+
'ok'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/robut.gemspec
CHANGED
@@ -2,9 +2,21 @@ require 'robut/storage/hash_store'
|
|
2
2
|
|
3
3
|
class Robut::ConnectionMock < Robut::Connection
|
4
4
|
|
5
|
+
attr_accessor :messages
|
6
|
+
|
5
7
|
def initialize(config = nil)
|
8
|
+
self.messages = []
|
6
9
|
self.config = config || self.class.config
|
7
10
|
self.store = Robut::Storage::HashStore
|
8
11
|
self.client = Jabber::Client.new ''
|
9
12
|
end
|
13
|
+
|
14
|
+
def connect
|
15
|
+
self.rooms = []
|
16
|
+
self
|
17
|
+
end
|
18
|
+
|
19
|
+
def reply(message, to)
|
20
|
+
self.messages << [message, to]
|
21
|
+
end
|
10
22
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'rack/test'
|
3
|
+
|
4
|
+
class WebTest < Test::Unit::TestCase
|
5
|
+
include Rack::Test::Methods
|
6
|
+
|
7
|
+
def app
|
8
|
+
Robut::Web
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup
|
12
|
+
app.set :show_exceptions, false
|
13
|
+
app.set :raise_errors, true
|
14
|
+
app.set :connection, connection
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_root
|
18
|
+
get '/'
|
19
|
+
|
20
|
+
assert last_response.ok?
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_say
|
24
|
+
app.class_eval do
|
25
|
+
get '/test_say' do
|
26
|
+
say "Hello", nil
|
27
|
+
halt 200
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
get '/test_say'
|
32
|
+
|
33
|
+
assert_equal messages.first, ["Hello", nil]
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def messages
|
39
|
+
connection.messages
|
40
|
+
end
|
41
|
+
|
42
|
+
def connection
|
43
|
+
@connection ||= Robut::ConnectionMock.new.connect
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: robut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.5.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Justin Weiss
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-06-07 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: xmpp4r
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,11 +20,24 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: 0.5.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sinatra
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
30
41
|
description: A simple plugin-enabled HipChat bot
|
31
42
|
email:
|
32
43
|
- justin@uberweiss.org
|
@@ -38,10 +49,12 @@ files:
|
|
38
49
|
- .gitignore
|
39
50
|
- .travis.yml
|
40
51
|
- Gemfile
|
52
|
+
- Gemfile.lock
|
41
53
|
- README.rdoc
|
42
54
|
- Rakefile
|
43
55
|
- bin/robut
|
44
56
|
- examples/Chatfile
|
57
|
+
- examples/config.ru
|
45
58
|
- lib/rexml_patches.rb
|
46
59
|
- lib/robut.rb
|
47
60
|
- lib/robut/connection.rb
|
@@ -70,6 +83,7 @@ files:
|
|
70
83
|
- lib/robut/storage/hash_store.rb
|
71
84
|
- lib/robut/storage/yaml_store.rb
|
72
85
|
- lib/robut/version.rb
|
86
|
+
- lib/robut/web.rb
|
73
87
|
- robut.gemspec
|
74
88
|
- test/fixtures/bad_location.xml
|
75
89
|
- test/fixtures/las_vegas.xml
|
@@ -95,35 +109,29 @@ files:
|
|
95
109
|
- test/unit/storage/hash_store_test.rb
|
96
110
|
- test/unit/storage/yaml_store_test.rb
|
97
111
|
- test/unit/storage/yaml_test.yml
|
112
|
+
- test/unit/web_test.rb
|
98
113
|
homepage: http://rdoc.info/github/justinweiss/robut/master/frames
|
99
114
|
licenses: []
|
115
|
+
metadata: {}
|
100
116
|
post_install_message:
|
101
117
|
rdoc_options: []
|
102
118
|
require_paths:
|
103
119
|
- lib
|
104
120
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
121
|
requirements:
|
107
|
-
- -
|
122
|
+
- - '>='
|
108
123
|
- !ruby/object:Gem::Version
|
109
124
|
version: '0'
|
110
|
-
segments:
|
111
|
-
- 0
|
112
|
-
hash: 2804599532514623618
|
113
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
126
|
requirements:
|
116
|
-
- -
|
127
|
+
- - '>='
|
117
128
|
- !ruby/object:Gem::Version
|
118
129
|
version: '0'
|
119
|
-
segments:
|
120
|
-
- 0
|
121
|
-
hash: 2804599532514623618
|
122
130
|
requirements: []
|
123
131
|
rubyforge_project: robut
|
124
|
-
rubygems_version:
|
132
|
+
rubygems_version: 2.0.3
|
125
133
|
signing_key:
|
126
|
-
specification_version:
|
134
|
+
specification_version: 4
|
127
135
|
summary: A simple plugin-enabled HipChat bot
|
128
136
|
test_files:
|
129
137
|
- test/fixtures/bad_location.xml
|
@@ -150,3 +158,4 @@ test_files:
|
|
150
158
|
- test/unit/storage/hash_store_test.rb
|
151
159
|
- test/unit/storage/yaml_store_test.rb
|
152
160
|
- test/unit/storage/yaml_test.yml
|
161
|
+
- test/unit/web_test.rb
|