email_preview 0.4.2 → 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/.gitignore ADDED
@@ -0,0 +1,25 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+
6
+ ## MAC OS
7
+ .DS_Store
8
+
9
+ ## TEXTMATE
10
+ *.tmproj
11
+ tmtags
12
+
13
+ ## EMACS
14
+ *~
15
+ \#*
16
+ .\#*
17
+
18
+ ## VIM
19
+ *.swp
20
+
21
+ ## PROJECT::GENERAL
22
+ coverage
23
+ rdoc
24
+ pkg
25
+
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in email_preview.gemspec
4
+ gemspec
data/Rakefile CHANGED
@@ -1,23 +1,5 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "email_preview"
8
- gem.summary = %Q{preview emails within your webbrowser}
9
- gem.description = %Q{render and send sample html and plain text emails to see what they will *really* look like}
10
- gem.email = "ryan@socialcast.com"
11
- gem.homepage = "http://github.com/wireframe/email_preview"
12
- gem.authors = ["Ryan Sonnek"]
13
- gem.add_runtime_dependency "mail", ">= 2.2.3"
14
- gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
15
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
- end
17
- Jeweler::GemcutterTasks.new
18
- rescue LoadError
19
- puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
- end
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
21
3
 
22
4
  require 'rake/testtask'
23
5
  Rake::TestTask.new(:test) do |test|
@@ -25,30 +7,4 @@ Rake::TestTask.new(:test) do |test|
25
7
  test.pattern = 'test/**/test_*.rb'
26
8
  test.verbose = true
27
9
  end
28
-
29
- begin
30
- require 'rcov/rcovtask'
31
- Rcov::RcovTask.new do |test|
32
- test.libs << 'test'
33
- test.pattern = 'test/**/test_*.rb'
34
- test.verbose = true
35
- end
36
- rescue LoadError
37
- task :rcov do
38
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
- end
40
- end
41
-
42
- task :test => :check_dependencies
43
-
44
10
  task :default => :test
45
-
46
- require 'rake/rdoctask'
47
- Rake::RDocTask.new do |rdoc|
48
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
-
50
- rdoc.rdoc_dir = 'rdoc'
51
- rdoc.title = "email_preview #{version}"
52
- rdoc.rdoc_files.include('README*')
53
- rdoc.rdoc_files.include('lib/**/*.rb')
54
- end
@@ -1,7 +1,7 @@
1
1
  class EmailPreviewController < ApplicationController
2
2
  unloadable
3
3
  before_filter :enforce_allowed_environments
4
- before_filter :build_email, :only => [:show, :deliver]
4
+ before_filter :build_email, :only => [:show, :deliver, :details, :preview]
5
5
  layout nil
6
6
 
7
7
  def deliver
@@ -9,11 +9,21 @@ class EmailPreviewController < ApplicationController
9
9
  @mail.deliver
10
10
  redirect_to email_preview_path(params[:id])
11
11
  end
12
+ def preview
13
+ @part = if request.format == 'html'
14
+ @parts.detect {|p| p.content_type.include?('text/html') }
15
+ else
16
+ @parts.detect {|p| p.content_type.include?('text/plain') }
17
+ end
18
+ @part ||= @parts.first
19
+ render :text => @part.body.to_s
20
+ end
12
21
  private
13
22
  def enforce_allowed_environments
14
23
  raise "'#{Rails.env}' is not in the supported list of environments from EmailPreview.allowed_environments: #{EmailPreview.allowed_environments.inspect}" unless EmailPreview.allowed_environments.include?(Rails.env)
15
24
  end
16
25
  def build_email
17
26
  @mail = EmailPreview.preview params[:id]
27
+ @parts = @mail.multipart? ? @mail.parts : [@mail]
18
28
  end
19
29
  end
@@ -0,0 +1,49 @@
1
+ <style>
2
+ .headers {
3
+ color: #333;
4
+ }
5
+ .headers dl {
6
+ margin: 0;
7
+ padding: 0;
8
+ clear: both;
9
+ }
10
+ .headers dt {
11
+ width: 100px;
12
+ padding: 1px;
13
+ float: left;
14
+ text-align: right;
15
+ font-weight: bold;
16
+ color: #7f7f7f;
17
+ }
18
+ .headers dd {
19
+ margin-left: 110px;
20
+ padding: 1px;
21
+ }
22
+
23
+ .deliver_form {
24
+ margin-bottom: 0;
25
+ float: right;
26
+ }
27
+ .deliver_form input {
28
+ width: 250px;
29
+ }
30
+ </style>
31
+ <%= form_tag deliver_email_preview_path(params[:id]), :class => 'deliver_form' do %>
32
+ <%= text_field_tag :to, '', :placeholder => 'Send this email to me@yourcompany.com' %>
33
+ <button type="submit">Send</button>
34
+ <% end %>
35
+ <h2>Headers</h2>
36
+ <div class="headers">
37
+ <% @mail.header_fields.each do |header| %>
38
+ <dl>
39
+ <dt><%= header.name %></dt>
40
+ <dd><%= header.decoded %></dd>
41
+ </dl>
42
+ <% end %>
43
+ </div>
44
+
45
+ <h2>Content</h2>
46
+ <% @parts.each do |part| %>
47
+ <% render_format = part.content_type.include?('text/html') ? 'html' : 'txt' %>
48
+ <%= link_to "View #{render_format} output", preview_email_preview_path(params[:id], :format => render_format), :target => 'preview' %>
49
+ <% end %>
@@ -4,7 +4,7 @@
4
4
  <title>Email Preview</title>
5
5
  </head>
6
6
  <frameset cols="20%,*">
7
- <frame src="<%= navigation_email_preview_index_path %>" name="listing" />
8
- <frame name="render" />
7
+ <frame src="<%= navigation_email_preview_index_path %>" name="index" />
8
+ <frame name="show" />
9
9
  </frameset>
10
10
  </html>
@@ -1,5 +1,5 @@
1
1
  <ul>
2
2
  <% EmailPreview.emails.each_index do |index| %>
3
- <li><%= link_to EmailPreview.emails[index][:description], email_preview_path(index), :target => 'render' %>
3
+ <li><%= link_to EmailPreview.emails[index][:description], email_preview_path(index), :target => 'show' %>
4
4
  <% end%>
5
- </ul>
5
+ </ul>
@@ -1,41 +1,10 @@
1
- <style>
2
- .headers {
3
- color: #333;
4
- }
5
- .deliver_form {
6
- margin-bottom: 0;
7
- float: right;
8
- }
9
- .deliver_form input {
10
- width: 250px;
11
- }
12
- .content_type {
13
- margin: .5em 0;
14
- }
15
- </style>
16
- <%= form_tag deliver_email_preview_path(params[:id]), :class => 'deliver_form' do %>
17
- <%= text_field_tag :to, '', :placeholder => 'Send this email to me@yourcompany.com' %>
18
- <button type="submit">Send</button>
19
- <% end %>
20
- <h2>Message Headers</h2>
21
- <pre class='headers'>
22
- <%= @mail.header_fields.collect { |header| "#{header.name}: #{header.decoded}\n"}%>
23
- </pre>
24
- <!--
25
- <h3>Debug output</h3>
26
- <pre>
27
- <%= @mail.to_s %>
28
- </pre>
29
- -->
30
-
31
- <h2>Message Content</h2>
32
- <% parts = @mail.multipart? ? @mail.parts : [@mail] %>
33
- <% parts.each do |part| %>
34
- <h3 class="content_type"><%= part.content_type %></h3>
35
- <hr />
36
- <% if part.content_type.include?('text/plain') %>
37
- <pre><%= part.body %></pre>
38
- <% elsif part.content_type.include?('text/html')%>
39
- <%= part.body.to_s.html_safe %>
40
- <% end %>
41
- <% end %>
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Email Preview</title>
5
+ </head>
6
+ <frameset rows="300px,*">
7
+ <frame src="<%= details_email_preview_path(params[:id]) %>" name="details" />
8
+ <frame name="preview" />
9
+ </frameset>
10
+ </html>
data/config/routes.rb CHANGED
@@ -5,6 +5,8 @@ Rails.application.routes.draw do
5
5
  end
6
6
  member do
7
7
  post :deliver
8
+ get :details
9
+ get :preview
8
10
  end
9
11
  end
10
12
  end
@@ -1,60 +1,24 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "email_preview/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{email_preview}
8
- s.version = "0.4.2"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{Ryan Sonnek}]
12
- s.date = %q{2011-05-20}
6
+ s.name = "email_preview"
7
+ s.version = EmailPreview::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Ryan Sonnek"]
10
+ s.email = ["ryan@codecrate.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{simple tool to preview emails in development environment}
13
13
  s.description = %q{render and send sample html and plain text emails to see what they will *really* look like}
14
- s.email = %q{ryan@socialcast.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- "LICENSE",
22
- "README.rdoc",
23
- "Rakefile",
24
- "VERSION",
25
- "app/controllers/email_preview_controller.rb",
26
- "app/views/email_preview/index.html.erb",
27
- "app/views/email_preview/navigation.html.erb",
28
- "app/views/email_preview/show.html.erb",
29
- "config/routes.rb",
30
- "email_preview.gemspec",
31
- "lib/email_preview.rb",
32
- "lib/engine.rb",
33
- "test/helper.rb",
34
- "test/test_email_preview.rb"
35
- ]
36
- s.homepage = %q{http://github.com/wireframe/email_preview}
37
- s.require_paths = [%q{lib}]
38
- s.rubygems_version = %q{1.8.1}
39
- s.summary = %q{preview emails within your webbrowser}
40
- s.test_files = [
41
- "test/helper.rb",
42
- "test/test_email_preview.rb"
43
- ]
44
14
 
45
- if s.respond_to? :specification_version then
46
- s.specification_version = 3
15
+ s.rubyforge_project = "email_preview"
47
16
 
48
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
- s.add_runtime_dependency(%q<mail>, [">= 2.2.3"])
50
- s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
51
- else
52
- s.add_dependency(%q<mail>, [">= 2.2.3"])
53
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
54
- end
55
- else
56
- s.add_dependency(%q<mail>, [">= 2.2.3"])
57
- s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
58
- end
59
- end
17
+ s.add_runtime_dependency(%q<mail>, [">= 2.2.3"])
18
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
60
19
 
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+ end
File without changes
@@ -0,0 +1,3 @@
1
+ module EmailPreview
2
+ VERSION = "1.0.0"
3
+ end
data/lib/email_preview.rb CHANGED
@@ -1,22 +1,34 @@
1
1
  require 'mail'
2
- require 'engine' if defined?(Rails)
2
+ require 'email_preview/engine' if defined?(Rails)
3
3
 
4
4
  module EmailPreview
5
-
6
5
  class << self
7
6
  attr_accessor :emails
8
7
  attr_accessor :allowed_environments
8
+ attr_accessor :transactional
9
9
 
10
- def allowed_environments
11
- @allowed_environments ||= ['development', 'test']
12
- @allowed_environments
13
- end
14
10
  def register(description, &block)
15
- self.emails ||= []
16
11
  self.emails << {:description => description, :block => block }
17
12
  end
18
13
  def preview(index)
19
- self.emails[index.to_i][:block].call
14
+ mail = nil
15
+ ActiveRecord::Base.transaction do
16
+ mail = self.emails[index.to_i][:block].call
17
+ raise ActiveRecord::Rollback, "EmailPreview rollback" if EmailPreview.transactional?
18
+ end
19
+ mail
20
+ end
21
+ def transactional?
22
+ !!self.transactional
20
23
  end
21
24
  end
22
25
  end
26
+
27
+ # initialize to empty array
28
+ EmailPreview.emails = []
29
+
30
+ # default to only run in development and test environment
31
+ EmailPreview.allowed_environments = %w{ development test }
32
+
33
+ # default to rollback transactions after previewing email
34
+ EmailPreview.transactional = true
@@ -13,7 +13,7 @@ class TestEmailPreview < Test::Unit::TestCase
13
13
  end
14
14
  end
15
15
  should "have one entry in the configuration" do
16
- assert_equal 1, EmailPreview.emails.keys.length
16
+ assert_equal 1, EmailPreview.emails.length
17
17
  end
18
18
  end
19
19
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email_preview
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
+ - 1
7
8
  - 0
8
- - 4
9
- - 2
10
- version: 0.4.2
9
+ - 0
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Sonnek
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-20 00:00:00 Z
18
+ date: 2011-06-08 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: mail
@@ -34,7 +34,7 @@ dependencies:
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- name: thoughtbot-shoulda
37
+ name: shoulda
38
38
  prerelease: false
39
39
  requirement: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
@@ -48,31 +48,34 @@ dependencies:
48
48
  type: :development
49
49
  version_requirements: *id002
50
50
  description: render and send sample html and plain text emails to see what they will *really* look like
51
- email: ryan@socialcast.com
51
+ email:
52
+ - ryan@codecrate.com
52
53
  executables: []
53
54
 
54
55
  extensions: []
55
56
 
56
- extra_rdoc_files:
57
- - LICENSE
58
- - README.rdoc
57
+ extra_rdoc_files: []
58
+
59
59
  files:
60
60
  - .document
61
+ - .gitignore
62
+ - Gemfile
61
63
  - LICENSE
62
64
  - README.rdoc
63
65
  - Rakefile
64
- - VERSION
65
66
  - app/controllers/email_preview_controller.rb
67
+ - app/views/email_preview/details.html.erb
66
68
  - app/views/email_preview/index.html.erb
67
69
  - app/views/email_preview/navigation.html.erb
68
70
  - app/views/email_preview/show.html.erb
69
71
  - config/routes.rb
70
72
  - email_preview.gemspec
71
73
  - lib/email_preview.rb
72
- - lib/engine.rb
74
+ - lib/email_preview/engine.rb
75
+ - lib/email_preview/version.rb
73
76
  - test/helper.rb
74
77
  - test/test_email_preview.rb
75
- homepage: http://github.com/wireframe/email_preview
78
+ homepage: ""
76
79
  licenses: []
77
80
 
78
81
  post_install_message:
@@ -100,11 +103,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
103
  version: "0"
101
104
  requirements: []
102
105
 
103
- rubyforge_project:
106
+ rubyforge_project: email_preview
104
107
  rubygems_version: 1.8.1
105
108
  signing_key:
106
109
  specification_version: 3
107
- summary: preview emails within your webbrowser
110
+ summary: simple tool to preview emails in development environment
108
111
  test_files:
109
112
  - test/helper.rb
110
113
  - test/test_email_preview.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.4.2