action_mailer_auto_previews 0.1.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 +7 -0
- data/.yardoc/checksums +2 -0
- data/.yardoc/object_types +0 -0
- data/.yardoc/objects/root.dat +0 -0
- data/.yardoc/proxy_types +0 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +51 -0
- data/Rakefile +6 -0
- data/action_mailer_auto_previews.gemspec +39 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/action_mailer_auto_previews.rb +107 -0
- data/lib/action_mailer_auto_previews/version.rb +4 -0
- metadata +141 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 52bad65f9a1b0bca6857aa3b2dbb75f0c3395394
|
4
|
+
data.tar.gz: c9965341bf8952cdeb4790dc6531489d683bb048
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7c284d8ff304d7b77e9c463b84c171674f3933661ba9baf73412545303feec2919624f344f3deab9b2376f324ac9a77dd2fb535dbe4ceca83f0d6f655c5396cb
|
7
|
+
data.tar.gz: 312c392ea209c157da007b6589c5e43ba884080cac51ff34f59a02cb82e85ccbedd899f6808d749584652413382f98cc34e0a286d15d7cdfec897d5ed4729bf4
|
data/.yardoc/checksums
ADDED
Binary file
|
Binary file
|
data/.yardoc/proxy_types
ADDED
Binary file
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2016 Matthew B. Jones
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
# ActionMailerAutoPreviews
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/action_mailer_auto_previews`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile :development group:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
group :development do
|
13
|
+
gem 'action_mailer_auto_previews'
|
14
|
+
end
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install action_mailer_auto_previews
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
That's it! Simply include the gem in your Gemfile's :development group, and by default, you will be able to automatically see previews of your ActionMailer emails. Whenever `deliver` or `deliver_later`
|
28
|
+
is called on one of your ActionMailers, the gem will automatically generate the ActionMailer::Preview required and open the preview in your default browser. However, there are several configuration options
|
29
|
+
that can be used to alter this behavior.
|
30
|
+
|
31
|
+
## Configuration Options
|
32
|
+
```ruby
|
33
|
+
ActionMailerAutoPreviews.setup do |config|
|
34
|
+
config.enabled = true
|
35
|
+
config.history_limit = 10
|
36
|
+
config.intercept_mode = :preview_only # [:preview_only, :preview_and_deliver]
|
37
|
+
config.launch_browser = true
|
38
|
+
config.logger = Rails.logger
|
39
|
+
config.preview_host_url = "http://localhost:3000"
|
40
|
+
end
|
41
|
+
```
|
42
|
+
|
43
|
+
## Contributing
|
44
|
+
|
45
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/makifund/action_mailer_auto_previews.
|
46
|
+
|
47
|
+
|
48
|
+
## License
|
49
|
+
|
50
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
51
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'action_mailer_auto_previews/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "action_mailer_auto_previews"
|
8
|
+
spec.version = ActionMailerAutoPreviews::VERSION
|
9
|
+
spec.authors = ["Matthew B. Jones", "Andrew Yi"]
|
10
|
+
spec.email = ["matt@makifund.com", "andrew@makifund.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{
|
13
|
+
Enhances the ActionMailer Previews introduced in 4.1 by automatically creating ActionMailer Previews at runtime in development mode.
|
14
|
+
}
|
15
|
+
spec.description = %q{
|
16
|
+
Enhances the ActionMailer Previews introduced in 4.1 by automatically creating ActionMailer Previews at runtime in development mode.
|
17
|
+
See automatic previews of your ActionMailer emails, with no extra effort or mock data. Install the action_mailer_auto_previews gem
|
18
|
+
into your :development group, and it'll 'just work' with sensible defaults. Each ActionMailer email object that has .deliver or
|
19
|
+
.deliver_later called will automatically launch your default browser right to a ActionMailer Preview page with the real data
|
20
|
+
passed to that email. Flexible options allow you to alter this behavior as well.
|
21
|
+
|
22
|
+
Warning: Since this is dynamically creating Ruby classes/methods, you will want to make sure your web-server is single threaded.
|
23
|
+
For example, if you're using Puma, be sure to set the `workers` configuration parameter to 1.
|
24
|
+
}
|
25
|
+
spec.homepage = "https://github.com/makifund/action_mailer_auto_previews"
|
26
|
+
spec.license = "MIT"
|
27
|
+
|
28
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
29
|
+
spec.bindir = "exe"
|
30
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
|
33
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
34
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
35
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
36
|
+
|
37
|
+
spec.add_dependency "actionmailer", "~> 4.1"
|
38
|
+
spec.add_dependency "launchy", "~> 2.4.3"
|
39
|
+
end
|
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "action_mailer_auto_previews"
|
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,107 @@
|
|
1
|
+
require "action_mailer_auto_previews/version"
|
2
|
+
require "launchy"
|
3
|
+
|
4
|
+
# This gem uses sensible defaults, but can be altered as follows:
|
5
|
+
# @example
|
6
|
+
# ActionMailerAutoPreviews.setup do |config|
|
7
|
+
# config.enabled = true
|
8
|
+
# config.history_limit = 10
|
9
|
+
# config.intercept_mode = :preview_only
|
10
|
+
# config.launch_browser = true
|
11
|
+
# config.logger = Rails.logger
|
12
|
+
# config.preview_host_url = "http://localhost:3000"
|
13
|
+
# end
|
14
|
+
module ActionMailerAutoPreviews
|
15
|
+
# This is a cache that holds onto the Mail objects for viewing via the ActionMailer::Preview web pages. This
|
16
|
+
# cache will grow up the max capacity defined in the :history_limit attribute.
|
17
|
+
MAIL_CACHE = {}
|
18
|
+
|
19
|
+
mattr_accessor :enabled
|
20
|
+
# Whether or not this gem and its functionality should be enabled
|
21
|
+
@@enabled = Rails.env.development?
|
22
|
+
|
23
|
+
mattr_accessor :history_limit
|
24
|
+
# The maximum number of emails to keep around in MAIL_CACHE
|
25
|
+
@@history_limit = 25
|
26
|
+
|
27
|
+
mattr_accessor :intercept_mode
|
28
|
+
# Whether to generate the Preview only (:preview_only), or, to generate the Preview and also do the default Mailer behavior
|
29
|
+
@@intercept_mode = :preview_only
|
30
|
+
|
31
|
+
mattr_accessor :launch_browser
|
32
|
+
# Automatically launch the Preview in the default browser, otherwise, logs the new Preview URL to the logger
|
33
|
+
@@launch_browser = true
|
34
|
+
|
35
|
+
mattr_accessor :logger
|
36
|
+
# Logger to be used. When nil (default), will use Rails.logger if Rails is present, otherwise, defaults to Logger.new(STDOUT)
|
37
|
+
@@logger = nil
|
38
|
+
|
39
|
+
mattr_accessor :preview_host_url
|
40
|
+
# Base URL that is used for the Preview URLs. This should be set to the hostname and port of your development server.
|
41
|
+
@@preview_host_url = "http://localhost:3000"
|
42
|
+
|
43
|
+
# Call with a block to override one or more of the default configuration options.
|
44
|
+
# @example
|
45
|
+
# ActionMailerAutoPreviews.setup do |config|
|
46
|
+
# config.launch_browser = false
|
47
|
+
# config.history_limit = 10
|
48
|
+
# end
|
49
|
+
def self.setup
|
50
|
+
yield self
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
# Logic to return the appropriate logger to be used by this gem
|
55
|
+
def self.logger
|
56
|
+
@@logger ||= Object.const_defined?('Rails') ? Rails.logger : Logger.new(STDOUT)
|
57
|
+
end
|
58
|
+
|
59
|
+
# This method is the magic sauce of what we're trying to achieve. It is called via the patch on ActionMailer::MessageDelivery
|
60
|
+
def self.auto_preview(message_delivery)
|
61
|
+
# Generate a unique preview key
|
62
|
+
preview_key = "preview_#{Time.now.to_i}#{rand(1000)}"
|
63
|
+
|
64
|
+
# Store the message object that contains the data for the preview
|
65
|
+
ActionMailerAutoPreviews::MAIL_CACHE[preview_key] = message_delivery
|
66
|
+
|
67
|
+
# Dynamically add a ActionMailer::Preview method, named after `preview_key`
|
68
|
+
eval %Q(
|
69
|
+
class ActionMailerAutoPreviews::AutomaticPreviewMailer < ActionMailer::Preview
|
70
|
+
define_method("#{preview_key}") do
|
71
|
+
ActionMailerAutoPreviews::MAIL_CACHE["#{preview_key}"]
|
72
|
+
end
|
73
|
+
end
|
74
|
+
)
|
75
|
+
|
76
|
+
# Launch the default browser to the newly-available ActionMailer::Preview
|
77
|
+
preview_url = "#{ActionMailerAutoPreviews.preview_host_url}/rails/mailers/action_mailer_auto_previews/automatic_preview_mailer/#{preview_key}"
|
78
|
+
ActionMailerAutoPreviews.launch_browser ? Launchy.open(preview_url) : ActionMailerAutoPreviews.logger.info("New ActionMailer::Preview available at #{preview_url}")
|
79
|
+
|
80
|
+
# Clean up the cache if the number of generated previews now exceeds `history_limit`
|
81
|
+
if ActionMailerAutoPreviews::MAIL_CACHE.count > ActionMailerAutoPreviews.history_limit
|
82
|
+
preview_key_to_purge = ActionMailerAutoPreviews::MAIL_CACHE.keys.first # Get the oldest preview_key
|
83
|
+
ActionMailerAutoPreviews::MAIL_CACHE.delete preview_key_to_purge # Delete the reference to the mail object
|
84
|
+
eval %Q(
|
85
|
+
class ActionMailerAutoPreviews::AutomaticPreviewMailer < ActionMailer::Preview
|
86
|
+
remove_method("#{preview_key_to_purge}")
|
87
|
+
end
|
88
|
+
) # Removes the ActionMailer::Preview method, so the Preview is no longer available and the old URL will stop functioning
|
89
|
+
ActionMailerAutoPreviews.logger.info("ActionMailer::Preview #{preview_key_to_purge} has been purged, history buffer is full")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Check to see if we should be enabled or not, and if so, patch into ActionMailer
|
94
|
+
if ActionMailerAutoPreviews.enabled
|
95
|
+
class ActionMailer::MessageDelivery
|
96
|
+
def deliver(options={})
|
97
|
+
ActionMailerAutoPreviews.auto_preview(self)
|
98
|
+
super(options) if ActionMailerAutoPreviews.intercept_mode == :preview_and_deliver
|
99
|
+
end
|
100
|
+
|
101
|
+
def deliver_later(options={})
|
102
|
+
ActionMailerAutoPreviews.auto_preview(self)
|
103
|
+
super(options) if ActionMailerAutoPreviews.intercept_mode == :preview_and_deliver
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: action_mailer_auto_previews
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matthew B. Jones
|
8
|
+
- Andrew Yi
|
9
|
+
autorequire:
|
10
|
+
bindir: exe
|
11
|
+
cert_chain: []
|
12
|
+
date: 2016-04-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.11'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.11'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '10.0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '10.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '3.0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '3.0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: actionmailer
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '4.1'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '4.1'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: launchy
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - "~>"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 2.4.3
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.4.3
|
84
|
+
description: "\n Enhances the ActionMailer Previews introduced in 4.1 by automatically
|
85
|
+
creating ActionMailer Previews at runtime in development mode.\n See automatic
|
86
|
+
previews of your ActionMailer emails, with no extra effort or mock data. Install
|
87
|
+
the action_mailer_auto_previews gem\n into your :development group, and it'll
|
88
|
+
'just work' with sensible defaults. Each ActionMailer email object that has .deliver
|
89
|
+
or\n .deliver_later called will automatically launch your default browser right
|
90
|
+
to a ActionMailer Preview page with the real data\n passed to that email. Flexible
|
91
|
+
options allow you to alter this behavior as well.\n\n Warning: Since this is
|
92
|
+
dynamically creating Ruby classes/methods, you will want to make sure your web-server
|
93
|
+
is single threaded.\n For example, if you're using Puma, be sure to set the `workers`
|
94
|
+
configuration parameter to 1.\n "
|
95
|
+
email:
|
96
|
+
- matt@makifund.com
|
97
|
+
- andrew@makifund.com
|
98
|
+
executables: []
|
99
|
+
extensions: []
|
100
|
+
extra_rdoc_files: []
|
101
|
+
files:
|
102
|
+
- ".yardoc/checksums"
|
103
|
+
- ".yardoc/object_types"
|
104
|
+
- ".yardoc/objects/root.dat"
|
105
|
+
- ".yardoc/proxy_types"
|
106
|
+
- Gemfile
|
107
|
+
- LICENSE.txt
|
108
|
+
- README.md
|
109
|
+
- Rakefile
|
110
|
+
- action_mailer_auto_previews.gemspec
|
111
|
+
- bin/console
|
112
|
+
- bin/setup
|
113
|
+
- lib/action_mailer_auto_previews.rb
|
114
|
+
- lib/action_mailer_auto_previews/version.rb
|
115
|
+
homepage: https://github.com/makifund/action_mailer_auto_previews
|
116
|
+
licenses:
|
117
|
+
- MIT
|
118
|
+
metadata: {}
|
119
|
+
post_install_message:
|
120
|
+
rdoc_options: []
|
121
|
+
require_paths:
|
122
|
+
- lib
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: '0'
|
133
|
+
requirements: []
|
134
|
+
rubyforge_project:
|
135
|
+
rubygems_version: 2.4.5.1
|
136
|
+
signing_key:
|
137
|
+
specification_version: 4
|
138
|
+
summary: Enhances the ActionMailer Previews introduced in 4.1 by automatically creating
|
139
|
+
ActionMailer Previews at runtime in development mode.
|
140
|
+
test_files: []
|
141
|
+
has_rdoc:
|