letter_opener_web 1.0.0.rc3 → 1.0.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/README.md CHANGED
@@ -21,8 +21,8 @@ Your::Application.routes.draw do
21
21
  end
22
22
  ```
23
23
 
24
- If you are using [Vagrant](http://vagrantup.com), you might want to skip
25
- `letter_opener`'s `launchy` calls and avoid messages like these:
24
+ If you are running the app from a [Vagrant](http://vagrantup.com) box, you
25
+ might want to skip `letter_opener`'s `launchy` calls and avoid messages like these:
26
26
 
27
27
  ```terminal
28
28
  12:33:42 web.1 | Failure in opening /vagrant/tmp/letter_opener/1358825621_ba83a22/rich.html
@@ -42,6 +42,34 @@ can set `:letter_opener_web` as your delivery method on your
42
42
  config.action_mailer.delivery_method = ENV['USER'] == 'vagrant' ? :letter_opener_web : :letter_opener
43
43
  ```
44
44
 
45
+ ## Usage with [rails-footnotes](https://github.com/josevalim/rails-footnotes)
46
+
47
+ To prevent `rails-footnotes` from outputing debug information to your mails add
48
+ the following to your `config/initializers/footnotes.rb`:
49
+
50
+ ```ruby
51
+ Footnotes.setup do |config|
52
+ config.before do |controller, filter|
53
+ controller.class.name =~ /LetterOpenerWeb/ ?
54
+ filter.notes.clear :
55
+ filter.notes
56
+ end
57
+ end
58
+ ```
59
+
60
+ ## Try it out
61
+
62
+ There is a demo app built with [tiny-rails](https://github.com/fgrehm/tiny-rails)
63
+ available for you to check out how the interface looks like. If you want to give
64
+ a shot at it:
65
+
66
+ ```terminal
67
+ git clone https://github.com/fgrehm/letter_opener_web
68
+ cd letter_opener_web/demo
69
+ bundle
70
+ unicorn
71
+ ```
72
+
45
73
  ## Acknowledgements
46
74
 
47
75
  Special thanks to [@alexrothenberg](https://github.com/alexrothenberg) for some
@@ -38,12 +38,22 @@ module LetterOpenerWeb
38
38
  id
39
39
  end
40
40
 
41
+ def default_style
42
+ style_exists?('rich') ?
43
+ 'rich' :
44
+ 'plain'
45
+ end
46
+
41
47
  private
42
48
 
43
49
  def read_file(style)
44
50
  File.read("#{letters_location}/#{id}/#{style}.html")
45
51
  end
46
52
 
53
+ def style_exists?(style)
54
+ File.exists?("#{letters_location}/#{id}/#{style}.html")
55
+ end
56
+
47
57
  def adjust_link_targets(contents)
48
58
  # We cannot feed the whole file to an XML parser as some mails are
49
59
  # "complete" (as in they have the whole <html> structure) and letter_opener
@@ -23,7 +23,7 @@
23
23
  <% if first_letter = @letters.shift %>
24
24
  <tr class="active">
25
25
  <td>
26
- <%= link_to(first_letter.id, letter_path(first_letter, style: 'rich'), target: 'mail') %>
26
+ <%= link_to(first_letter.id, letter_path(first_letter, style: first_letter.default_style), target: 'mail') %>
27
27
  </td>
28
28
  <td><%= first_letter.sent_at %></td>
29
29
  </tr>
@@ -31,7 +31,7 @@
31
31
  <% @letters.each do |letter| %>
32
32
  <tr>
33
33
  <td>
34
- <%= link_to(letter.id, letter_path(letter, style: 'rich'), target: 'mail') %>
34
+ <%= link_to(letter.id, letter_path(letter, style: letter.default_style), target: 'mail') %>
35
35
  </td>
36
36
  <td><%= letter.sent_at %></td>
37
37
  </tr>
@@ -40,5 +40,5 @@
40
40
  </table>
41
41
  </div>
42
42
  <div class="col right">
43
- <iframe name="mail" id="mail" src="<%= first_letter.present? ? letter_path(first_letter, style: 'rich') : 'about:blank' %>"></iframe>
43
+ <iframe name="mail" id="mail" src="<%= first_letter.present? ? letter_path(first_letter, style: first_letter.default_style) : 'about:blank' %>"></iframe>
44
44
  </div>
File without changes
@@ -9,3 +9,8 @@ gem "actionmailer", "~> 3.2"
9
9
  gem "railties", "~> 3.2"
10
10
 
11
11
  gem "letter_opener_web", path: '../'
12
+ gem "actionmailer_inline_css"
13
+
14
+ gem "rails-footnotes"
15
+
16
+ gem "unicorn"
@@ -0,0 +1,25 @@
1
+ class ApplicationController < ActionController::Base
2
+ append_view_path '.'
3
+
4
+ def index
5
+ render :template => 'index'
6
+ end
7
+
8
+ def send_mail
9
+ ContactMailer.new_message(params[:email], params[:message]).deliver
10
+ redirect_to '/', :notice => 'Email sent successfully, please check letter_opener_web inbox.'
11
+ end
12
+ end
13
+
14
+ class ContactMailer < ActionMailer::Base
15
+ append_view_path File.dirname(__FILE__)
16
+
17
+ default :to => 'admin@letter_opener_web.com',
18
+ :from => 'no-reply@letter_opener_web.com',
19
+ :template_path => '.'
20
+
21
+ def new_message(from, message)
22
+ @from, @message = from, message
23
+ mail(:subject => 'Testing letter_opener_web', :template_name => 'new_message')
24
+ end
25
+ end
@@ -20,7 +20,6 @@ class TinyRailsApp < Rails::Application
20
20
  config.autoload_paths << config.root
21
21
 
22
22
  config.middleware.delete "Rack::Lock"
23
- config.middleware.delete "ActionDispatch::Flash"
24
23
  config.middleware.delete "ActionDispatch::BestStandardsSupport"
25
24
  config.middleware.use Rails::Rack::LogTailer, "log/#{Rails.env}.log"
26
25
 
@@ -30,6 +29,8 @@ class TinyRailsApp < Rails::Application
30
29
  # Enable asset pipeline
31
30
  config.assets.enabled = true
32
31
  config.assets.debug = true
32
+
33
+ config.action_mailer.delivery_method = :letter_opener_web
33
34
  end
34
35
 
35
36
  require 'initializers' if File.exists?('initializers.rb')
@@ -37,6 +38,8 @@ require 'initializers' if File.exists?('initializers.rb')
37
38
  TinyRailsApp.initialize!
38
39
 
39
40
  TinyRailsApp.routes.draw do
40
- mount LetterOpenerWeb::Engine, at: "/"
41
+ get "/" => 'application#index'
42
+ post "/" => 'application#send_mail'
43
+ mount LetterOpenerWeb::Engine, at: "/letter_opener"
41
44
  match "/favicon.ico", :to => proc {|env| [200, {}, [""]] }
42
45
  end
File without changes
@@ -0,0 +1,72 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>LetterOpenerWeb Test APP</title>
5
+ <%= stylesheet_link_tag "bootstrap.min" %>
6
+ <style>
7
+ body {
8
+ padding-top: 20px;
9
+ }
10
+
11
+ .alert {
12
+ margin-top: 20px;
13
+ }
14
+
15
+ h1, .footer {
16
+ text-align: center;
17
+ }
18
+
19
+ .icon-white {
20
+ background-image: url(<%=asset_path "glyphicons-halflings-white.png"%>);
21
+ }
22
+ </style>
23
+ </head>
24
+ <body>
25
+ <div class="container">
26
+ <h1>LetterOpenerWeb Test App</h1>
27
+
28
+ <div class="row">
29
+ <div class="span6 offset3">
30
+
31
+ <div class="well">
32
+ <form method="post" action="/">
33
+ <legend>Contact form</legend>
34
+ <div class="control-group">
35
+ <label class="control-label" for="email">Email</label>
36
+ <div class="controls">
37
+ <input type="text" class="input-block-level" name="email">
38
+ </div>
39
+ </div>
40
+ <div class="control-group">
41
+ <label class="control-label" for="message">Message</label>
42
+ <div class="controls">
43
+ <textarea class="input-block-level" name="message" rows="6"></textarea>
44
+ </div>
45
+ </div>
46
+ <div class="control-group">
47
+ <div class="controls">
48
+ <button type="submit" class="btn btn-primary pull-right">
49
+ <i class="icon-envelope icon-white"></i>
50
+ Send mail
51
+ </button>
52
+ <div class="clearfix"></div>
53
+ </div>
54
+ </div>
55
+ </form>
56
+
57
+ <p class="footer">
58
+ <a href="/letter_opener" target="_blank">Click here</a>
59
+ to see sent mails
60
+ </p>
61
+ </div>
62
+
63
+ <% if flash.key?(:notice) %>
64
+ <div class="alert alert-success">
65
+ <%= flash[:notice] %>
66
+ </div>
67
+ <% end %>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ </body>
72
+ </html>
@@ -0,0 +1,9 @@
1
+ Footnotes.setup do |config|
2
+ config.before do |controller, filter|
3
+ controller.class.name =~ /LetterOpenerWeb/ ?
4
+ filter.notes.clear :
5
+ filter.notes
6
+ end
7
+ end
8
+
9
+ Footnotes.run!
@@ -0,0 +1,21 @@
1
+ <style type="text/css">
2
+ label { font-weight: bold; }
3
+ .from { color: #888; font-style: italic }
4
+ .message { padding-left: 10px; }
5
+ .message p:first-child { margin-top: 0; }
6
+ </style>
7
+
8
+ <h1>New message!</h1>
9
+
10
+ <p>
11
+ <label>From:</label>
12
+ <span class="from"><%= @from %></span>
13
+ </p>
14
+
15
+ <p>
16
+ <label>Message:</label>
17
+ </p>
18
+
19
+ <div class="message">
20
+ <%= simple_format @message %>
21
+ </div>
@@ -1,3 +1,3 @@
1
1
  module LetterOpenerWeb
2
- VERSION = "1.0.0.rc3"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -50,6 +50,20 @@ MAIL
50
50
  it { should =~ /Plain text for 2222_2222/ }
51
51
  end
52
52
 
53
+ describe 'default style' do
54
+ let(:id) { '2222_2222' }
55
+ subject { described_class.new(id: id) }
56
+
57
+ it 'returns rich if rich text version is present' do
58
+ subject.default_style.should == 'rich'
59
+ end
60
+
61
+ it 'returns plain if rich text version is not present' do
62
+ File.stub(:exists? => false)
63
+ subject.default_style.should == 'plain'
64
+ end
65
+ end
66
+
53
67
  describe '.search' do
54
68
  let(:search_results) { described_class.search }
55
69
  let(:first_letter) { search_results.first }
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: letter_opener_web
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc3
5
- prerelease: 6
4
+ version: 1.0.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Fabio Rehm
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-22 00:00:00.000000000 Z
12
+ date: 2013-02-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  prerelease: false
@@ -114,6 +114,14 @@ files:
114
114
  - app/views/layouts/letter_opener_web/application.html.erb
115
115
  - app/views/letter_opener_web/letters/index.html.erb
116
116
  - config/routes.rb
117
+ - demo/.gitignore
118
+ - demo/Gemfile
119
+ - demo/application_controller.rb
120
+ - demo/boot.rb
121
+ - demo/config.ru
122
+ - demo/index.html.erb
123
+ - demo/initializers.rb
124
+ - demo/new_message.html.erb
117
125
  - letter_opener_web.gemspec
118
126
  - lib/letter_opener_web.rb
119
127
  - lib/letter_opener_web/delivery_method.rb
@@ -129,10 +137,6 @@ files:
129
137
  - spec/internal/public/favicon.ico
130
138
  - spec/models/letter_opener_web/letter_spec.rb
131
139
  - spec/spec_helper.rb
132
- - test-app/.gitignore
133
- - test-app/Gemfile
134
- - test-app/boot.rb
135
- - test-app/config.ru
136
140
  - vendor/assets/images/glyphicons-halflings-white.png
137
141
  - vendor/assets/images/glyphicons-halflings.png
138
142
  - vendor/assets/javascripts/bootstrap.min.js
@@ -151,13 +155,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
155
  version: '0'
152
156
  segments:
153
157
  - 0
154
- hash: -4352111280043590471
158
+ hash: 497055164717147357
155
159
  none: false
156
160
  required_rubygems_version: !ruby/object:Gem::Requirement
157
161
  requirements:
158
- - - ! '>'
162
+ - - ! '>='
159
163
  - !ruby/object:Gem::Version
160
- version: 1.3.1
164
+ version: '0'
165
+ segments:
166
+ - 0
167
+ hash: 497055164717147357
161
168
  none: false
162
169
  requirements: []
163
170
  rubyforge_project: