path-email_spec 0.6.2
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/History.txt +199 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +137 -0
- data/Rakefile +64 -0
- data/examples/rails3_root/Gemfile +24 -0
- data/examples/rails3_root/README +5 -0
- data/examples/rails3_root/Rakefile +11 -0
- data/examples/rails3_root/app/controllers/application_controller.rb +3 -0
- data/examples/rails3_root/app/controllers/welcome_controller.rb +16 -0
- data/examples/rails3_root/app/helpers/application_helper.rb +2 -0
- data/examples/rails3_root/app/mailers/user_mailer.rb +39 -0
- data/examples/rails3_root/app/models/user.rb +2 -0
- data/examples/rails3_root/app/views/user_mailer/attachments.html.erb +6 -0
- data/examples/rails3_root/app/views/user_mailer/newsletter.html.erb +8 -0
- data/examples/rails3_root/app/views/user_mailer/signup.html.erb +3 -0
- data/examples/rails3_root/app/views/welcome/attachments.html.erb +0 -0
- data/examples/rails3_root/app/views/welcome/confirm.html.erb +1 -0
- data/examples/rails3_root/app/views/welcome/index.html.erb +8 -0
- data/examples/rails3_root/app/views/welcome/newsletter.html.erb +0 -0
- data/examples/rails3_root/app/views/welcome/signup.html.erb +1 -0
- data/examples/rails3_root/attachments/document.pdf +0 -0
- data/examples/rails3_root/attachments/image.png +0 -0
- data/examples/rails3_root/config.ru +4 -0
- data/examples/rails3_root/config/application.rb +43 -0
- data/examples/rails3_root/config/boot.rb +14 -0
- data/examples/rails3_root/config/cucumber.yml +7 -0
- data/examples/rails3_root/config/database.yml +25 -0
- data/examples/rails3_root/config/environment.rb +6 -0
- data/examples/rails3_root/config/environments/development.rb +19 -0
- data/examples/rails3_root/config/environments/production.rb +42 -0
- data/examples/rails3_root/config/environments/test.rb +29 -0
- data/examples/rails3_root/config/initializers/backtrace_silencers.rb +7 -0
- data/examples/rails3_root/config/initializers/cookie_verification_secret.rb +7 -0
- data/examples/rails3_root/config/initializers/inflections.rb +10 -0
- data/examples/rails3_root/config/initializers/mime_types.rb +5 -0
- data/examples/rails3_root/config/initializers/rspec_generator.rb +6 -0
- data/examples/rails3_root/config/initializers/session_store.rb +10 -0
- data/examples/rails3_root/config/locales/en.yml +5 -0
- data/examples/rails3_root/config/routes.rb +7 -0
- data/examples/rails3_root/db/migrate/20090125013728_create_users.rb +11 -0
- data/examples/rails3_root/db/migrate/20090908054656_create_delayed_jobs.rb +20 -0
- data/examples/rails3_root/db/schema.rb +32 -0
- data/examples/rails3_root/db/seeds.rb +7 -0
- data/examples/rails3_root/doc/README_FOR_APP +2 -0
- data/examples/rails3_root/features/attachments.feature +27 -0
- data/examples/rails3_root/features/delayed_job.feature +13 -0
- data/examples/rails3_root/features/errors.feature +32 -0
- data/examples/rails3_root/features/example.feature +62 -0
- data/examples/rails3_root/features/step_definitions/user_steps.rb +26 -0
- data/examples/rails3_root/features/step_definitions/web_steps.rb +202 -0
- data/examples/rails3_root/features/support/env.rb +59 -0
- data/examples/rails3_root/features/support/env_ext.rb +2 -0
- data/examples/rails3_root/features/support/paths.rb +33 -0
- data/examples/rails3_root/lib/tasks/cucumber.rake +47 -0
- data/examples/rails3_root/lib/tasks/rspec.rake +69 -0
- data/examples/rails3_root/public/404.html +26 -0
- data/examples/rails3_root/public/422.html +26 -0
- data/examples/rails3_root/public/500.html +26 -0
- data/examples/rails3_root/public/favicon.ico +0 -0
- data/examples/rails3_root/public/images/rails.png +0 -0
- data/examples/rails3_root/public/javascripts/application.js +2 -0
- data/examples/rails3_root/public/javascripts/controls.js +965 -0
- data/examples/rails3_root/public/javascripts/dragdrop.js +974 -0
- data/examples/rails3_root/public/javascripts/effects.js +1123 -0
- data/examples/rails3_root/public/javascripts/prototype.js +4874 -0
- data/examples/rails3_root/public/javascripts/rails.js +109 -0
- data/examples/rails3_root/public/robots.txt +5 -0
- data/examples/rails3_root/script/cucumber +10 -0
- data/examples/rails3_root/script/rails +9 -0
- data/examples/rails3_root/spec/controllers/welcome_controller_spec.rb +18 -0
- data/examples/rails3_root/spec/models/user_mailer_spec.rb +47 -0
- data/examples/rails3_root/spec/spec.opts +2 -0
- data/examples/rails3_root/spec/spec_helper.rb +19 -0
- data/examples/rails_root/Rakefile +13 -0
- data/examples/rails_root/app/controllers/application_controller.rb +15 -0
- data/examples/rails_root/app/controllers/welcome_controller.rb +16 -0
- data/examples/rails_root/app/helpers/application_helper.rb +3 -0
- data/examples/rails_root/app/helpers/welcome_helper.rb +2 -0
- data/examples/rails_root/app/models/user.rb +2 -0
- data/examples/rails_root/app/models/user_mailer.rb +39 -0
- data/examples/rails_root/app/views/user_mailer/attachments.erb +6 -0
- data/examples/rails_root/app/views/user_mailer/newsletter.erb +8 -0
- data/examples/rails_root/app/views/user_mailer/signup.erb +3 -0
- data/examples/rails_root/app/views/welcome/attachments.html.erb +0 -0
- data/examples/rails_root/app/views/welcome/confirm.html.erb +1 -0
- data/examples/rails_root/app/views/welcome/index.html.erb +8 -0
- data/examples/rails_root/app/views/welcome/newsletter.html.erb +0 -0
- data/examples/rails_root/app/views/welcome/signup.html.erb +1 -0
- data/examples/rails_root/attachments/document.pdf +0 -0
- data/examples/rails_root/attachments/image.png +0 -0
- data/examples/rails_root/config/boot.rb +110 -0
- data/examples/rails_root/config/cucumber.yml +7 -0
- data/examples/rails_root/config/database.yml +25 -0
- data/examples/rails_root/config/environment.rb +28 -0
- data/examples/rails_root/config/environments/cucumber.rb +29 -0
- data/examples/rails_root/config/environments/development.rb +17 -0
- data/examples/rails_root/config/environments/production.rb +28 -0
- data/examples/rails_root/config/environments/test.rb +28 -0
- data/examples/rails_root/config/initializers/inflections.rb +10 -0
- data/examples/rails_root/config/initializers/mime_types.rb +5 -0
- data/examples/rails_root/config/initializers/new_rails_defaults.rb +17 -0
- data/examples/rails_root/config/routes.rb +45 -0
- data/examples/rails_root/db/migrate/20090125013728_create_users.rb +11 -0
- data/examples/rails_root/db/migrate/20090908054656_create_delayed_jobs.rb +20 -0
- data/examples/rails_root/db/schema.rb +32 -0
- data/examples/rails_root/doc/README_FOR_APP +5 -0
- data/examples/rails_root/features/attachments.feature +27 -0
- data/examples/rails_root/features/delayed_job.feature +13 -0
- data/examples/rails_root/features/errors.feature +32 -0
- data/examples/rails_root/features/example.feature +62 -0
- data/examples/rails_root/features/step_definitions/user_steps.rb +26 -0
- data/examples/rails_root/features/step_definitions/web_steps.rb +273 -0
- data/examples/rails_root/features/support/env.rb +58 -0
- data/examples/rails_root/features/support/env_ext.rb +6 -0
- data/examples/rails_root/features/support/paths.rb +33 -0
- data/examples/rails_root/lib/tasks/cucumber.rake +47 -0
- data/examples/rails_root/public/404.html +30 -0
- data/examples/rails_root/public/422.html +30 -0
- data/examples/rails_root/public/500.html +33 -0
- data/examples/rails_root/public/dispatch.rb +10 -0
- data/examples/rails_root/public/favicon.ico +0 -0
- data/examples/rails_root/public/images/rails.png +0 -0
- data/examples/rails_root/public/javascripts/application.js +2 -0
- data/examples/rails_root/public/javascripts/controls.js +963 -0
- data/examples/rails_root/public/javascripts/dragdrop.js +973 -0
- data/examples/rails_root/public/javascripts/effects.js +1128 -0
- data/examples/rails_root/public/javascripts/prototype.js +4320 -0
- data/examples/rails_root/public/robots.txt +5 -0
- data/examples/rails_root/script/about +4 -0
- data/examples/rails_root/script/autospec +5 -0
- data/examples/rails_root/script/console +3 -0
- data/examples/rails_root/script/cucumber +10 -0
- data/examples/rails_root/script/dbconsole +3 -0
- data/examples/rails_root/script/delayed_job +5 -0
- data/examples/rails_root/script/destroy +3 -0
- data/examples/rails_root/script/generate +3 -0
- data/examples/rails_root/script/performance/benchmarker +3 -0
- data/examples/rails_root/script/performance/profiler +3 -0
- data/examples/rails_root/script/performance/request +3 -0
- data/examples/rails_root/script/plugin +3 -0
- data/examples/rails_root/script/process/inspector +3 -0
- data/examples/rails_root/script/process/reaper +3 -0
- data/examples/rails_root/script/process/spawner +3 -0
- data/examples/rails_root/script/runner +3 -0
- data/examples/rails_root/script/server +3 -0
- data/examples/rails_root/script/spec +5 -0
- data/examples/rails_root/script/spec_server +125 -0
- data/examples/rails_root/spec/controllers/welcome_controller_spec.rb +15 -0
- data/examples/rails_root/spec/model_factory.rb +6 -0
- data/examples/rails_root/spec/models/user_mailer_spec.rb +58 -0
- data/examples/rails_root/spec/models/user_spec.rb +5 -0
- data/examples/rails_root/spec/rcov.opts +2 -0
- data/examples/rails_root/spec/spec.opts +4 -0
- data/examples/rails_root/spec/spec_helper.rb +51 -0
- data/examples/sinatra/app.rb +33 -0
- data/examples/sinatra/features/errors.feature +32 -0
- data/examples/sinatra/features/example.feature +62 -0
- data/examples/sinatra/features/step_definitions/user_steps.rb +26 -0
- data/examples/sinatra/features/step_definitions/web_steps.rb +273 -0
- data/examples/sinatra/features/support/env.rb +39 -0
- data/examples/sinatra/features/support/paths.rb +24 -0
- data/install.rb +0 -0
- data/lib/email-spec.rb +1 -0
- data/lib/email_spec.rb +15 -0
- data/lib/email_spec/address_converter.rb +29 -0
- data/lib/email_spec/background_processes.rb +45 -0
- data/lib/email_spec/cucumber.rb +26 -0
- data/lib/email_spec/deliveries.rb +87 -0
- data/lib/email_spec/email_viewer.rb +87 -0
- data/lib/email_spec/helpers.rb +164 -0
- data/lib/email_spec/matchers.rb +225 -0
- data/lib/generators/email_spec/steps/USAGE +5 -0
- data/lib/generators/email_spec/steps/steps_generator.rb +14 -0
- data/lib/generators/email_spec/steps/templates/email_steps.rb +194 -0
- data/rails_generators/email_spec/email_spec_generator.rb +17 -0
- data/rails_generators/email_spec/templates/email_steps.rb +182 -0
- data/spec/email_spec/helpers_spec.rb +21 -0
- data/spec/email_spec/matchers_spec.rb +430 -0
- data/spec/spec_helper.rb +16 -0
- metadata +407 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
document.observe("dom:loaded", function() {
|
|
2
|
+
var authToken = $$('meta[name=csrf-token]').first().readAttribute('content'),
|
|
3
|
+
authParam = $$('meta[name=csrf-param]').first().readAttribute('content'),
|
|
4
|
+
formTemplate = '<form method="#{method}" action="#{action}">\
|
|
5
|
+
#{realmethod}<input name="#{param}" value="#{token}" type="hidden">\
|
|
6
|
+
</form>',
|
|
7
|
+
realmethodTemplate = '<input name="_method" value="#{method}" type="hidden">';
|
|
8
|
+
|
|
9
|
+
function handleRemote(element) {
|
|
10
|
+
var method, url, params;
|
|
11
|
+
|
|
12
|
+
if (element.tagName.toLowerCase() == 'form') {
|
|
13
|
+
method = element.readAttribute('method') || 'post';
|
|
14
|
+
url = element.readAttribute('action');
|
|
15
|
+
params = element.serialize(true);
|
|
16
|
+
} else {
|
|
17
|
+
method = element.readAttribute('data-method') || 'get';
|
|
18
|
+
url = element.readAttribute('href');
|
|
19
|
+
params = {};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
var event = element.fire("ajax:before");
|
|
23
|
+
if (event.stopped) return false;
|
|
24
|
+
|
|
25
|
+
new Ajax.Request(url, {
|
|
26
|
+
method: method,
|
|
27
|
+
parameters: params,
|
|
28
|
+
asynchronous: true,
|
|
29
|
+
evalScripts: true,
|
|
30
|
+
|
|
31
|
+
onLoading: function(request) { element.fire("ajax:loading", {request: request}); },
|
|
32
|
+
onLoaded: function(request) { element.fire("ajax:loaded", {request: request}); },
|
|
33
|
+
onInteractive: function(request) { element.fire("ajax:interactive", {request: request}); },
|
|
34
|
+
onComplete: function(request) { element.fire("ajax:complete", {request: request}); },
|
|
35
|
+
onSuccess: function(request) { element.fire("ajax:success", {request: request}); },
|
|
36
|
+
onFailure: function(request) { element.fire("ajax:failure", {request: request}); }
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
element.fire("ajax:after");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
$(document.body).observe("click", function(event) {
|
|
43
|
+
var message = event.element().readAttribute('data-confirm');
|
|
44
|
+
if (message && !confirm(message)) {
|
|
45
|
+
event.stop();
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
var element = event.findElement("a[data-remote=true]");
|
|
50
|
+
if (element) {
|
|
51
|
+
handleRemote(element);
|
|
52
|
+
event.stop();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
var element = event.findElement("a[data-method]");
|
|
56
|
+
if (element && element.readAttribute('data-remote') != 'true') {
|
|
57
|
+
var method = element.readAttribute('data-method'),
|
|
58
|
+
piggyback = method.toLowerCase() != 'post',
|
|
59
|
+
formHTML = formTemplate.interpolate({
|
|
60
|
+
method: 'POST',
|
|
61
|
+
realmethod: piggyback ? realmethodTemplate.interpolate({ method: method }) : '',
|
|
62
|
+
action: element.readAttribute('href'),
|
|
63
|
+
token: authToken,
|
|
64
|
+
param: authParam
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
var form = new Element('div').update(formHTML).down().hide();
|
|
68
|
+
this.insert({ bottom: form });
|
|
69
|
+
|
|
70
|
+
form.submit();
|
|
71
|
+
event.stop();
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// TODO: I don't think submit bubbles in IE
|
|
76
|
+
$(document.body).observe("submit", function(event) {
|
|
77
|
+
var message = event.element().readAttribute('data-confirm');
|
|
78
|
+
if (message && !confirm(message)) {
|
|
79
|
+
event.stop();
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
var inputs = event.element().select("input[type=submit][data-disable-with]");
|
|
84
|
+
inputs.each(function(input) {
|
|
85
|
+
input.disabled = true;
|
|
86
|
+
input.writeAttribute('data-original-value', input.value);
|
|
87
|
+
input.value = input.readAttribute('data-disable-with');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
var element = event.findElement("form[data-remote=true]");
|
|
91
|
+
if (element) {
|
|
92
|
+
handleRemote(element);
|
|
93
|
+
event.stop();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
$(document.body).observe("ajax:complete", function(event) {
|
|
98
|
+
var element = event.element();
|
|
99
|
+
|
|
100
|
+
if (element.tagName.toLowerCase() == 'form') {
|
|
101
|
+
var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
|
|
102
|
+
inputs.each(function(input) {
|
|
103
|
+
input.value = input.readAttribute('data-original-value');
|
|
104
|
+
input.writeAttribute('data-original-value', null);
|
|
105
|
+
input.disabled = false;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
vendored_cucumber_bin = Dir["#{File.dirname(__FILE__)}/../vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
|
|
4
|
+
if vendored_cucumber_bin
|
|
5
|
+
load File.expand_path(vendored_cucumber_bin)
|
|
6
|
+
else
|
|
7
|
+
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
|
8
|
+
require 'cucumber'
|
|
9
|
+
load Cucumber::BINARY
|
|
10
|
+
end
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
|
3
|
+
|
|
4
|
+
ENV_PATH = File.expand_path('../../config/environment', __FILE__)
|
|
5
|
+
BOOT_PATH = File.expand_path('../../config/boot', __FILE__)
|
|
6
|
+
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
|
7
|
+
|
|
8
|
+
require BOOT_PATH
|
|
9
|
+
require 'rails/commands'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe WelcomeController do
|
|
4
|
+
|
|
5
|
+
describe "POST /signup (#signup)" do
|
|
6
|
+
it "should deliver the signup email" do
|
|
7
|
+
lambda {
|
|
8
|
+
post :signup, "Email" => "email@example.com", "Name" => "Jimmy Bean"
|
|
9
|
+
}.should change(ActionMailer::Base.deliveries, :size).by(1)
|
|
10
|
+
|
|
11
|
+
last_delivery = ActionMailer::Base.deliveries.last
|
|
12
|
+
last_delivery.to.should include "email@example.com"
|
|
13
|
+
last_delivery.body.to_s.should include "Jimmy Bean"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
|
2
|
+
|
|
3
|
+
# These two example groups are specifying the exact same behavior. However, the documentation style is different
|
|
4
|
+
# and the value that each one provides is different with various trade-offs. Run these examples with the specdoc
|
|
5
|
+
# formatter to get an idea of how they differ.
|
|
6
|
+
# Example of documenting the behaviour explicitly and expressing the intent in the example's sentence.
|
|
7
|
+
describe "Signup Email" do
|
|
8
|
+
include EmailSpec::Helpers
|
|
9
|
+
include EmailSpec::Matchers
|
|
10
|
+
include ::Rails.application.routes.url_helpers
|
|
11
|
+
|
|
12
|
+
subject { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
|
|
13
|
+
|
|
14
|
+
it "should be delivered to the email passed in" do
|
|
15
|
+
should deliver_to("jojo@yahoo.com")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should contain the user's name in the mail body" do
|
|
19
|
+
should have_body_text(/Jojo Binks/)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should contain a link to the confirmation page" do
|
|
23
|
+
should have_body_text(/#{confirm_account_url(:host => 'example.com')}/)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it { should have_subject(/Account confirmation/) }
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# In this example group more of the documentation is placed in the context trying to allow for more concise specs.
|
|
32
|
+
describe "Signup Email" do
|
|
33
|
+
include EmailSpec::Helpers
|
|
34
|
+
include EmailSpec::Matchers
|
|
35
|
+
include ::Rails.application.routes.url_helpers
|
|
36
|
+
|
|
37
|
+
subject { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
|
|
38
|
+
|
|
39
|
+
it { should have_body_text(/#{confirm_account_url(:host => 'example.com')}/) }
|
|
40
|
+
it { should have_subject(/Account confirmation/) }
|
|
41
|
+
|
|
42
|
+
describe "sent with email address of 'jojo@yahoo.com', and users name 'Jojo Binks'" do
|
|
43
|
+
subject { UserMailer.signup("jojo@yahoo.com", "Jojo Binks") }
|
|
44
|
+
it { should deliver_to("jojo@yahoo.com") }
|
|
45
|
+
it { should have_body_text(/Jojo Binks/) }
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# This file is copied to ~/spec when you run 'ruby script/generate rspec'
|
|
2
|
+
# from the project root directory.
|
|
3
|
+
ENV["RAILS_ENV"] ||= 'test'
|
|
4
|
+
require File.dirname(__FILE__) + "/../config/environment"
|
|
5
|
+
require 'rspec/rails'
|
|
6
|
+
|
|
7
|
+
# Requires supporting files with custom matchers and macros, etc,
|
|
8
|
+
# in ./support/ and its subdirectories.
|
|
9
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
10
|
+
RSpec.configure do |config|
|
|
11
|
+
# == Mock Framework
|
|
12
|
+
#
|
|
13
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
|
14
|
+
#
|
|
15
|
+
# config.mock_with :mocha
|
|
16
|
+
# config.mock_with :flexmock
|
|
17
|
+
# config.mock_with :rr
|
|
18
|
+
config.mock_with :rspec
|
|
19
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require(File.join(File.dirname(__FILE__), 'config', 'boot'))
|
|
2
|
+
|
|
3
|
+
require 'rake'
|
|
4
|
+
require 'rake/testtask'
|
|
5
|
+
require 'rake/rdoctask'
|
|
6
|
+
|
|
7
|
+
require 'tasks/rails'
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
require 'delayed/tasks'
|
|
11
|
+
rescue LoadError
|
|
12
|
+
STDERR.puts "Run `rake gems:install` to install delayed_job"
|
|
13
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Filters added to this controller apply to all controllers in the application.
|
|
2
|
+
# Likewise, all the methods added will be available for all controllers.
|
|
3
|
+
|
|
4
|
+
class ApplicationController < ActionController::Base
|
|
5
|
+
helper :all # include all helpers, all the time
|
|
6
|
+
|
|
7
|
+
# See ActionController::RequestForgeryProtection for details
|
|
8
|
+
# Uncomment the :secret if you're not using the cookie session store
|
|
9
|
+
protect_from_forgery # :secret => 'a74714b35b202f269f7a297709d555ce'
|
|
10
|
+
|
|
11
|
+
# See ActionController::Base for details
|
|
12
|
+
# Uncomment this to filter the contents of submitted sensitive data parameters
|
|
13
|
+
# from your application log (in this case, all fields with names like "password").
|
|
14
|
+
# filter_parameter_logging :password
|
|
15
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class WelcomeController < ApplicationController
|
|
2
|
+
def signup
|
|
3
|
+
UserMailer.deliver_signup(params['Email'], params['Name'])
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def confirm
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def newsletter
|
|
10
|
+
UserMailer.send_later(:deliver_newsletter, params['Email'], params['Name'])
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def attachments
|
|
14
|
+
UserMailer.deliver_attachments(params['Email'], params['Name'])
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class UserMailer < ActionMailer::Base
|
|
2
|
+
default_url_options = {:host => 'example.com'}
|
|
3
|
+
def signup(email, name)
|
|
4
|
+
@recipients = email
|
|
5
|
+
@from = "admin@example.com"
|
|
6
|
+
@subject = "Account confirmation"
|
|
7
|
+
@sent_on = Time.now
|
|
8
|
+
@body[:name] = name
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def newsletter(email, name)
|
|
12
|
+
@recipients = email
|
|
13
|
+
@from = "admin@example.com"
|
|
14
|
+
@subject = "Newsletter sent"
|
|
15
|
+
@sent_on = Time.now
|
|
16
|
+
@body[:name] = name
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def attachments(email, name)
|
|
20
|
+
@recipients = email
|
|
21
|
+
@from = "admin@example.com"
|
|
22
|
+
@subject = "Attachments test"
|
|
23
|
+
@sent_on = Time.now
|
|
24
|
+
@body[:name] = name
|
|
25
|
+
add_attachment 'image.png'
|
|
26
|
+
add_attachment 'document.pdf'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def add_attachment(attachment_name)
|
|
32
|
+
content_type 'multipart/mixed'
|
|
33
|
+
attachment_path = File.join(RAILS_ROOT, 'attachments', attachment_name)
|
|
34
|
+
File.open(attachment_path) do |file|
|
|
35
|
+
filename = File.basename(file.path)
|
|
36
|
+
attachment :filename => filename, :content_type => File.mime_type?(file), :body => file.read
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Confirm your new account!
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Thanks! Go check your email!
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Don't change this file!
|
|
2
|
+
# Configure your app in config/environment.rb and config/environments/*.rb
|
|
3
|
+
|
|
4
|
+
RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
|
|
5
|
+
|
|
6
|
+
module Rails
|
|
7
|
+
class << self
|
|
8
|
+
def boot!
|
|
9
|
+
unless booted?
|
|
10
|
+
preinitialize
|
|
11
|
+
pick_boot.run
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def booted?
|
|
16
|
+
defined? Rails::Initializer
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def pick_boot
|
|
20
|
+
(vendor_rails? ? VendorBoot : GemBoot).new
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def vendor_rails?
|
|
24
|
+
File.exist?("#{RAILS_ROOT}/vendor/rails")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def preinitialize
|
|
28
|
+
load(preinitializer_path) if File.exist?(preinitializer_path)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def preinitializer_path
|
|
32
|
+
"#{RAILS_ROOT}/config/preinitializer.rb"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Boot
|
|
37
|
+
def run
|
|
38
|
+
load_initializer
|
|
39
|
+
Rails::Initializer.run(:set_load_path)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class VendorBoot < Boot
|
|
44
|
+
def load_initializer
|
|
45
|
+
require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
|
|
46
|
+
Rails::Initializer.run(:install_gem_spec_stubs)
|
|
47
|
+
Rails::GemDependency.add_frozen_gem_path
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class GemBoot < Boot
|
|
52
|
+
def load_initializer
|
|
53
|
+
self.class.load_rubygems
|
|
54
|
+
load_rails_gem
|
|
55
|
+
require 'initializer'
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def load_rails_gem
|
|
59
|
+
if version = self.class.gem_version
|
|
60
|
+
gem 'rails', version
|
|
61
|
+
else
|
|
62
|
+
gem 'rails'
|
|
63
|
+
end
|
|
64
|
+
rescue Gem::LoadError => load_error
|
|
65
|
+
$stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.)
|
|
66
|
+
exit 1
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
class << self
|
|
70
|
+
def rubygems_version
|
|
71
|
+
Gem::RubyGemsVersion rescue nil
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def gem_version
|
|
75
|
+
if defined? RAILS_GEM_VERSION
|
|
76
|
+
RAILS_GEM_VERSION
|
|
77
|
+
elsif ENV.include?('RAILS_GEM_VERSION')
|
|
78
|
+
ENV['RAILS_GEM_VERSION']
|
|
79
|
+
else
|
|
80
|
+
parse_gem_version(read_environment_rb)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def load_rubygems
|
|
85
|
+
min_version = '1.3.2'
|
|
86
|
+
require 'rubygems'
|
|
87
|
+
unless rubygems_version >= min_version
|
|
88
|
+
$stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
|
|
89
|
+
exit 1
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
rescue LoadError
|
|
93
|
+
$stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org)
|
|
94
|
+
exit 1
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def parse_gem_version(text)
|
|
98
|
+
$1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
def read_environment_rb
|
|
103
|
+
File.read("#{RAILS_ROOT}/config/environment.rb")
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# All that for this:
|
|
110
|
+
Rails.boot!
|