react-email-rails 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.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/CONTRIBUTING.md +68 -0
  4. data/LICENSE.md +21 -0
  5. data/README.md +492 -0
  6. data/SECURITY.md +5 -0
  7. data/lib/generators/react_email_rails/USAGE +19 -0
  8. data/lib/generators/react_email_rails/email_generator.rb +224 -0
  9. data/lib/generators/react_email_rails/install_generator.rb +211 -0
  10. data/lib/generators/react_email_rails/templates/USAGE +33 -0
  11. data/lib/generators/react_email_rails/templates/email/application_mailer.rb.tt +5 -0
  12. data/lib/generators/react_email_rails/templates/email/component.tsx +14 -0
  13. data/lib/generators/react_email_rails/templates/email/mailer.rb.tt +17 -0
  14. data/lib/generators/react_email_rails/templates/email/mailer_preview.rb.tt +14 -0
  15. data/lib/generators/react_email_rails/templates/email/mailer_test.rb.tt +28 -0
  16. data/lib/generators/react_email_rails/templates/initializer.rb +3 -0
  17. data/lib/generators/react_email_rails/templates/vite.config.ts +6 -0
  18. data/lib/react-email-rails.rb +1 -0
  19. data/lib/react_email_rails/action_mailer.rb +31 -0
  20. data/lib/react_email_rails/configuration.rb +145 -0
  21. data/lib/react_email_rails/props_resolver.rb +48 -0
  22. data/lib/react_email_rails/railtie.rb +16 -0
  23. data/lib/react_email_rails/render_error.rb +1 -0
  24. data/lib/react_email_rails/render_modes/persistent/command_runner.rb +44 -0
  25. data/lib/react_email_rails/render_modes/persistent/server.rb +204 -0
  26. data/lib/react_email_rails/render_modes/persistent.rb +28 -0
  27. data/lib/react_email_rails/render_modes/subprocess/command_runner.rb +56 -0
  28. data/lib/react_email_rails/render_modes/subprocess.rb +99 -0
  29. data/lib/react_email_rails/render_modes.rb +1 -0
  30. data/lib/react_email_rails/render_protocol.rb +21 -0
  31. data/lib/react_email_rails/rendered_email.rb +3 -0
  32. data/lib/react_email_rails/version.rb +3 -0
  33. data/lib/react_email_rails.rb +58 -0
  34. metadata +194 -0
@@ -0,0 +1,58 @@
1
+ require("json")
2
+ require("open3")
3
+ require("timeout")
4
+ require("active_support/concern")
5
+ require("active_support/notifications")
6
+ require("active_support/core_ext/object/blank")
7
+ require("active_support/core_ext/object/json")
8
+ require("active_support/inflector")
9
+ require("rails/railtie")
10
+
11
+ module ReactEmailRails; end
12
+
13
+ require_relative("react_email_rails/version")
14
+ require_relative("react_email_rails/render_protocol")
15
+ require_relative("react_email_rails/action_mailer")
16
+ require_relative("react_email_rails/render_error")
17
+ require_relative("react_email_rails/rendered_email")
18
+ require_relative("react_email_rails/render_modes")
19
+ require_relative("react_email_rails/render_modes/subprocess")
20
+ require_relative("react_email_rails/render_modes/subprocess/command_runner")
21
+ require_relative("react_email_rails/render_modes/persistent")
22
+ require_relative("react_email_rails/render_modes/persistent/server")
23
+ require_relative("react_email_rails/render_modes/persistent/command_runner")
24
+ require_relative("react_email_rails/configuration")
25
+ require_relative("react_email_rails/props_resolver")
26
+ require_relative("react_email_rails/railtie")
27
+
28
+ module ReactEmailRails
29
+ class << self
30
+ def configuration
31
+ @configuration ||= Configuration.default
32
+ end
33
+
34
+ def configure
35
+ yield(configuration)
36
+ end
37
+
38
+ def render(component:, props:, render_options: configuration.resolve_render_options)
39
+ ActiveSupport::Notifications.instrument("render.react-email-rails", component:) do |payload|
40
+ configuration.resolved_render_mode.new(component:, props:, render_options:).render.tap do |rendered|
41
+ payload[:html_bytes] = rendered.html.bytesize
42
+ end
43
+ end
44
+ rescue ReactEmailRails::RenderError => e
45
+ configuration.on_render_error&.call(e, component:)
46
+ raise
47
+ end
48
+
49
+ def healthy?
50
+ configuration.resolved_render_mode.healthy?(
51
+ command: configuration.send(:resolved_render_command),
52
+ timeout: configuration.render_timeout,
53
+ )
54
+ rescue StandardError
55
+ false
56
+ end
57
+ end
58
+ end
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: react-email-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Supertape
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: actionmailer
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '7.1'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '9.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '7.1'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '9.0'
32
+ - !ruby/object:Gem::Dependency
33
+ name: activesupport
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '7.1'
39
+ - - "<"
40
+ - !ruby/object:Gem::Version
41
+ version: '9.0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '7.1'
49
+ - - "<"
50
+ - !ruby/object:Gem::Version
51
+ version: '9.0'
52
+ - !ruby/object:Gem::Dependency
53
+ name: railties
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '7.1'
59
+ - - "<"
60
+ - !ruby/object:Gem::Version
61
+ version: '9.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '7.1'
69
+ - - "<"
70
+ - !ruby/object:Gem::Version
71
+ version: '9.0'
72
+ - !ruby/object:Gem::Dependency
73
+ name: rubocop-minitest
74
+ requirement: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ - !ruby/object:Gem::Dependency
87
+ name: rubocop-performance
88
+ requirement: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ - !ruby/object:Gem::Dependency
101
+ name: rubocop-rails
102
+ requirement: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ - !ruby/object:Gem::Dependency
115
+ name: rubocop-shopify
116
+ requirement: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ description: Seamless integration between Action Mailer and React Email components.
129
+ email:
130
+ - hi@supertape.com
131
+ executables: []
132
+ extensions: []
133
+ extra_rdoc_files: []
134
+ files:
135
+ - CHANGELOG.md
136
+ - CONTRIBUTING.md
137
+ - LICENSE.md
138
+ - README.md
139
+ - SECURITY.md
140
+ - lib/generators/react_email_rails/USAGE
141
+ - lib/generators/react_email_rails/email_generator.rb
142
+ - lib/generators/react_email_rails/install_generator.rb
143
+ - lib/generators/react_email_rails/templates/USAGE
144
+ - lib/generators/react_email_rails/templates/email/application_mailer.rb.tt
145
+ - lib/generators/react_email_rails/templates/email/component.tsx
146
+ - lib/generators/react_email_rails/templates/email/mailer.rb.tt
147
+ - lib/generators/react_email_rails/templates/email/mailer_preview.rb.tt
148
+ - lib/generators/react_email_rails/templates/email/mailer_test.rb.tt
149
+ - lib/generators/react_email_rails/templates/initializer.rb
150
+ - lib/generators/react_email_rails/templates/vite.config.ts
151
+ - lib/react-email-rails.rb
152
+ - lib/react_email_rails.rb
153
+ - lib/react_email_rails/action_mailer.rb
154
+ - lib/react_email_rails/configuration.rb
155
+ - lib/react_email_rails/props_resolver.rb
156
+ - lib/react_email_rails/railtie.rb
157
+ - lib/react_email_rails/render_error.rb
158
+ - lib/react_email_rails/render_modes.rb
159
+ - lib/react_email_rails/render_modes/persistent.rb
160
+ - lib/react_email_rails/render_modes/persistent/command_runner.rb
161
+ - lib/react_email_rails/render_modes/persistent/server.rb
162
+ - lib/react_email_rails/render_modes/subprocess.rb
163
+ - lib/react_email_rails/render_modes/subprocess/command_runner.rb
164
+ - lib/react_email_rails/render_protocol.rb
165
+ - lib/react_email_rails/rendered_email.rb
166
+ - lib/react_email_rails/version.rb
167
+ homepage: https://github.com/heysupertape/react-email-rails
168
+ licenses:
169
+ - MIT
170
+ metadata:
171
+ bug_tracker_uri: https://github.com/heysupertape/react-email-rails/issues
172
+ changelog_uri: https://github.com/heysupertape/react-email-rails/blob/main/CHANGELOG.md
173
+ documentation_uri: https://github.com/heysupertape/react-email-rails/blob/main/README.md
174
+ homepage_uri: https://github.com/heysupertape/react-email-rails
175
+ source_code_uri: https://github.com/heysupertape/react-email-rails
176
+ rubygems_mfa_required: 'true'
177
+ rdoc_options: []
178
+ require_paths:
179
+ - lib
180
+ required_ruby_version: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ version: '3.3'
185
+ required_rubygems_version: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ requirements: []
191
+ rubygems_version: 3.6.9
192
+ specification_version: 4
193
+ summary: Build and send emails using React and Rails
194
+ test_files: []