diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b355420 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.gem +.bundle +Gemfile.lock +pkg/* +tmp/* diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..a5faa1d --- /dev/null +++ b/.rspec @@ -0,0 +1,2 @@ +--color +--backtrace diff --git a/.rvmrc b/.rvmrc new file mode 100644 index 0000000..3179282 --- /dev/null +++ b/.rvmrc @@ -0,0 +1 @@ +rvm use 1.9.2@letter_opener --create diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..1aa98e4 --- /dev/null +++ b/Gemfile @@ -0,0 +1,2 @@ +source "http://rubygems.org" +gemspec diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..35372a8 --- /dev/null +++ b/Rakefile @@ -0,0 +1,9 @@ +require 'bundler' +Bundler::GemHelper.install_tasks +require 'rspec/core/rake_task' + +desc "Run RSpec" +RSpec::Core::RakeTask.new do |t| + t.verbose = false +end +task :default => :spec diff --git a/letter_opener.gemspec b/letter_opener.gemspec new file mode 100644 index 0000000..169f96a --- /dev/null +++ b/letter_opener.gemspec @@ -0,0 +1,19 @@ +Gem::Specification.new do |s| + s.name = "letter_opener" + s.version = "0.0.1" + s.author = "Ryan Bates" + s.email = "ryan@railscasts.com" + s.homepage = "http://github.com/ryanb/letter_opener" + s.summary = "Preview mail in browser instead of sending." + s.description = "When mail is sent from your application, Open Mail will open a preview in the browser instead of sending." + + s.files = Dir["{lib,spec}/**/*", "[A-Z]*"] - ["Gemfile.lock"] + s.require_path = "lib" + + s.add_dependency 'launchy' + s.add_development_dependency 'rspec', '~> 2.6.0' + s.add_development_dependency 'mail', '~> 2.3.0' + + s.rubyforge_project = s.name + s.required_rubygems_version = ">= 1.3.4" +end diff --git a/lib/letter_opener.rb b/lib/letter_opener.rb new file mode 100644 index 0000000..0651cdf --- /dev/null +++ b/lib/letter_opener.rb @@ -0,0 +1,3 @@ +require "fileutils" +require "digest/sha1" +require "letter_opener/delivery_method" diff --git a/lib/letter_opener/delivery_method.rb b/lib/letter_opener/delivery_method.rb new file mode 100644 index 0000000..4580ffb --- /dev/null +++ b/lib/letter_opener/delivery_method.rb @@ -0,0 +1,17 @@ +module LetterOpener + class DeliveryMethod + def initialize(options = {}) + @options = {:location => './letter_opener'}.merge!(options) + end + + def deliver!(mail) + identity = Time.now.to_i.to_s + Digest::SHA1.hexdigest(mail.encoded)[0..6] + path = File.join(@options[:location], identity) + FileUtils.mkdir_p(path) + File.open(File.join(path, "index.html"), 'w') do |f| + template = File.expand_path("../views/index.html.erb", __FILE__) + f.write ERB.new(File.read(template)).result(binding) + end + end + end +end diff --git a/lib/letter_opener/views/index.html.erb b/lib/letter_opener/views/index.html.erb new file mode 100644 index 0000000..e72f84f --- /dev/null +++ b/lib/letter_opener/views/index.html.erb @@ -0,0 +1,82 @@ + + +
+
+
From:
+
<%= mail.from %>
+ +
Subject:
+
<%= mail.subject %>
+ +
Date:
+
<%= Time.now.strftime("%b %e, %Y %I:%M:%S %p %Z") %>
+ +
To:
+
<%= mail.to %>
+
+ + <% if false && mail.multipart? %> +

+ <% if body_part.content_type && body_part.content_type.match(/text\/html/) %> + View plain text version + <% else %> + View HTML version + <% end %> +

+ <% end %> +
+ +
<%= mail.body %>
diff --git a/spec/letter_opener/delivery_method_spec.rb b/spec/letter_opener/delivery_method_spec.rb new file mode 100644 index 0000000..ad9743b --- /dev/null +++ b/spec/letter_opener/delivery_method_spec.rb @@ -0,0 +1,24 @@ +require "spec_helper" + +describe LetterOpener::DeliveryMethod do + before(:each) do + location = File.expand_path('../../../tmp/letter_opener', __FILE__) + FileUtils.rm_rf(location) + Mail.defaults do + delivery_method LetterOpener::DeliveryMethod, :location => location + end + @location = location + end + + it "saves text into html document" do + mail = Mail.deliver do + from 'foo@example.com' + to 'bar@example.com' + subject 'Hello' + body 'World!' + end + html = File.read(Dir["#{@location}/*/index.html"].first) + html.should include("Hello") + html.should include("World!") + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..b2dd4b9 --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,8 @@ +require 'rubygems' +require 'bundler/setup' +Bundler.require(:default) + +require "mail" + +RSpec.configure do |config| +end