mail_to_hip_chat 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
data/README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
_
|
2
|
-
[_|
|
3
|
-
.-----|--,
|
4
|
-
/ | /_\_ | | |
|
5
|
-
| |__.-| ' ' '
|
6
|
-
| |__\_|
|
7
|
-
'---,-,-;---'
|
2
|
+
[_| . . . . .
|
3
|
+
.-----|--, ,-,-. ,-. . | |- ,-. |-. . ,-. ,-. |-. ,-. |-
|
4
|
+
/ | /_\_ | | | ,-| | | | | | | | | | | | | | ,-| |
|
5
|
+
| |__.-| ' ' ' `-^ ' `'---`' `-'---' ' ' |-'---`-' ' ' `-^ `'
|
6
|
+
| |__\_| |
|
7
|
+
'---,-,-;---' '
|
8
8
|
| |
|
9
9
|
|
10
10
|
# Mail To HipChat
|
@@ -32,12 +32,14 @@ You will need an account on Heroku and admin access to your HipChat group.
|
|
32
32
|
$ echo 'source "http://rubygems.org"' >> Gemfile
|
33
33
|
$ echo 'gem "mail_to_hip_chat"' >> Gemfile
|
34
34
|
$ bundle install
|
35
|
-
$ git
|
35
|
+
$ git add Gemfile Gemfile.lock
|
36
|
+
$ git commit -m "Getting down with bundler"
|
36
37
|
|
37
38
|
3. Copy over the default config.ru.
|
38
39
|
|
39
40
|
$ cp "`bundle show mail_to_hip_chat`/support/config.ru" .
|
40
|
-
$ git
|
41
|
+
$ git add config.ru
|
42
|
+
$ git commit -m "Adding default config.ru"
|
41
43
|
|
42
44
|
4. Set up a new Heroku application with CloudMailIn and Piggyback SSL.
|
43
45
|
|
@@ -79,12 +81,27 @@ You will need an account on Heroku and admin access to your HipChat group.
|
|
79
81
|
|
80
82
|
## Hooking it up to Airbrake
|
81
83
|
|
82
|
-
|
84
|
+
Just add a new user to your project, set their email address to `CLOUDMAILIN_FORWARD_ADDRESS`, and watch the exceptions roll in. Then turn your face from God and weep in abject horror.
|
83
85
|
|
84
86
|
## Adding new message handlers
|
85
87
|
|
88
|
+
See the included Airbrake handler for an example. Really, any object that has a `call` method that takes one argument can be used.
|
89
|
+
|
86
90
|
## FAQ
|
87
91
|
|
92
|
+
* Can I use something besides CloudMailIn/Heroku?
|
93
|
+
|
94
|
+
Most likely, yes. The code has only been tested using CloudMailIn and Heroku, but really, there's not that much tying it to that particular kind of setup, besides the CloudMailIn signature verification stuff in the Rack app.
|
95
|
+
|
96
|
+
* Could I say, feed it email using a `.forward` file?
|
97
|
+
|
98
|
+
Probably. The only part dependent on actually being a web app is the Rack application itself.
|
99
|
+
|
100
|
+
* How do your projects end up with such rad ASCII art?
|
101
|
+
|
102
|
+
$ figlist | xargs -I {} /bin/bash -c "figlet -f {} your_project_name"
|
103
|
+
$ open "http://google.com/search?q=something_related_to_your_project+ascii+art"
|
104
|
+
|
88
105
|
## TODO
|
89
106
|
|
90
107
|
* There are too many steps for initial setup. This needs to be cut down.
|
@@ -1,15 +1,22 @@
|
|
1
1
|
require "hipchat-api"
|
2
2
|
|
3
3
|
module MailToHipChat
|
4
|
+
# Helpers for building a message chute. A message chute is something that responds to #call, and returns true if it's
|
5
|
+
# able to deliver the message off to HipChat. A chute can be something as simple as a Proc object. The ones this
|
6
|
+
# gem ship with are small classes that make use of this module.
|
4
7
|
module MessageChute
|
5
|
-
|
6
|
-
|
8
|
+
|
9
|
+
# @param [Hash] opts The options to create a message chute with
|
10
|
+
# @option opts [Array, String] :rooms A room or an array of rooms to send messages to
|
11
|
+
def initialize_hipchat_opts(opts)
|
7
12
|
@rooms = Array(opts[:rooms])
|
8
13
|
@hipchat_api = opts[:hipchat_api] || HipChat::API.new(opts[:api_token])
|
9
14
|
end
|
10
15
|
|
11
16
|
private
|
12
17
|
|
18
|
+
# @param [#to_s] from The sender the message will show up as being from in HipChat
|
19
|
+
# @param [#to_s] message The message to send
|
13
20
|
def message_rooms(from, message)
|
14
21
|
@rooms.each do |room_id|
|
15
22
|
@hipchat_api.rooms_message(room_id, from, message)
|
@@ -3,9 +3,14 @@ require "mustache"
|
|
3
3
|
|
4
4
|
module MailToHipChat
|
5
5
|
module MessageChutes
|
6
|
+
# Takes exception notification emails from Airbrake and sends them to the configured HipChat rooms.
|
6
7
|
class Airbrake
|
7
8
|
include MessageChute
|
8
9
|
|
10
|
+
def initialize(opts)
|
11
|
+
initialize_hipchat_opts(opts)
|
12
|
+
end
|
13
|
+
|
9
14
|
def call(params)
|
10
15
|
return false unless process_message(params["plain"])
|
11
16
|
true
|
@@ -3,9 +3,15 @@ require "mustache"
|
|
3
3
|
|
4
4
|
module MailToHipChat
|
5
5
|
module MessageChutes
|
6
|
+
# Takes a test email and sends it to the configured HipChat rooms, to verify a deployment based on this library
|
7
|
+
# is working.
|
6
8
|
class TestEmail
|
7
9
|
include MessageChute
|
8
10
|
|
11
|
+
def initialize(opts)
|
12
|
+
initialize_hipchat_opts(opts)
|
13
|
+
end
|
14
|
+
|
9
15
|
def call(params)
|
10
16
|
return false unless params["subject"] =~ /testing setup/i
|
11
17
|
message = Mustache.render("Message:<br />{{message}}", :message => params["plain"])
|
@@ -4,7 +4,11 @@ require "mail_to_hip_chat/message_chute"
|
|
4
4
|
class MessageChuteTest < Test::Unit::TestCase
|
5
5
|
class TestMessageChute
|
6
6
|
include MailToHipChat::MessageChute
|
7
|
-
|
7
|
+
|
8
|
+
def initialize(opts)
|
9
|
+
initialize_hipchat_opts(opts)
|
10
|
+
end
|
11
|
+
|
8
12
|
def call(params)
|
9
13
|
message_rooms(params[:sender], params[:message])
|
10
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mail_to_hip_chat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-11-21 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: http_parser.rb
|
16
|
-
requirement: &
|
16
|
+
requirement: &70189061461960 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.5'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70189061461960
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mocha
|
27
|
-
requirement: &
|
27
|
+
requirement: &70189061461180 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0.10'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70189061461180
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: yard
|
38
|
-
requirement: &
|
38
|
+
requirement: &70189061460620 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0.7'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70189061460620
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rdiscount
|
49
|
-
requirement: &
|
49
|
+
requirement: &70189061459960 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '1.6'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70189061459960
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: webmock
|
60
|
-
requirement: &
|
60
|
+
requirement: &70189061459240 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '1.7'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70189061459240
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
|
-
requirement: &
|
71
|
+
requirement: &70189061458820 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70189061458820
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rack
|
82
|
-
requirement: &
|
82
|
+
requirement: &70189061458100 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '1.3'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70189061458100
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: hipchat-api
|
93
|
-
requirement: &
|
93
|
+
requirement: &70189061457340 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '1.0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70189061457340
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: mustache
|
104
|
-
requirement: &
|
104
|
+
requirement: &70189061456700 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: '0.99'
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *70189061456700
|
113
113
|
description: Funnels email into HipChat using CloudMailIn
|
114
114
|
email:
|
115
115
|
- gabriel@gironda.org
|
@@ -158,12 +158,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
158
|
- - ! '>='
|
159
159
|
- !ruby/object:Gem::Version
|
160
160
|
version: '0'
|
161
|
+
segments:
|
162
|
+
- 0
|
163
|
+
hash: -429079503967121235
|
161
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
162
165
|
none: false
|
163
166
|
requirements:
|
164
167
|
- - ! '>='
|
165
168
|
- !ruby/object:Gem::Version
|
166
169
|
version: '0'
|
170
|
+
segments:
|
171
|
+
- 0
|
172
|
+
hash: -429079503967121235
|
167
173
|
requirements: []
|
168
174
|
rubyforge_project: mail_to_hip_chat
|
169
175
|
rubygems_version: 1.8.10
|