email_preview 0.4.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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