better_opener 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 +90 -0
- data/better_opener.gemspec +2 -2
- data/lib/better_opener.rb +50 -4
- data/lib/better_opener/email.html.erb +1 -0
- data/lib/better_opener/server.rb +7 -3
- data/lib/better_opener/server/views/index.haml +1 -1
- data/lib/better_opener/sms.html.erb +3 -0
- data/lib/better_opener/version.rb +1 -1
- data/notifications.png +0 -0
- data/sms.jpg +0 -0
- metadata +22 -7
- data/README.rdoc +0 -34
- data/lib/better_opener/server/views/show.haml +0 -4
data/README.md
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
BetterOpener
|
2
|
+
=============
|
3
|
+
|
4
|
+
Preview mails and other notifications in your browser instead of actually
|
5
|
+
sending them out. Inspired by and similar in terms of functionality to the
|
6
|
+
[LetterOpener][1] and the [MailView][2] gem BetterOpener tries to be *better*
|
7
|
+
by:
|
8
|
+
|
9
|
+
- providing support for outgoing notifications in general (email, sms so far)
|
10
|
+
- supporting pre- and on-demand rendering
|
11
|
+
- allowing remote access to notifications (helpful on staging servers and remote development machines)
|
12
|
+
- displaying desktop notifications (with the accompanying chrome plugin)
|
13
|
+
|
14
|
+
|
15
|
+
Setup
|
16
|
+
-----
|
17
|
+
|
18
|
+
Add the gem to your development environment and run the `bundle install` command to install it.
|
19
|
+
|
20
|
+
gem "better_opener", :group => :development
|
21
|
+
|
22
|
+
Then in Rails3 mount the bundled Sinatra app inline in your `routes.rb`:
|
23
|
+
|
24
|
+
if Rails.env == "development"
|
25
|
+
mount BetterOpener::Server => "/notifications"
|
26
|
+
end
|
27
|
+
|
28
|
+
To prevent messages from actually being sent you need to set up email and/or sms interception.
|
29
|
+
|
30
|
+
### Email
|
31
|
+
|
32
|
+
Set the delivery method in `config/environments/development.rb`
|
33
|
+
|
34
|
+
config.action_mailer.delivery_method = :better_opener
|
35
|
+
|
36
|
+
The design of the email interface is taken from the [mail_view][2] plugin.
|
37
|
+
|
38
|
+
|
39
|
+
### SMS
|
40
|
+
|
41
|
+
SMS message support is provided for the [sms_gateway][3] gem.
|
42
|
+
Edit your `sms_gateway.yml` file:
|
43
|
+
|
44
|
+
development:
|
45
|
+
adapter: better_opener
|
46
|
+
from: your_app
|
47
|
+
|
48
|
+
SMS interface:
|
49
|
+
|
50
|
+
![SMS as displayed by the sinatra app](https://github.com/learnjin/better-opener/raw/master/sms.jpg)
|
51
|
+
|
52
|
+
|
53
|
+
On-request Rendering
|
54
|
+
-------------------
|
55
|
+
|
56
|
+
The messages that are being sent with one of the above delivery methods are
|
57
|
+
static (pre-rendered at time of delivery). To preview your changes without
|
58
|
+
going through all the steps to redeliver the message use the
|
59
|
+
`add_delayed_notification` method like that:
|
60
|
+
|
61
|
+
class Emailer < ActionMailer::Base
|
62
|
+
|
63
|
+
# ....
|
64
|
+
|
65
|
+
def self.deliver_later(method, *params)
|
66
|
+
if Rails.env == "development"
|
67
|
+
BetterOpener.add_delayed_notification("email", Emailer, method, params)
|
68
|
+
else
|
69
|
+
Resque.enqueue(EmailJob, method, *params)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
Chrome Plugin
|
77
|
+
-------------
|
78
|
+
|
79
|
+
To get actual desktop notifications, you will want to install the accompanying
|
80
|
+
[chrome-plugin][4]. Point it to the (full) notification path that you mounted
|
81
|
+
this gem on.
|
82
|
+
|
83
|
+
![Chrome Notifications](https://github.com/learnjin/better-opener/raw/master/notifications.png)
|
84
|
+
|
85
|
+
[1]: https://github.com/ryanb/letter_opener
|
86
|
+
[2]: https://github.com/37signals/mail_view
|
87
|
+
[3]: https://github.com/learnjin/sms-gateway
|
88
|
+
[4]: https://github.com/learnjin/better-opener-chrome
|
89
|
+
|
90
|
+
|
data/better_opener.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.version = BetterOpener::VERSION
|
8
8
|
s.authors = ["Kai Rubarth"]
|
9
9
|
s.email = ["kai@doxter.de"]
|
10
|
-
s.homepage = "
|
10
|
+
s.homepage = "https://github.com/learnjin/better-opener"
|
11
11
|
s.summary = %q{A better way of Previewing mail in your browser instead of sending it.}
|
12
12
|
s.description = %q{When mails or messages are sent from your application, Better Opener lets you preview the rendered messages in your browser instead of delivering them.}
|
13
13
|
|
@@ -25,7 +25,7 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_dependency "dm-sqlite-adapter"
|
26
26
|
s.add_dependency "tilt"
|
27
27
|
s.add_dependency "haml"
|
28
|
-
|
28
|
+
s.add_dependency "multi_json"
|
29
29
|
end
|
30
30
|
|
31
31
|
|
data/lib/better_opener.rb
CHANGED
@@ -10,12 +10,21 @@ module BetterOpener
|
|
10
10
|
class Notification
|
11
11
|
include DataMapper::Resource
|
12
12
|
property :id, Serial
|
13
|
-
property :subject, String
|
14
|
-
property :body, Text
|
15
13
|
property :created_at, DateTime
|
16
|
-
property :
|
14
|
+
property :subject, String, :length => 255
|
15
|
+
property :summary, String
|
16
|
+
|
17
|
+
property :category, String # influences rendering
|
18
|
+
|
19
|
+
property :klass, String
|
20
|
+
property :method, String
|
21
|
+
property :params, String
|
22
|
+
|
23
|
+
property :rendered, Boolean, :default => false
|
24
|
+
property :body, Text
|
17
25
|
end
|
18
26
|
|
27
|
+
|
19
28
|
extend self
|
20
29
|
|
21
30
|
def db=(server)
|
@@ -40,7 +49,23 @@ module BetterOpener
|
|
40
49
|
|
41
50
|
def add_notification(category, subject, body)
|
42
51
|
db
|
43
|
-
n = BetterOpener::Notification.new
|
52
|
+
n = BetterOpener::Notification.new(:category => category,
|
53
|
+
:subject => subject,
|
54
|
+
:body => body,
|
55
|
+
:created_at => Time.now,
|
56
|
+
:rendered => true)
|
57
|
+
n.save
|
58
|
+
end
|
59
|
+
|
60
|
+
def add_delayed_notification(category, klass, method, params)
|
61
|
+
db
|
62
|
+
|
63
|
+
n = BetterOpener::Notification.new(:category => category,
|
64
|
+
:subject => method,
|
65
|
+
:klass => klass.name,
|
66
|
+
:method => method,
|
67
|
+
:params => BetterOpener.encode(params),
|
68
|
+
:created_at => Time.now)
|
44
69
|
n.save
|
45
70
|
end
|
46
71
|
|
@@ -77,6 +102,27 @@ module BetterOpener
|
|
77
102
|
end
|
78
103
|
|
79
104
|
|
105
|
+
def encode(params)
|
106
|
+
MultiJson.encode(params)
|
107
|
+
end
|
108
|
+
|
109
|
+
def decode(params)
|
110
|
+
MultiJson.decode(params)
|
111
|
+
end
|
112
|
+
|
113
|
+
def render_notification(n, format = nil)
|
114
|
+
return n.body if n.rendered
|
115
|
+
klass = Kernel.const_get(n.klass.classify)
|
116
|
+
if n.category == "email"
|
117
|
+
m = klass.send(n.method, *BetterOpener.decode(n.params))
|
118
|
+
BetterOpener.render_email(n.id, m, format)
|
119
|
+
elsif n.category == "sms"
|
120
|
+
m = klass.send(n.method, *BetterOpener.decode(n.params))
|
121
|
+
BetterOpener.render_sms(n.id, m)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
|
80
126
|
end
|
81
127
|
|
82
128
|
require 'better_opener/delivery_method'
|
data/lib/better_opener/server.rb
CHANGED
@@ -44,9 +44,13 @@ module BetterOpener
|
|
44
44
|
redirect u('/')
|
45
45
|
end
|
46
46
|
|
47
|
-
get
|
48
|
-
|
49
|
-
|
47
|
+
get %r{/(\d+)(.*)} do
|
48
|
+
#@message = BetterOpener.get_notification(params[:id])
|
49
|
+
#@message.body
|
50
|
+
id = params[:captures].first
|
51
|
+
format = params[:captures].second
|
52
|
+
@message = BetterOpener.get_notification(id)
|
53
|
+
BetterOpener.render_notification(@message, format)
|
50
54
|
end
|
51
55
|
|
52
56
|
get "/feed/atom", :provides => [:atom] do
|
data/notifications.png
ADDED
Binary file
|
data/sms.jpg
ADDED
Binary file
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_opener
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 0
|
9
8
|
- 1
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kai Rubarth
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-03-
|
18
|
+
date: 2012-03-06 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: sinatra-contrib
|
@@ -88,6 +88,20 @@ dependencies:
|
|
88
88
|
version: "0"
|
89
89
|
type: :runtime
|
90
90
|
version_requirements: *id005
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: multi_json
|
93
|
+
prerelease: false
|
94
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
hash: 3
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
version: "0"
|
103
|
+
type: :runtime
|
104
|
+
version_requirements: *id006
|
91
105
|
description: When mails or messages are sent from your application, Better Opener lets you preview the rendered messages in your browser instead of delivering them.
|
92
106
|
email:
|
93
107
|
- kai@doxter.de
|
@@ -100,7 +114,7 @@ extra_rdoc_files: []
|
|
100
114
|
files:
|
101
115
|
- .gitignore
|
102
116
|
- Gemfile
|
103
|
-
- README.
|
117
|
+
- README.md
|
104
118
|
- Rakefile
|
105
119
|
- better_opener.gemspec
|
106
120
|
- config.ru
|
@@ -111,12 +125,13 @@ files:
|
|
111
125
|
- lib/better_opener/server.rb
|
112
126
|
- lib/better_opener/server/views/atom.haml
|
113
127
|
- lib/better_opener/server/views/index.haml
|
114
|
-
- lib/better_opener/server/views/show.haml
|
115
128
|
- lib/better_opener/sms.html.erb
|
116
129
|
- lib/better_opener/sms_gateway_adapter.rb
|
117
130
|
- lib/better_opener/version.rb
|
118
131
|
- lib/test.ru
|
119
|
-
|
132
|
+
- notifications.png
|
133
|
+
- sms.jpg
|
134
|
+
homepage: https://github.com/learnjin/better-opener
|
120
135
|
licenses: []
|
121
136
|
|
122
137
|
post_install_message:
|
data/README.rdoc
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
= Better Opener
|
2
|
-
|
3
|
-
Preview mails and other notifications (sms for instance) in your browser
|
4
|
-
instead of actually sending them out. Inspired and almost similar to the
|
5
|
-
Letter Opener by Ryan Bates Better Opener this gem tries to be *better* by being
|
6
|
-
more universal and displaying desktop notifications (with the chrome plugin).
|
7
|
-
|
8
|
-
== Setup
|
9
|
-
|
10
|
-
Add the gem to your development environment and run the <tt>bundle install</tt> command to install it.
|
11
|
-
|
12
|
-
gem "better_opener", :group => :development
|
13
|
-
|
14
|
-
Set the delivery method in <tt>config/environments/development.rb</tt>
|
15
|
-
|
16
|
-
config.action_mailer.delivery_method = :letter_opener
|
17
|
-
|
18
|
-
Finally install the bundled Sinatra app as a subdirectory of your app by editing your <tt>config.ru</tt>:
|
19
|
-
|
20
|
-
map "/notification" do
|
21
|
-
run BetterOpener::Server
|
22
|
-
end
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
== Chrome Plugin
|
27
|
-
|
28
|
-
To take full advantage and get actual notifications, you will want to install
|
29
|
-
the accompanying chrome plugin. Just point it to the notification address you
|
30
|
-
set up above.
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|