mailer_preview_request_model 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3fdd30fb4d510f4b86fc148179f9a95cfa43b9bb
4
+ data.tar.gz: 0650358a6b09c043bcef81682140e45b4eabeb5d
5
+ SHA512:
6
+ metadata.gz: 391fb7a7f617b12d8538d9d5870ebf65c46c984c2632ad501d637741289be775d2c816a7e81c06e11acd3c3de2e7c36df1bb53776b0b0957129a9b3293049316
7
+ data.tar.gz: 7ca0012084a3c127e8b49cdb69b715bd35d177bbaeebedb9c37e6c4dbb38f340657bbff3196c121c7a2c1b5f977020506c3ccbf2d621d93d7ba2bacc11798255
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .ruby-version
11
+ .ruby-gemset
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in mailer_preview_request_model.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,116 @@
1
+ # MailerPreviewRequestModel
2
+
3
+ This gem will patch Rails untill I convince Rails team to merge [PR 20646](https://github.com/rails/rails/pull/20646),
4
+ that will enable Mailer Preview to pass params from Controller.
5
+
6
+ references:
7
+
8
+ * https://github.com/rails/rails/pull/20646
9
+ * https://github.com/rails/rails/pull/20608
10
+ * http://stackoverflow.com/questions/29129542/access-request-parameters-in-rails-4-1-mailer-preview
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'mailer_preview_request_model'
18
+ ```
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ ## Usage
25
+
26
+ By default you will have access to method `mailer_model` which is equal
27
+ to controller `params`
28
+
29
+
30
+ ```ruby
31
+ class MyMailerPreview < ActionMailer::Preview
32
+ def good_news
33
+ MyMailer.good_news(client)
34
+ end
35
+
36
+ private
37
+ def client
38
+ @client ||= Client.find(request_model.fetch(:client_id))
39
+ end
40
+ end
41
+ ```
42
+
43
+ `http://0.0.0.0:3000/rails/mailers/my_mailer?client_id=123`
44
+
45
+ But you can extend it to do more complex stuff (like authentication
46
+ objects) ... and teoretically you can have this on some Staging server
47
+ to preview email templates and stuff.
48
+
49
+ ```
50
+ # config/initializer/mailer_preview.rb
51
+
52
+ module OverrideRequestModel
53
+ def self.prepended(base)
54
+ base.before_action :authenticate!
55
+ end
56
+
57
+ def request_model
58
+ OpenStruct.new(user: current_user, client_id: params[:client_id])
59
+ end
60
+
61
+ def current_user
62
+ User.find session[:current_user_id]
63
+ end
64
+
65
+ def authenticate!
66
+ raise "not authenticated" unless current_user.admin?
67
+ end
68
+ end
69
+
70
+ Rails::MailersController.prepend OverrideRequestModel
71
+ ```
72
+
73
+ ```ruby
74
+ # app/mailer_previews/my_mailer_preview.rb
75
+ class MyMailerPreview < ActionMailer::Preview
76
+
77
+ def good_news
78
+ do_some_stuff_with_user_object
79
+ MyMailer.good_news(client)
80
+ end
81
+
82
+ private
83
+ def do_some_stuff_with_user_object
84
+ request_model.user.do_some_stuff
85
+ end
86
+
87
+ def client
88
+ Client.find(request_model.client_id)
89
+ end
90
+ end
91
+ ```
92
+
93
+ `http://0.0.0.0:3000/rails/mailers/my_mailer/good_news?user_id:123&client_id:345`
94
+
95
+ ## Contributing
96
+
97
+ 1. Fork it ( https://github.com/[my-github-username]/mailer_preview_request_model/fork )
98
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
99
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
100
+ 4. Push to the branch (`git push origin my-new-feature`)
101
+ 5. Create a new Pull Request
102
+
103
+ ### Abount the code
104
+
105
+ The original code of Mailer Preview is composed of long methods with too
106
+ much responsibilities. In order to make this patch work I needed to copy
107
+ relativly large chunks of original code and extend the original with it
108
+ alteration.
109
+
110
+ ### Trobleshooting dev enviroment
111
+
112
+ * if Nokogiri fails to install make sure you have `zlib1g-dev` installed
113
+
114
+ ## Todo:
115
+
116
+ * ApplicationTests::MailerPreviewsTest
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'lib'
6
+ t.pattern = 'test/**/*_test.rb'
7
+ end
8
+
9
+ task default: :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "mailer_preview_request_model"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,66 @@
1
+ require "mailer_preview_request_model/version"
2
+
3
+ module MailerPreviewRequestModel
4
+ module PreviewWithRequestModel
5
+ def self.prepended(base)
6
+ base.send :attr_accessor, :request_model
7
+ end
8
+ end
9
+
10
+ module MailersControllerWithRequestModel
11
+ def preview
12
+ if params[:path] == @preview.preview_name
13
+ @page_title = "Mailer Previews for #{@preview.preview_name}"
14
+ render action: 'mailer'
15
+ else
16
+ email = File.basename(params[:path])
17
+
18
+ if @preview.email_exists?(email)
19
+ @email = @preview.call(email, request_model)
20
+
21
+ if params[:part]
22
+ part_type = Mime::Type.lookup(params[:part])
23
+
24
+ if part = find_part(part_type)
25
+ response.content_type = part_type
26
+ render text: part.respond_to?(:decoded) ? part.decoded : part
27
+ else
28
+ raise AbstractController::ActionNotFound, "Email part '#{part_type}' not found in #{@preview.name}##{email}"
29
+ end
30
+ else
31
+ @part = find_preferred_part(request.format, Mime::HTML, Mime::TEXT)
32
+ render action: 'email', layout: false, formats: %w[html]
33
+ end
34
+ else
35
+ raise AbstractController::ActionNotFound, "Email '#{email}' not found in #{@preview.name}"
36
+ end
37
+ end
38
+ end
39
+
40
+ protected
41
+
42
+ def request_model
43
+ params
44
+ end
45
+ end
46
+ end
47
+
48
+ ActionMailer::Preview.prepend MailerPreviewRequestModel::PreviewWithRequestModel
49
+ Rails::MailersController.prepend MailerPreviewRequestModel::MailersControllerWithRequestModel
50
+
51
+ # due to original code in Rails beeing not extendable I cannot do
52
+ # ActionMailer::Preview.extend MailerPreviewRequestModel::PreviewWithRequestModel::ClassMethods
53
+ # therefore I need to monkey patch the class method
54
+ module ActionMailer
55
+ class Preview
56
+ class << self
57
+ def call(email, request_model)
58
+ preview = self.new
59
+ preview.request_model = request_model
60
+ message = preview.public_send(email)
61
+ inform_preview_interceptors(message)
62
+ message
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,3 @@
1
+ module MailerPreviewRequestModel
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,34 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'mailer_preview_request_model/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "mailer_preview_request_model"
8
+ spec.version = MailerPreviewRequestModel::VERSION
9
+ spec.authors = ["Tomas Valent"]
10
+ spec.email = ["equivalent@eq8.eu"]
11
+
12
+ spec.summary = %q{Enable Rails ActionMailer Preview to accept argumeents}
13
+ spec.description = %q{gem to patch Rails untill PR 20646 https://github.com/rails/rails/pull/20646 is merged that will enable Mailer Preview to pass params}
14
+ spec.homepage = "https://github.com/equivalent/mailer_preview_request_model"
15
+
16
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
+ # delete this section to allow pushing this gem to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_dependency "railties", "~> 4.1"
30
+ spec.add_dependency "actionmailer", "~> 4.1"
31
+ spec.add_development_dependency "bundler", "~> 1.9"
32
+ spec.add_development_dependency "rake", "~> 10.0"
33
+ spec.add_development_dependency "minitest", "~> 5.8"
34
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mailer_preview_request_model
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tomas Valent
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-09-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: actionmailer
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.1'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.9'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.8'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.8'
83
+ description: gem to patch Rails untill PR 20646 https://github.com/rails/rails/pull/20646
84
+ is merged that will enable Mailer Preview to pass params
85
+ email:
86
+ - equivalent@eq8.eu
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rspec"
93
+ - ".travis.yml"
94
+ - Gemfile
95
+ - README.md
96
+ - Rakefile
97
+ - bin/console
98
+ - bin/setup
99
+ - lib/mailer_preview_request_model.rb
100
+ - lib/mailer_preview_request_model/version.rb
101
+ - mailer_preview_request_model.gemspec
102
+ homepage: https://github.com/equivalent/mailer_preview_request_model
103
+ licenses: []
104
+ metadata:
105
+ allowed_push_host: https://rubygems.org
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.4.6
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: Enable Rails ActionMailer Preview to accept argumeents
126
+ test_files: []