sincerely 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.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +38 -0
  4. data/CHANGELOG.md +12 -0
  5. data/README.md +202 -0
  6. data/Rakefile +12 -0
  7. data/app/controllers/sincerely/application_controller.rb +81 -0
  8. data/app/controllers/sincerely/dashboard_controller.rb +112 -0
  9. data/app/controllers/sincerely/delivery_events_controller.rb +31 -0
  10. data/app/controllers/sincerely/engagement_events_controller.rb +32 -0
  11. data/app/controllers/sincerely/notifications_controller.rb +69 -0
  12. data/app/controllers/sincerely/send_controller.rb +105 -0
  13. data/app/controllers/sincerely/templates_controller.rb +61 -0
  14. data/app/helpers/sincerely/application_helper.rb +39 -0
  15. data/app/views/layouts/sincerely/application.html.erb +593 -0
  16. data/app/views/sincerely/dashboard/index.html.erb +382 -0
  17. data/app/views/sincerely/delivery_events/index.html.erb +97 -0
  18. data/app/views/sincerely/engagement_events/index.html.erb +97 -0
  19. data/app/views/sincerely/notifications/index.html.erb +91 -0
  20. data/app/views/sincerely/notifications/show.html.erb +98 -0
  21. data/app/views/sincerely/send/new.html.erb +592 -0
  22. data/app/views/sincerely/shared/_pagination.html.erb +19 -0
  23. data/app/views/sincerely/templates/_form.html.erb +226 -0
  24. data/app/views/sincerely/templates/edit.html.erb +11 -0
  25. data/app/views/sincerely/templates/index.html.erb +59 -0
  26. data/app/views/sincerely/templates/new.html.erb +11 -0
  27. data/app/views/sincerely/templates/preview.html.erb +48 -0
  28. data/app/views/sincerely/templates/show.html.erb +69 -0
  29. data/config/routes.rb +21 -0
  30. data/lib/config/application_config.rb +18 -0
  31. data/lib/config/sincerely_config.rb +31 -0
  32. data/lib/generators/sincerely/aws_ses_webhook_controller_generator.rb +31 -0
  33. data/lib/generators/sincerely/events_generator.rb +45 -0
  34. data/lib/generators/sincerely/install_generator.rb +18 -0
  35. data/lib/generators/sincerely/migration_generator.rb +65 -0
  36. data/lib/generators/templates/aws_ses_webhook_controller.rb.erb +3 -0
  37. data/lib/generators/templates/events/delivery_event_model.rb.erb +5 -0
  38. data/lib/generators/templates/events/delivery_events_create.rb.erb +20 -0
  39. data/lib/generators/templates/events/engagement_event_model.rb.erb +5 -0
  40. data/lib/generators/templates/events/engagement_events_create.rb.erb +21 -0
  41. data/lib/generators/templates/notification_model.rb.erb +3 -0
  42. data/lib/generators/templates/notifications_create.rb.erb +21 -0
  43. data/lib/generators/templates/notifications_update.rb.erb +16 -0
  44. data/lib/generators/templates/sincerely.yml +21 -0
  45. data/lib/generators/templates/templates_create.rb.erb +15 -0
  46. data/lib/sincerely/delivery_systems/email_aws_ses.rb +69 -0
  47. data/lib/sincerely/engine.rb +7 -0
  48. data/lib/sincerely/mixins/notification_model.rb +94 -0
  49. data/lib/sincerely/mixins/webhooks/aws_ses_events.rb +74 -0
  50. data/lib/sincerely/renderers/liquid.rb +14 -0
  51. data/lib/sincerely/services/events/aws_ses_bounce_event.rb +26 -0
  52. data/lib/sincerely/services/events/aws_ses_click_event.rb +25 -0
  53. data/lib/sincerely/services/events/aws_ses_complaint_event.rb +25 -0
  54. data/lib/sincerely/services/events/aws_ses_delivery_event.rb +17 -0
  55. data/lib/sincerely/services/events/aws_ses_event.rb +56 -0
  56. data/lib/sincerely/services/events/aws_ses_open_event.rb +25 -0
  57. data/lib/sincerely/services/process_delivery_event.rb +72 -0
  58. data/lib/sincerely/templates/email_liquid_template.rb +13 -0
  59. data/lib/sincerely/templates/notification_template.rb +22 -0
  60. data/lib/sincerely/version.rb +5 -0
  61. data/lib/sincerely.rb +20 -0
  62. data/sincerely.gemspec +37 -0
  63. metadata +187 -0
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sincerely/renderers/liquid'
4
+
5
+ module Sincerely
6
+ module Templates
7
+ class NotificationTemplate < ::ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
8
+ self.table_name = 'notification_templates'
9
+
10
+ validates :name, presence: true
11
+
12
+ def render(content_type, options = {})
13
+ content = public_send("#{content_type}_content")
14
+ renderer.render(content, options&.stringify_keys)
15
+ end
16
+
17
+ def renderer
18
+ raise 'Method should be implemented in concrete class'
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sincerely
4
+ VERSION = '1.0.0'
5
+ end
data/lib/sincerely.rb ADDED
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'config/sincerely_config'
4
+ require_relative 'config/application_config'
5
+ require_relative 'generators/sincerely/install_generator'
6
+ require_relative 'generators/sincerely/migration_generator'
7
+ require_relative 'generators/sincerely/aws_ses_webhook_controller_generator'
8
+ require_relative 'generators/sincerely/events_generator'
9
+ require_relative 'sincerely/delivery_systems/email_aws_ses'
10
+ require_relative 'sincerely/mixins/notification_model'
11
+ require_relative 'sincerely/mixins/webhooks/aws_ses_events'
12
+ require_relative 'sincerely/services/events/aws_ses_event'
13
+ require_relative 'sincerely/services/events/aws_ses_bounce_event'
14
+ require_relative 'sincerely/services/events/aws_ses_delivery_event'
15
+ require_relative 'sincerely/services/events/aws_ses_click_event'
16
+ require_relative 'sincerely/services/events/aws_ses_complaint_event'
17
+ require_relative 'sincerely/services/events/aws_ses_open_event'
18
+ require_relative 'sincerely/templates/email_liquid_template'
19
+ require_relative 'sincerely/version'
20
+ require_relative 'sincerely/engine' if defined?(Rails)
data/sincerely.gemspec ADDED
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/sincerely/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'sincerely'
7
+ spec.version = Sincerely::VERSION
8
+ spec.authors = ['100 Starlings']
9
+ spec.email = ['rubyblok@100starlings.com']
10
+
11
+ spec.summary = 'Notifications'
12
+ spec.homepage = 'http://www.rubyblok.com'
13
+ spec.license = 'MIT'
14
+ spec.required_ruby_version = '>= 3.1.0'
15
+
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/100Starlings/sincerely'
18
+
19
+ spec.files = Dir.chdir(__dir__) do
20
+ `git ls-files -z`.split("\x0").reject do |f|
21
+ (File.expand_path(f) == __FILE__) ||
22
+ f.start_with?(*%w[bin/ test/ spec/ features/ .git .circleci appveyor Gemfile])
23
+ end
24
+ end
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_dependency 'aasm', '~> 5.3'
30
+ spec.add_dependency 'anyway_config', '~> 2.6'
31
+ spec.add_dependency 'aws-sdk-sesv2', '~> 1.54'
32
+ spec.add_dependency 'aws-sdk-sns', '~> 1.82'
33
+ spec.add_dependency 'liquid', '~> 5.5'
34
+ spec.add_dependency 'railties', '>= 6'
35
+
36
+ spec.metadata['rubygems_mfa_required'] = 'true'
37
+ end
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sincerely
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - 100 Starlings
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2026-03-31 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: aasm
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '5.3'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '5.3'
26
+ - !ruby/object:Gem::Dependency
27
+ name: anyway_config
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.6'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.6'
40
+ - !ruby/object:Gem::Dependency
41
+ name: aws-sdk-sesv2
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '1.54'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.54'
54
+ - !ruby/object:Gem::Dependency
55
+ name: aws-sdk-sns
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.82'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.82'
68
+ - !ruby/object:Gem::Dependency
69
+ name: liquid
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '5.5'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '5.5'
82
+ - !ruby/object:Gem::Dependency
83
+ name: railties
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '6'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '6'
96
+ email:
97
+ - rubyblok@100starlings.com
98
+ executables: []
99
+ extensions: []
100
+ extra_rdoc_files: []
101
+ files:
102
+ - ".rspec"
103
+ - ".rubocop.yml"
104
+ - CHANGELOG.md
105
+ - README.md
106
+ - Rakefile
107
+ - app/controllers/sincerely/application_controller.rb
108
+ - app/controllers/sincerely/dashboard_controller.rb
109
+ - app/controllers/sincerely/delivery_events_controller.rb
110
+ - app/controllers/sincerely/engagement_events_controller.rb
111
+ - app/controllers/sincerely/notifications_controller.rb
112
+ - app/controllers/sincerely/send_controller.rb
113
+ - app/controllers/sincerely/templates_controller.rb
114
+ - app/helpers/sincerely/application_helper.rb
115
+ - app/views/layouts/sincerely/application.html.erb
116
+ - app/views/sincerely/dashboard/index.html.erb
117
+ - app/views/sincerely/delivery_events/index.html.erb
118
+ - app/views/sincerely/engagement_events/index.html.erb
119
+ - app/views/sincerely/notifications/index.html.erb
120
+ - app/views/sincerely/notifications/show.html.erb
121
+ - app/views/sincerely/send/new.html.erb
122
+ - app/views/sincerely/shared/_pagination.html.erb
123
+ - app/views/sincerely/templates/_form.html.erb
124
+ - app/views/sincerely/templates/edit.html.erb
125
+ - app/views/sincerely/templates/index.html.erb
126
+ - app/views/sincerely/templates/new.html.erb
127
+ - app/views/sincerely/templates/preview.html.erb
128
+ - app/views/sincerely/templates/show.html.erb
129
+ - config/routes.rb
130
+ - lib/config/application_config.rb
131
+ - lib/config/sincerely_config.rb
132
+ - lib/generators/sincerely/aws_ses_webhook_controller_generator.rb
133
+ - lib/generators/sincerely/events_generator.rb
134
+ - lib/generators/sincerely/install_generator.rb
135
+ - lib/generators/sincerely/migration_generator.rb
136
+ - lib/generators/templates/aws_ses_webhook_controller.rb.erb
137
+ - lib/generators/templates/events/delivery_event_model.rb.erb
138
+ - lib/generators/templates/events/delivery_events_create.rb.erb
139
+ - lib/generators/templates/events/engagement_event_model.rb.erb
140
+ - lib/generators/templates/events/engagement_events_create.rb.erb
141
+ - lib/generators/templates/notification_model.rb.erb
142
+ - lib/generators/templates/notifications_create.rb.erb
143
+ - lib/generators/templates/notifications_update.rb.erb
144
+ - lib/generators/templates/sincerely.yml
145
+ - lib/generators/templates/templates_create.rb.erb
146
+ - lib/sincerely.rb
147
+ - lib/sincerely/delivery_systems/email_aws_ses.rb
148
+ - lib/sincerely/engine.rb
149
+ - lib/sincerely/mixins/notification_model.rb
150
+ - lib/sincerely/mixins/webhooks/aws_ses_events.rb
151
+ - lib/sincerely/renderers/liquid.rb
152
+ - lib/sincerely/services/events/aws_ses_bounce_event.rb
153
+ - lib/sincerely/services/events/aws_ses_click_event.rb
154
+ - lib/sincerely/services/events/aws_ses_complaint_event.rb
155
+ - lib/sincerely/services/events/aws_ses_delivery_event.rb
156
+ - lib/sincerely/services/events/aws_ses_event.rb
157
+ - lib/sincerely/services/events/aws_ses_open_event.rb
158
+ - lib/sincerely/services/process_delivery_event.rb
159
+ - lib/sincerely/templates/email_liquid_template.rb
160
+ - lib/sincerely/templates/notification_template.rb
161
+ - lib/sincerely/version.rb
162
+ - sincerely.gemspec
163
+ homepage: http://www.rubyblok.com
164
+ licenses:
165
+ - MIT
166
+ metadata:
167
+ homepage_uri: http://www.rubyblok.com
168
+ source_code_uri: https://github.com/100Starlings/sincerely
169
+ rubygems_mfa_required: 'true'
170
+ rdoc_options: []
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: 3.1.0
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ requirements: []
184
+ rubygems_version: 3.6.2
185
+ specification_version: 4
186
+ summary: Notifications
187
+ test_files: []