chatterbox 0.8.1 → 0.8.2
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/CHANGELOG.markdown +3 -0
- data/README.markdown +6 -2
- data/VERSION.yml +1 -1
- data/chatterbox.gemspec +2 -2
- data/examples/lib/chatterbox/services/email_example.rb +14 -6
- data/features/email_service.feature +4 -2
- data/lib/chatterbox.rb +19 -0
- data/lib/chatterbox/exception_notification.rb +3 -3
- data/lib/chatterbox/services/email.rb +24 -5
- data/todo.markdown +1 -5
- metadata +2 -2
data/CHANGELOG.markdown
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
### 0.8.2
|
4
|
+
- Fix Github Issue #2: In email service, change incoming default configuration to HashWithIndifferentAccess: fixes a bug that would result in default configuration always winning over per-message configuration.
|
5
|
+
|
3
6
|
### 0.8.1
|
4
7
|
- Make sure Arrays format nicely for ExceptionNotification, so backtraces are easy to read
|
5
8
|
|
data/README.markdown
CHANGED
@@ -94,15 +94,19 @@ And you are done! Exceptions thrown in controllers will automatically be proces
|
|
94
94
|
|
95
95
|
Bugs & Patches
|
96
96
|
--------------
|
97
|
-
Please submit to [Github Issues](http://github.com/rsanheim/chatterbox/
|
97
|
+
Please submit to [Github Issues](http://github.com/rsanheim/chatterbox/issues).
|
98
98
|
|
99
|
-
All patches must have spec coverage and a passing build
|
99
|
+
All patches must have spec coverage and a passing build.
|
100
100
|
|
101
101
|
You can easily verify your build by pushing the project to [RunCodeRun](http://runcoderun.com). View the [master build](http://runcoderun.com/rsanheim/chatterbox) to confirm that HEAD is stable and passing.
|
102
102
|
|
103
103
|
Links
|
104
104
|
-------------
|
105
105
|
|
106
|
+
Bugs/Issues: http://github.com/rsanheim/chatterbox/issues
|
107
|
+
CI: http://runcoderun.com/rsanheim/chatterbox
|
108
|
+
Docs: http://rdoc.info/projects/rsanheim/chatterbox
|
109
|
+
|
106
110
|
Contributors
|
107
111
|
------------
|
108
112
|
* Rob Sanheim (creator)
|
data/VERSION.yml
CHANGED
data/chatterbox.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{chatterbox}
|
8
|
-
s.version = "0.8.
|
8
|
+
s.version = "0.8.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rob Sanheim"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-12-02}
|
13
13
|
s.description = %q{Send notifications and messages. However you want.}
|
14
14
|
s.email = %q{rsanheim@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -19,14 +19,14 @@ describe Chatterbox::Services::Email do
|
|
19
19
|
result.should be_instance_of(TMail::Mail)
|
20
20
|
end
|
21
21
|
|
22
|
-
it "
|
22
|
+
it "preserves HashWithIndifferentAccess with explicit options" do
|
23
23
|
options = { :summary => "foo", :config => { :to => "a", :from => "a" } }.with_indifferent_access
|
24
24
|
service = Chatterbox::Services::Email.new(options)
|
25
25
|
service.options.should be_instance_of(HashWithIndifferentAccess)
|
26
26
|
service.options[:config].should be_instance_of(HashWithIndifferentAccess)
|
27
27
|
end
|
28
28
|
|
29
|
-
it "
|
29
|
+
it "preserves HashWithIndifferentAccess with default configuration" do
|
30
30
|
options = { :summary => "foo" }.with_indifferent_access
|
31
31
|
Chatterbox::Services::Email.configure :to => "default-to@example.com", :from => "default-from@example.com"
|
32
32
|
service = Chatterbox::Services::Email.new(options)
|
@@ -65,14 +65,14 @@ describe Chatterbox::Services::Email do
|
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
describe "
|
68
|
+
describe "default configuration" do
|
69
69
|
it "defaults to empty hash" do
|
70
70
|
Chatterbox::Services::Email.default_configuration.should == {}
|
71
71
|
end
|
72
72
|
|
73
73
|
it "sets default configuration into :config" do
|
74
|
-
Chatterbox::Services::Email.configure
|
75
|
-
Chatterbox::Services::Email.default_configuration.should == {
|
74
|
+
Chatterbox::Services::Email.configure "to" => "to@example.com", "from" => "from@example.com"
|
75
|
+
Chatterbox::Services::Email.default_configuration.should == { "to" => "to@example.com", "from" => "from@example.com"}
|
76
76
|
end
|
77
77
|
|
78
78
|
it "uses default configuration if no per-message configuration provided" do
|
@@ -83,11 +83,19 @@ describe Chatterbox::Services::Email do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it "allows per message configuration (if provided) to override default configuration" do
|
86
|
-
Chatterbox::Services::Email.configure
|
86
|
+
Chatterbox::Services::Email.configure "to" => "default-to@example.com", :from => "default-from@example.com"
|
87
87
|
mail = Chatterbox::Services::Email.deliver(:summary => "summary",
|
88
88
|
:config => { :to => "joe@example.com", :from => "harry@example.com"} )
|
89
89
|
mail.to.should == ["joe@example.com"]
|
90
90
|
mail.from.should == ["harry@example.com"]
|
91
91
|
end
|
92
|
+
|
93
|
+
it "allows per message configuration with string keys to override default configuration" do
|
94
|
+
Chatterbox::Services::Email.configure "to" => "default-to@example.com", :from => "default-from@example.com"
|
95
|
+
mail = Chatterbox::Services::Email.deliver(:summary => "summary",
|
96
|
+
:config => { "to" => "joe@example.com" })
|
97
|
+
mail.to.should == ["joe@example.com"]
|
98
|
+
mail.from.should == ["default-from@example.com"]
|
99
|
+
end
|
92
100
|
end
|
93
101
|
end
|
@@ -22,6 +22,7 @@ Feature: Sending email
|
|
22
22
|
Then the exit code should be 0
|
23
23
|
And the stdout should match "To: joe@example.com"
|
24
24
|
|
25
|
+
@wip
|
25
26
|
Scenario: Sending with default configuration
|
26
27
|
Given a file named "default_configuration_email_send.rb" with:
|
27
28
|
"""
|
@@ -35,12 +36,13 @@ Feature: Sending email
|
|
35
36
|
Chatterbox::Services::Email.configure({
|
36
37
|
:to => "to@example.com", :from => "from@example.com", :summary_prefix => "[CUKE] "
|
37
38
|
})
|
38
|
-
Chatterbox.notify :
|
39
|
+
Chatterbox.notify :summary => "subject goes here!", :body => "body",
|
40
|
+
:config => { :to => "override@example.com" }
|
39
41
|
puts ActionMailer::Base.deliveries.last.encoded
|
40
42
|
"""
|
41
43
|
When I run "default_configuration_email_send.rb"
|
42
44
|
Then the exit code should be 0
|
43
|
-
And the stdout should match "To:
|
45
|
+
And the stdout should match "To: override@example.com"
|
44
46
|
And the stdout should match "From: from@example.com"
|
45
47
|
And the stdout should match "Subject: [CUKE] subject goes here!"
|
46
48
|
|
data/lib/chatterbox.rb
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
require 'active_support'
|
2
2
|
|
3
3
|
module Chatterbox
|
4
|
+
# Send a notification with Chatterbox
|
5
|
+
# Returns the message itself
|
6
|
+
#
|
7
|
+
# <tt>message</tt> is an options hash that allows the following options:
|
8
|
+
#
|
9
|
+
# :summary - The summary of the message - required. If your service only supports
|
10
|
+
# 'short' notifications, like Twitter, this is generally what you should send.
|
11
|
+
# :body - The body of the message - this may not be used if the service you are using
|
12
|
+
# doesn't support 'bodies' -- for example, Twitter.
|
13
|
+
# :config - The configuration settings for the different services the notification should use.
|
14
|
+
# See the individual services you are using for what configuration options should be used.
|
4
15
|
def notify(message)
|
5
16
|
publish_notice(message)
|
6
17
|
message
|
@@ -10,6 +21,7 @@ module Chatterbox
|
|
10
21
|
Publishers.publishers.each { |p| p.call(message.with_indifferent_access) }
|
11
22
|
end
|
12
23
|
|
24
|
+
# Deprecated version of #notify
|
13
25
|
def handle_notice(message)
|
14
26
|
warning = "Chatterbox#handle_notice is deprecated and will be removed from Chatterbox 1.0. Call Chatterbox#notify instead."
|
15
27
|
deprecate(warning, caller)
|
@@ -30,6 +42,13 @@ module Chatterbox
|
|
30
42
|
@logger = logger
|
31
43
|
end
|
32
44
|
|
45
|
+
# Register a service for sending notifications
|
46
|
+
#
|
47
|
+
# ===== Example:
|
48
|
+
#
|
49
|
+
# Chatterbox::Publishers.register do |notice|
|
50
|
+
# Chatterbox::Services::Email.deliver(notice)
|
51
|
+
# end
|
33
52
|
def register(&blk)
|
34
53
|
Publishers.register(&blk)
|
35
54
|
end
|
@@ -5,10 +5,10 @@ module Chatterbox
|
|
5
5
|
|
6
6
|
# Handle the exception
|
7
7
|
# Accepts either an exception, a hash, or an object that responds to to_s
|
8
|
-
#
|
9
|
-
#
|
8
|
+
# * Exceptions are passed through like normal
|
9
|
+
# * Hashes can have an :exception => exception in them, which will result in
|
10
10
|
# the same treatment as a literal exception passed
|
11
|
-
#
|
11
|
+
# * Objects are simply treated as a 'summary' message were an exception may not be necessary
|
12
12
|
def handle(args)
|
13
13
|
hsh = normalize_to_hash(args)
|
14
14
|
return if on_ignore_list?(hsh[:exception])
|
@@ -4,20 +4,38 @@ require 'chatterbox/services/email/mailer'
|
|
4
4
|
module Chatterbox::Services
|
5
5
|
class Email
|
6
6
|
attr_reader :options
|
7
|
-
|
8
|
-
|
7
|
+
# Return default configuration - defaults to empty hash
|
9
8
|
def self.default_configuration
|
10
|
-
@default_configuration
|
9
|
+
@default_configuration ||= {}
|
11
10
|
end
|
12
|
-
|
11
|
+
|
12
|
+
# Configure Email service with default options
|
13
13
|
def self.configure(config_options)
|
14
|
-
@default_configuration = config_options
|
14
|
+
@default_configuration = config_options.with_indifferent_access
|
15
15
|
end
|
16
16
|
|
17
|
+
# Deliver the a notification via email
|
18
|
+
#
|
19
|
+
# ==== Options
|
20
|
+
#
|
21
|
+
# * :summary - The subject of the message - required.
|
22
|
+
# * :body - The body of the email - if none provided, you will just send an email with a blank body.
|
23
|
+
# * :config - A sub-hash of configuration options.
|
24
|
+
# Optional if you have configured a default configuration with #configure.
|
25
|
+
# Config can contain any of the following options, all of which are pretty self explanatory:
|
26
|
+
#
|
27
|
+
# :to
|
28
|
+
# :from
|
29
|
+
# :content_type
|
30
|
+
# :reply_to
|
31
|
+
# :bcc
|
32
|
+
# :cc
|
17
33
|
def self.deliver(options = {})
|
18
34
|
new(options).deliver
|
19
35
|
end
|
20
36
|
|
37
|
+
# Creates a new Email service with provided options.
|
38
|
+
# See Email::deliver for the valid options
|
21
39
|
def initialize(options = {})
|
22
40
|
@options = options
|
23
41
|
merge_configs
|
@@ -25,6 +43,7 @@ module Chatterbox::Services
|
|
25
43
|
validate_options
|
26
44
|
end
|
27
45
|
|
46
|
+
# Deliver a notificaiton -- normally you should just use the class level method Email::deliver
|
28
47
|
def deliver
|
29
48
|
Mailer.deliver_message(options)
|
30
49
|
end
|
data/todo.markdown
CHANGED
@@ -1,5 +1 @@
|
|
1
|
-
|
2
|
-
* make sure we push through request info for exceptions
|
3
|
-
* wire ignore exceptions in rails catcher
|
4
|
-
* wire up common idioms (or easy ability to) to grab current_user from request, current_url, etc
|
5
|
-
|
1
|
+
* have ExceptionNotification add top_level method to Chatterbox -- #notify_exception?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chatterbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rob Sanheim
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-02 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|