better_mailer_previews 0.2.30 → 1.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b69a7e6cf0bfd892b006a6cb3fbf95ac2fe67beb51882baca76310471e1f0e8
4
- data.tar.gz: 96e7341144c8b995f6036aff7daaf3a56b7a8864714b710b6bc7f111ff6fd65c
3
+ metadata.gz: 2023202e8ffad5fa3e2424ed4378230e037dff217325143ff3dc97e544a07533
4
+ data.tar.gz: 5c02e8e2d4a3a25cec4a882b0ed198ed58543771fbfc7e6617b9786796ba1292
5
5
  SHA512:
6
- metadata.gz: ac1acb09231a4bccc01de215200a2067b7a0c61be1b4408fac15458b7c1b5a0082bdf08821eeaff2067c5f45c6873fd296cf83b0235ce925140b89a55ada47a1
7
- data.tar.gz: 95d4a6a587d7b63f660d8a2a6c62267c126f6530445437d24d1d7b38654aaaf3dbc8eae242fb446370ddca18f998374868be5d1ee2f9695b07061191d19130bb
6
+ metadata.gz: a447a4c6f88f5e855531440de083b1dbe58d69da3b4f9eb8706c8bcc53539aca88dfd4b595d5307d02b9b656e686d93d2d741331be8368b2af9eec5d8135587c
7
+ data.tar.gz: a1ba2983470482ff3f75584cabd771a2c7850832275ea9faeb1893d96a73e56342f86ae9db11868f7c9e5a0d6a245bc16003cc73d6d0ca0f4f315f5a994ef6c9
data/README.md CHANGED
@@ -6,6 +6,7 @@ This gem/engine builds on top of native Rails mailer previews, with a few key en
6
6
 
7
7
  - **Shows _all_ your previews _live_ on the homepage**
8
8
  - **Easily resize individual mailers, for testing responsive layouts**
9
+ - **Forward your previews to an email address (uses the default ActionMailer delivery method for your app).**
9
10
  - **Fully compatible with, and can live alongside, native [Rails ActionMailer Previews](https://guides.rubyonrails.org/action_mailer_basics.html#previewing-emails)**
10
11
 
11
12
  Here's a little demo I've put together ↓
@@ -20,23 +20,25 @@ module BetterMailerPreviews
20
20
  end
21
21
 
22
22
  def show
23
- @mailer_name = params[:mailer_name]
23
+ @mailer_path = params[:mailer_path]
24
24
  @email_type = params[:email_type]
25
25
 
26
- @url_for_mailer = "/rails/mailers/#{@mailer_name}/#{@email_type}"
26
+ @url_for_mailer = "/rails/mailers/#{@mailer_path}/#{@email_type}"
27
27
  end
28
28
 
29
29
  def send_email
30
- # mailer_name: underscore_case of base mailer name | invoice_mailer
30
+ # mailer_path: underscore_case of base mailer path | test/invoice_mailer
31
31
  # email_type: string mailer method to call on class | "round"
32
32
  # email_address: string email address to send to | "test@t.com"
33
- mailer_name = params[:mailer_name]
33
+ mailer_path = params[:mailer_path]
34
34
  email_type = params[:email_type]
35
35
  email_address = params[:email_address]
36
36
 
37
37
  # Instantiate the preview class (ie: InvoiceMailerPreview),
38
38
  # then render it's preview html into a string.
39
- preview_class = mailer_name.concat("_preview").camelize.constantize
39
+ preview_class_string = mailer_path.split("/").map(&:camelize).join("::").concat("Preview")
40
+ preview_class = preview_class_string.constantize
41
+
40
42
  preview_method = email_type.to_sym
41
43
  mail = preview_class.new.public_send(preview_method).message
42
44
  html_content = mail.body.decoded
@@ -46,7 +48,7 @@ module BetterMailerPreviews
46
48
  content_type: "text/html",
47
49
  from: "better-mailer-previews@railsnotes.xyz",
48
50
  to: email_address,
49
- subject: "#{preview_class.to_s}.#{preview_method} (via BetterMailerPreviews)",
51
+ subject: "#{preview_class_string}.#{preview_method} (via BetterMailerPreviews)",
50
52
  body: html_content,
51
53
  ).deliver_now
52
54
 
@@ -1,4 +1,28 @@
1
1
  module BetterMailerPreviews
2
2
  module ApplicationHelper
3
+
4
+ # For generating mailer preview link names on mailers/index,
5
+ # including namespaced methods.
6
+ #
7
+ # input: "/rails/mailers/invoice_mailer/saas"
8
+ # output: "Preview InvoiceMailer.SaaS →"
9
+ #
10
+ def preview_text_for_url(url)
11
+ camelized = url.split("/")[3...].map { |element| element.camelize }
12
+ last_element = camelized.pop
13
+ pretty_mailer_preview_name = camelized.join("/") + "." + last_element
14
+
15
+ return "Preview #{pretty_mailer_preview_name} →"
16
+ end
17
+
18
+ # For generating mailer preview link paths on mailers/index
19
+ #
20
+ # input: "/rails/mailers/invoice_mailer/saas"
21
+ # output: /better_mailer_previews/invoice_mailer/basic
22
+ #
23
+ def preview_path_for_url(url)
24
+ mounted_engine_path = BetterMailerPreviews::Engine.routes.find_script_name({})
25
+ url.split("/")[3..].join("/").prepend("#{mounted_engine_path}/")
26
+ end
3
27
  end
4
28
  end
@@ -13,7 +13,7 @@
13
13
  <% urls.each do |url| %>
14
14
  <div class="flex flex-col space-y-4 wrap">
15
15
  <iframe src=<%= url %> frameborder="0" class="frame border border-gray-300" loading="lazy"></iframe>
16
- <%= link_to "Preview #{url.split('/')[-2...].map { |segment| segment.split('_').map(&:capitalize).join }.join('.')} →", url.split('/')[-2...].join('/').prepend("/better_mailer_previews/"), class: "!-mt-[400px] hover:underline" %>
16
+ <%= link_to preview_text_for_url(url), preview_path_for_url(url), class: "!-mt-[400px] hover:underline" %>
17
17
  </div>
18
18
  <% end %>
19
19
  </div>
@@ -1,7 +1,7 @@
1
1
  <div class="w-full flex justify-between items-end">
2
- <h1 class="text-5xl font-medium tracking-tighter"><%= @mailer_name.titleize %> — <%= @email_type.titleize %></h1>
2
+ <h1 class="text-5xl font-medium tracking-tighter"><%= @mailer_path.titleize %> — <%= @email_type.titleize %></h1>
3
3
  <div class="">
4
- <%= form_with url: send_mailer_email_path(mailer_name: @mailer_name, email_type: @email_type),
4
+ <%= form_with url: send_mailer_email_path(mailer_path: @mailer_path, email_type: @email_type),
5
5
  method: :post,
6
6
  local: true,
7
7
  class: "flex items-end gap-x-2" do |form| %>
@@ -22,7 +22,7 @@
22
22
  <div class="hidden sm:block shrink-0 mr-2 h-4 w-4 bg-gray-600 rounded-full"></div>
23
23
  <div class="hidden sm:block shrink-0 mr-2 h-4 w-4 bg-gray-600 rounded-full"></div>
24
24
  <div class="flex-grow flex items-center justify-center sm:ml-6 sm:mr-24 py-2 px-4 bg-gray-600 rounded-full leading-5 text-sm text-gray-200 text-center truncate">
25
- <div class="truncate"><span class="font-medium text-gray-100">Mailer Preview</span> — <%= "#{@mailer_name}/#{@email_type}" %></div>
25
+ <div class="truncate"><span class="font-medium text-gray-100">Mailer Preview</span> — <%= "#{@mailer_path}/#{@email_type}" %></div>
26
26
  </div>
27
27
  </div>
28
28
  <div class="bg-gray-950 px-2 rounded-b-lg pb-2">
data/config/routes.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  BetterMailerPreviews::Engine.routes.draw do
2
- root to: 'mailers#index'
2
+ root to: "mailers#index"
3
3
 
4
- get '/:mailer_name/:email_type', to: 'mailers#show', as: :mailer_preview
5
- post '/:mailer_name/:email_type/send', to: 'mailers#send_email', as: :send_mailer_email
4
+ # Wildcard routes to handle namespaced mailers
5
+ get "/*mailer_path/:email_type", to: "mailers#show", as: :mailer_preview
6
+ post "/*mailer_path/:email_type/send", to: "mailers#send_email", as: :send_mailer_email
6
7
  end
@@ -1,3 +1,3 @@
1
1
  module BetterMailerPreviews
2
- VERSION = "0.2.30"
2
+ VERSION = "1.0.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_mailer_previews
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.30
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harrison Broadbent
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-04 00:00:00.000000000 Z
11
+ date: 2023-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails