nuntius 1.2.3 → 1.3.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 +4 -4
- data/app/assets/stylesheets/nuntius/application.css +0 -0
- data/app/helpers/nuntius/application_helper.rb +6 -6
- data/app/models/nuntius/list.rb +1 -1
- data/app/models/nuntius/subscriber.rb +1 -1
- data/app/tables/nuntius/application_table.rb +4 -0
- data/app/tables/nuntius/campaigns_table.rb +42 -0
- data/app/tables/nuntius/layouts_table.rb +34 -0
- data/app/tables/nuntius/lists_table.rb +31 -0
- data/app/tables/nuntius/locales_table.rb +28 -0
- data/app/tables/nuntius/messages_table.rb +60 -0
- data/app/tables/nuntius/subscribers_table.rb +66 -0
- data/app/tables/nuntius/templates_table.rb +58 -0
- data/app/views/nuntius/admin/campaigns/index.html.slim +1 -1
- data/app/views/nuntius/admin/layouts/edit.html.slim +3 -2
- data/app/views/nuntius/admin/layouts/index.html.slim +1 -1
- data/app/views/nuntius/admin/lists/edit.html.slim +3 -2
- data/app/views/nuntius/admin/lists/index.html.slim +1 -1
- data/app/views/nuntius/admin/locales/index.html.slim +1 -1
- data/app/views/nuntius/admin/messages/index.html.slim +1 -1
- data/app/views/nuntius/admin/templates/edit.html.slim +4 -3
- data/app/views/nuntius/admin/templates/index.html.slim +2 -2
- data/config/locales/en.yml +18 -3
- data/config/locales/nl.yml +120 -9
- data/lib/generators/nuntius/install_generator.rb +24 -0
- data/lib/generators/nuntius/tailwind_config_generator.rb +24 -0
- data/lib/generators/nuntius/templates/config/initializers/nuntius.rb +31 -0
- data/lib/nuntius/configuration.rb +3 -2
- data/lib/nuntius/version.rb +1 -1
- data/lib/nuntius.rb +1 -0
- data/lib/tasks/nuntius_tasks.rake +9 -23
- metadata +14 -9
- data/app/tables/nuntius_campaigns_table.rb +0 -30
- data/app/tables/nuntius_layouts_table.rb +0 -24
- data/app/tables/nuntius_lists_table.rb +0 -19
- data/app/tables/nuntius_locales_table.rb +0 -18
- data/app/tables/nuntius_messages_table.rb +0 -36
- data/app/tables/nuntius_subscribers_table.rb +0 -20
- data/app/tables/nuntius_templates_table.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e22c05a90ed9f7b363331c76056b422d2f882e3b142c049fd40df4f1b785d356
|
4
|
+
data.tar.gz: de086dc62c3df2e6e72f810bb7643f77714bb64e282e21b001d128c2b4558d5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a62bd99e311602b4201548da92b3f721275534a9982e5b5fa76d9a2650b269a928d7ab628bb06bc658d0c781106ffd92ff94345fa711f0391c62987a5a5d153a
|
7
|
+
data.tar.gz: 0d547a914d5669b4016733d7da974b6deb6dd9c19ecd6f6381b75e75e0aee257dfd09fc68e61b63b4611a748bcd459e34917cf0be34020457ce2edd83bc2b0c2
|
File without changes
|
@@ -14,38 +14,38 @@ module Nuntius
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def nuntius_templates_menu
|
17
|
-
Satis::Menus::Builder.build(:templates) do |m|
|
17
|
+
Satis::Menus::Builder.build([:nuntius, :templates]) do |m|
|
18
18
|
m.item :new, link: nuntius.new_admin_template_path
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
def nuntius_layouts_menu
|
23
|
-
Satis::Menus::Builder.build(:layouts) do |m|
|
23
|
+
Satis::Menus::Builder.build([:nuntius, :layouts]) do |m|
|
24
24
|
m.item :new, link: nuntius.new_admin_layout_path
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
def nuntius_locales_menu
|
29
|
-
Satis::Menus::Builder.build(:locales) do |m|
|
29
|
+
Satis::Menus::Builder.build([:nuntius, :locales]) do |m|
|
30
30
|
m.item :new, link: nuntius.new_admin_locale_path
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
def nuntius_campaigns_menu
|
35
|
-
Satis::Menus::Builder.build(:
|
35
|
+
Satis::Menus::Builder.build([:nuntius, :campaigns]) do |m|
|
36
36
|
m.item :new, link: nuntius.new_admin_campaign_path
|
37
37
|
m.item :lists, link: nuntius.admin_lists_path
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
def nuntius_lists_menu
|
42
|
-
Satis::Menus::Builder.build(:lists) do |m|
|
42
|
+
Satis::Menus::Builder.build([:nuntius, :lists]) do |m|
|
43
43
|
m.item :new, link: nuntius.new_admin_list_path
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
def nuntius_list_menu
|
48
|
-
Satis::Menus::Builder.build(:lists) do |m|
|
48
|
+
Satis::Menus::Builder.build([:nuntius, :lists]) do |m|
|
49
49
|
m.item :new_subscriber, link: nuntius.new_admin_list_subscriber_path(@list) if @list.persisted?
|
50
50
|
end
|
51
51
|
end
|
data/app/models/nuntius/list.rb
CHANGED
@@ -5,7 +5,7 @@ module Nuntius
|
|
5
5
|
include Nuntius::Concerns::MetadataScoped
|
6
6
|
include Nuntius::Concerns::Yamlify
|
7
7
|
|
8
|
-
has_many :subscribers,
|
8
|
+
has_many :subscribers, dependent: :delete_all
|
9
9
|
|
10
10
|
validates :name, presence: true
|
11
11
|
validates :slug, presence: true, uniqueness: true
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class CampaignsTable < Nuntius::ApplicationTable
|
5
|
+
definition do
|
6
|
+
model Nuntius::Campaign
|
7
|
+
|
8
|
+
column(:name)
|
9
|
+
column(:metadata) do
|
10
|
+
render do
|
11
|
+
html do |template|
|
12
|
+
Nuntius.config.metadata_humanize(template.metadata)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
column(:transport)
|
17
|
+
column(:state)
|
18
|
+
|
19
|
+
column(:list_name) do
|
20
|
+
attribute "nuntius_lists.name"
|
21
|
+
end
|
22
|
+
|
23
|
+
action :publish do
|
24
|
+
# FIXME: next unless campaign.can_publish?
|
25
|
+
show ->(campaign) { campaign.transport != "sms" && campaign.can_publish? }
|
26
|
+
link { |campaign| campaign.can_publish? ? nuntius.publish_admin_campaign_path(campaign) : nil }
|
27
|
+
icon "fa fa-paper-plane"
|
28
|
+
link_attributes data: {"turbo-confirm": "Are you sure you want to send out this campaign?", "turbo-method": :post}
|
29
|
+
end
|
30
|
+
|
31
|
+
order name: :asc
|
32
|
+
|
33
|
+
link { |campaign| nuntius.edit_admin_campaign_path(campaign) }
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def scope
|
39
|
+
@scope = Nuntius::Campaign.visible.joins(:list)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class LayoutsTable < Nuntius::ApplicationTable
|
5
|
+
definition do
|
6
|
+
model Nuntius::Layout
|
7
|
+
|
8
|
+
column(:name)
|
9
|
+
column(:metadata) do
|
10
|
+
render do
|
11
|
+
html do |template|
|
12
|
+
Nuntius.config.metadata_humanize(template.metadata)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
action :delete do
|
18
|
+
link { |layout| nuntius.admin_layout_url(layout) }
|
19
|
+
icon "fa fa-trash"
|
20
|
+
link_attributes data: {"turbo-confirm": "Are you sure you want to delete the layout?", "turbo-method": :delete}
|
21
|
+
end
|
22
|
+
|
23
|
+
order name: :asc
|
24
|
+
|
25
|
+
link { |layout| nuntius.edit_admin_layout_path(layout) }
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def scope
|
31
|
+
@scope = Nuntius::Layout.visible
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class ListsTable < Nuntius::ApplicationTable
|
5
|
+
definition do
|
6
|
+
model Nuntius::List
|
7
|
+
|
8
|
+
column(:name)
|
9
|
+
column(:metadata) do
|
10
|
+
render do
|
11
|
+
html do |template|
|
12
|
+
Nuntius.config.metadata_humanize(template.metadata)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
column(:subscribers_count) do
|
17
|
+
attribute "subscribers_count"
|
18
|
+
end
|
19
|
+
|
20
|
+
order name: :asc
|
21
|
+
|
22
|
+
link { |list| nuntius.edit_admin_list_path(list) }
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def scope
|
28
|
+
@scope = Nuntius::List.visible
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class LocalesTable < Nuntius::ApplicationTable
|
5
|
+
definition do
|
6
|
+
model Nuntius::Locale
|
7
|
+
|
8
|
+
column(:key)
|
9
|
+
column(:metadata) do
|
10
|
+
render do
|
11
|
+
html do |template|
|
12
|
+
Nuntius.config.metadata_humanize(template.metadata)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
order key: :asc
|
18
|
+
|
19
|
+
link { |locale| nuntius.edit_admin_locale_path(locale) }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def scope
|
25
|
+
@scope = Nuntius::Locale.visible
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class MessagesTable < Nuntius::ApplicationTable
|
5
|
+
definition do
|
6
|
+
model Nuntius::Message
|
7
|
+
|
8
|
+
column(:to)
|
9
|
+
column(:created_at)
|
10
|
+
column(:last_sent_at)
|
11
|
+
column(:campaign_id) do
|
12
|
+
render do
|
13
|
+
html do |message|
|
14
|
+
link_to message.campaign&.name, nuntius.edit_admin_campaign_path(message.campaign) if message.campaign
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
column(:template_id) do
|
19
|
+
render do
|
20
|
+
html do |message|
|
21
|
+
link_to message.template&.description, nuntius.edit_admin_template_path(message.template) if message.template
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
column :nuntiable_type do
|
26
|
+
internal true # Needed for related_object below
|
27
|
+
end
|
28
|
+
column :nuntiable_id do
|
29
|
+
internal true # Needed for related_object below
|
30
|
+
end
|
31
|
+
column(:object) do # do |message|
|
32
|
+
render do
|
33
|
+
html do |message|
|
34
|
+
if message.nuntiable
|
35
|
+
link_to "#{message.nuntiable} (#{message.nuntiable_type})", begin
|
36
|
+
url_for(message.nuntiable)
|
37
|
+
rescue
|
38
|
+
""
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
column(:status)
|
45
|
+
|
46
|
+
order created_at: :desc
|
47
|
+
|
48
|
+
link { |message| nuntius.admin_message_path(message) }
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def scope
|
54
|
+
@scope = Nuntius::Message.visible
|
55
|
+
@scope = @scope.where(nuntiable_id: params[:nuntiable_id], nuntiable_type: params[:nuntiable_type]) if params[:nuntiable_id]
|
56
|
+
@scope = @scope.where(template_id: params[:template_id]) if params[:template_id]
|
57
|
+
@scope
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class SubscribersTable < Nuntius::ApplicationTable
|
5
|
+
definition do
|
6
|
+
model Nuntius::Subscriber
|
7
|
+
|
8
|
+
column(:list_id) do
|
9
|
+
internal true
|
10
|
+
filter
|
11
|
+
end
|
12
|
+
|
13
|
+
column :first_name do
|
14
|
+
internal true
|
15
|
+
end
|
16
|
+
column :last_name do
|
17
|
+
internal true
|
18
|
+
end
|
19
|
+
column :nuntiable_type do
|
20
|
+
internal true # Needed for related_object below
|
21
|
+
end
|
22
|
+
column :nuntiable_id do
|
23
|
+
internal true # Needed for related_object below
|
24
|
+
end
|
25
|
+
column(:name) do
|
26
|
+
render do
|
27
|
+
html do |subscriber|
|
28
|
+
subscriber.name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
column(:email)
|
33
|
+
column(:phone_number)
|
34
|
+
column(:unsubscribed_at)
|
35
|
+
column(:tags) do
|
36
|
+
render do
|
37
|
+
html do |subscriber|
|
38
|
+
subscriber.tags&.join(",")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
column(:object) do # do |message|
|
44
|
+
render do
|
45
|
+
html do |message|
|
46
|
+
if message.nuntiable
|
47
|
+
link_to "#{message.nuntiable} (#{message.nuntiable_type})", begin
|
48
|
+
url_for(message.nuntiable)
|
49
|
+
rescue
|
50
|
+
""
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
link { |subscriber| nuntius.edit_admin_list_subscriber_path(subscriber, list_id: subscriber.list) }
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def scope
|
63
|
+
@scope = Nuntius::Subscriber.all
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class TemplatesTable < Nuntius::ApplicationTable
|
5
|
+
definition do
|
6
|
+
model Nuntius::Template
|
7
|
+
|
8
|
+
column(:description)
|
9
|
+
column(:enabled)
|
10
|
+
column(:klass)
|
11
|
+
column(:event)
|
12
|
+
column(:messages_count) do
|
13
|
+
attribute "(select count(id) from nuntius_messages where nuntius_messages.template_id = nuntius_templates.id)"
|
14
|
+
render do
|
15
|
+
html do |template|
|
16
|
+
link_to(template.messages_count, nuntius.admin_messages_path(template_id: template.id))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
column(:metadata) do
|
22
|
+
render do
|
23
|
+
html do |template|
|
24
|
+
Nuntius.config.metadata_humanize(template.metadata)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
column(:status) do
|
30
|
+
render do
|
31
|
+
html do |template|
|
32
|
+
color = Nuntius.config.flow_color(template.id)&.light_color || "green"
|
33
|
+
content_tag(:span, class: "traffic-signal-#{color.downcase}") do
|
34
|
+
content_tag(:i, nil, class: "fa fa-circle fa-xl")
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
action :delete do
|
41
|
+
link { |template| nuntius.admin_template_path(template) }
|
42
|
+
icon "fa fa-trash"
|
43
|
+
link_attributes data: {"turbo-confirm": "Are you sure you want to delete the template?", "turbo-method": :delete}
|
44
|
+
end
|
45
|
+
|
46
|
+
order description: :asc
|
47
|
+
|
48
|
+
link { |template| nuntius.edit_admin_template_path(template) }
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def scope
|
54
|
+
@scope = Nuntius::Template.visible
|
55
|
+
# @scope = Nuntius::Template.visible.select("nuntius_templates.*, (select count(id) from nuntius_messages where nuntius_messages.template_id = nuntius_templates.id) as message_count")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -1,2 +1,2 @@
|
|
1
1
|
= sts.card :nuntius_admin_campaigns, icon: 'fad fa-megaphone', content_padding: false, menu: nuntius_campaigns_menu do |card|
|
2
|
-
=
|
2
|
+
= sts.table :"nuntius/campaigns"
|
@@ -19,5 +19,6 @@
|
|
19
19
|
- card.with_tab:media, padding: true
|
20
20
|
= render partial: 'nuntius/admin/layouts/attachments/index', locals: { attachments: @layout.attachments, upload_url: nuntius.admin_layout_attachments_path(@layout) }
|
21
21
|
|
22
|
-
- if @layout.templates.
|
23
|
-
|
22
|
+
- if @layout.templates.exists?
|
23
|
+
- card.with_tab :templates, padding: false
|
24
|
+
= sts.table :"nuntius/templates", filters: { layout_id: @layout.id }
|
@@ -1,2 +1,2 @@
|
|
1
1
|
= sts.card :nuntius_admin_layouts, icon: 'fad fa-table-layout', content_padding: false, menu: nuntius_layouts_menu do |card|
|
2
|
-
=
|
2
|
+
= sts.table :"nuntius/layouts", custom_views: true
|
@@ -20,5 +20,6 @@
|
|
20
20
|
.col-span-12
|
21
21
|
= f.input :metadata_yaml, as: :editor, mode: 'application/yaml'
|
22
22
|
|
23
|
-
- if @list.subscribers.
|
24
|
-
|
23
|
+
- if @list.subscribers.exists?
|
24
|
+
- card.with_tab :subscribers, padding: false
|
25
|
+
= sts.table :"nuntius/subscribers", filters: { list_id: @list.id }
|
@@ -1,2 +1,2 @@
|
|
1
1
|
= sts.card :nuntius_admin_lists, icon: 'fad fa-address-book', content_padding: false, menu: nuntius_lists_menu do |card|
|
2
|
-
=
|
2
|
+
= sts.table :"nuntius/lists"
|
@@ -1,2 +1,2 @@
|
|
1
1
|
= sts.card :nuntius_admin_locales, icon: 'fad fa-language', content_padding: false, menu: nuntius_locales_menu do |card|
|
2
|
-
=
|
2
|
+
= sts.table :nuntius_locales
|
@@ -1,2 +1,2 @@
|
|
1
1
|
= sts.card :nuntius_admin_messages, icon: 'fad fa-envelope', content_padding: false do |card|
|
2
|
-
=
|
2
|
+
= sts.table :"nuntius/messages"
|
@@ -7,7 +7,7 @@
|
|
7
7
|
- card.with_action
|
8
8
|
= f.submit
|
9
9
|
|
10
|
-
- card.with_tab:edit, padding: true
|
10
|
+
- card.with_tab :edit, padding: true
|
11
11
|
.grid.grid-cols-12.gap-4
|
12
12
|
.col-span-1
|
13
13
|
= f.input :enabled, as: :switch
|
@@ -75,5 +75,6 @@
|
|
75
75
|
template data-toggle-target='toggleable' data-toggle-value='slack'
|
76
76
|
|
77
77
|
|
78
|
-
- if @template.messages.
|
79
|
-
|
78
|
+
- if @template.messages.exists?
|
79
|
+
- card.with_tab :messages, padding: false
|
80
|
+
= sts.table :"nuntius/messages", filters: { template_id: @template.id }
|
@@ -1,2 +1,2 @@
|
|
1
|
-
= sts.card :nuntius_admin_templates, icon: 'fad fa-
|
2
|
-
=
|
1
|
+
= sts.card :nuntius_admin_templates, icon: 'fad fa-file', content_padding: false, menu: nuntius_templates_menu do |card|
|
2
|
+
= sts.table :"nuntius/templates", custom_views: true
|
data/config/locales/en.yml
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
en:
|
2
|
+
menu:
|
3
|
+
nuntius:
|
4
|
+
templates:
|
5
|
+
new: New template
|
6
|
+
layouts:
|
7
|
+
new: New layout
|
8
|
+
locales:
|
9
|
+
new: New locale
|
10
|
+
campaigns:
|
11
|
+
new: New campaign
|
12
|
+
lists: Lists
|
13
|
+
lists:
|
14
|
+
new: New list
|
15
|
+
new_subscriber: New subscriber
|
1
16
|
nuntius:
|
2
17
|
flash:
|
3
18
|
error: There were problems saving the %{model}
|
@@ -43,10 +58,10 @@
|
|
43
58
|
edit:
|
44
59
|
card:
|
45
60
|
nuntius_admin_templates:
|
46
|
-
title:
|
61
|
+
title: Template
|
47
62
|
tab:
|
48
63
|
edit: Edit
|
49
|
-
|
64
|
+
messages: Messages
|
50
65
|
metadata: Metadata
|
51
66
|
layouts:
|
52
67
|
index:
|
@@ -100,7 +115,7 @@
|
|
100
115
|
Nuntius lists: Lists
|
101
116
|
edit:
|
102
117
|
description: List description
|
103
|
-
description_hint: Describe the list in detail for the
|
118
|
+
description_hint: Describe the list in detail for the subscribers, explain if they can unsubscribe, how often they will receive messages, etc.
|
104
119
|
card:
|
105
120
|
nuntius_admin_lists:
|
106
121
|
title: Lists
|
data/config/locales/nl.yml
CHANGED
@@ -1,4 +1,18 @@
|
|
1
1
|
nl:
|
2
|
+
menu:
|
3
|
+
nuntius:
|
4
|
+
templates:
|
5
|
+
new: Nieuwe template
|
6
|
+
layouts:
|
7
|
+
new: Nieuwe layout
|
8
|
+
locales:
|
9
|
+
new: Nieuwe locale
|
10
|
+
campaigns:
|
11
|
+
new: Nieuwe campagne
|
12
|
+
lists: Lijsten
|
13
|
+
lists:
|
14
|
+
new: Nieuwe lijst
|
15
|
+
new_subscriber: Nieuwe abonnee
|
2
16
|
nuntius:
|
3
17
|
flash:
|
4
18
|
error: Er waren problem om %{model} op te slaan
|
@@ -11,12 +25,109 @@ nl:
|
|
11
25
|
resend:
|
12
26
|
resend_success: Bericht opnieuw verstuurd
|
13
27
|
resend_error: Het is niet gelukt het bericht opnieuw te sturen
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
28
|
+
index:
|
29
|
+
card:
|
30
|
+
nuntius_admin_messages:
|
31
|
+
title: Berichten
|
32
|
+
tab:
|
33
|
+
Nuntius messages: Berichten
|
34
|
+
show:
|
35
|
+
message: Message
|
36
|
+
card:
|
37
|
+
nuntius_admin_messages:
|
38
|
+
tabs:
|
39
|
+
main:
|
40
|
+
tab:
|
41
|
+
preview: Preview
|
42
|
+
details: Details
|
43
|
+
info_item:
|
44
|
+
main:
|
45
|
+
status: Status
|
46
|
+
transport: Transport
|
47
|
+
provider: Provider
|
48
|
+
provider_id: Provider ID
|
49
|
+
request_id: Request ID
|
50
|
+
refreshes: Refreshes
|
51
|
+
last_sent_at: Last Sent At
|
52
|
+
created_at: Created At
|
53
|
+
templates:
|
54
|
+
index:
|
55
|
+
card:
|
56
|
+
nuntius_admin_templates:
|
57
|
+
title: Templates
|
58
|
+
tab:
|
59
|
+
Nuntius templates: Templates
|
60
|
+
edit:
|
61
|
+
card:
|
62
|
+
nuntius_admin_templates:
|
63
|
+
title: Template
|
64
|
+
tabs:
|
65
|
+
main:
|
66
|
+
tab:
|
67
|
+
edit: Bewerk
|
68
|
+
messages: Berichten
|
69
|
+
metadata: Metadata
|
70
|
+
layouts:
|
71
|
+
index:
|
72
|
+
card:
|
73
|
+
nuntius_admin_layouts:
|
74
|
+
title: Layouts
|
75
|
+
tab:
|
76
|
+
Nuntius layouts: Layouts
|
77
|
+
edit:
|
78
|
+
card:
|
79
|
+
nuntius_admin_layouts:
|
80
|
+
title: Layouts
|
81
|
+
tabs:
|
82
|
+
main:
|
83
|
+
tab:
|
84
|
+
edit: Edit
|
85
|
+
metadata: Metadata
|
86
|
+
media: Media
|
87
|
+
|
88
|
+
metadata: Metadata
|
89
|
+
locales:
|
90
|
+
index:
|
91
|
+
card:
|
92
|
+
nuntius_admin_locales:
|
93
|
+
title: Locales
|
94
|
+
tab:
|
95
|
+
Nuntius locales: Locales
|
96
|
+
edit:
|
97
|
+
card:
|
98
|
+
nuntius_admin_locales:
|
99
|
+
title: Locales
|
100
|
+
data: Data
|
101
|
+
metadata: Metadata
|
102
|
+
campaigns:
|
103
|
+
index:
|
104
|
+
card:
|
105
|
+
nuntius_admin_campaigns:
|
106
|
+
title: Campaigns
|
107
|
+
tab:
|
108
|
+
Nuntius campaigns: Campaigns
|
109
|
+
edit:
|
110
|
+
card:
|
111
|
+
nuntius_admin_campaigns:
|
112
|
+
title: Campaigns
|
113
|
+
lists:
|
114
|
+
subscribers:
|
115
|
+
edit:
|
116
|
+
subscribers: Subscribers
|
117
|
+
index:
|
118
|
+
card:
|
119
|
+
nuntius_admin_lists:
|
120
|
+
title: Lists
|
121
|
+
tab:
|
122
|
+
Nuntius lists: Lists
|
123
|
+
edit:
|
124
|
+
description: List description
|
125
|
+
description_hint: Describe the list in detail for the subscibers, explain if they can unsubscribe, how often they will receive messages, etc.
|
126
|
+
card:
|
127
|
+
nuntius_admin_lists:
|
128
|
+
title: Lists
|
129
|
+
tabs:
|
130
|
+
main:
|
131
|
+
tab:
|
132
|
+
edit: Edit
|
133
|
+
nuntius_subscribers: Subscribers
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
5
|
+
source_root File.expand_path("../templates", __FILE__)
|
6
|
+
|
7
|
+
def create_initializer_file
|
8
|
+
template "config/initializers/nuntius.rb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_route
|
12
|
+
return if Rails.application.routes.routes.detect { |route| route.app.app == Nuntius::Engine }
|
13
|
+
route %(mount Nuntius::Engine => "/nuntius")
|
14
|
+
end
|
15
|
+
|
16
|
+
def copy_migrations
|
17
|
+
rake "nuntius:install:migrations"
|
18
|
+
end
|
19
|
+
|
20
|
+
def tailwindcss_config
|
21
|
+
rake "nuntius:tailwindcss:config"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require "rails/generators/base"
|
2
|
+
|
3
|
+
module Nuntius
|
4
|
+
module Generators
|
5
|
+
class TailwindConfigGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("../templates", __dir__)
|
7
|
+
desc "Configures tailwind.config.js and application.tailwindcss.css"
|
8
|
+
|
9
|
+
def add_content_to_tailwind_config
|
10
|
+
inject_into_file "config/tailwind.config.js", before: "],\n theme: {" do
|
11
|
+
" // Nuntius content\n" +
|
12
|
+
%w[/app/views/**/* /app/helpers/**/* /app/controllers/**/* /app/components/**/* /app/javascript/**/*.js /app/assets/**/*.css].map { |path| " \"#{Nuntius::Engine.root}#{path}\"" }.join(",\n") +
|
13
|
+
",\n "
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_content_application_tailwind_css
|
18
|
+
inject_into_file "app/assets/stylesheets/application.tailwind.css", before: "@tailwind base;" do
|
19
|
+
"@import '#{Nuntius::Engine.root}/app/assets/stylesheets/nuntius/application.css';\n"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Nuntius.setup do |config|
|
4
|
+
config.base_controller = "::ApplicationController"
|
5
|
+
config.logger = -> { Rails.logger }
|
6
|
+
|
7
|
+
config.transport :mail
|
8
|
+
config.transport :push
|
9
|
+
config.transport :sms
|
10
|
+
config.transport :voice
|
11
|
+
config.allow_custom_events = true
|
12
|
+
|
13
|
+
config.provider :smtp, transport: :mail, settings: lambda { |_message|
|
14
|
+
{
|
15
|
+
from_header: "Example <example@example.com>",
|
16
|
+
host: "",
|
17
|
+
port: "",
|
18
|
+
username: "",
|
19
|
+
password: "",
|
20
|
+
allow_list: ["example.com"]
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
config.provider :houston, transport: :push, settings: {certificate: ""}
|
25
|
+
config.provider :firebase, transport: :push, settings: {server_key: ""}
|
26
|
+
|
27
|
+
config.provider :message_bird, transport: :sms, priority: 1, timeout: 20, settings: {from: "YourApp", auth_token: ""}
|
28
|
+
config.provider :twilio, transport: :sms, priority: 2, settings: {sid: "", auth_token: "", from: ""}
|
29
|
+
|
30
|
+
config.provider :twilio, transport: :voice, settings: {sid: "", auth_token: "", from: ""}
|
31
|
+
end
|
@@ -66,6 +66,7 @@ module Nuntius
|
|
66
66
|
@metadata_fields = {}
|
67
67
|
@metadata_humanize = ->(data) { data.inspect }
|
68
68
|
@default_template_scope = ->(_object) { all }
|
69
|
+
@default_params = {}
|
69
70
|
end
|
70
71
|
|
71
72
|
# Make the part that is important for visible readable for humans
|
@@ -97,8 +98,8 @@ module Nuntius
|
|
97
98
|
@transports.push(transport) if transport
|
98
99
|
end
|
99
100
|
|
100
|
-
def default_params(
|
101
|
-
@default_params.is_a?(Proc) ? instance_exec(
|
101
|
+
def default_params(event, record)
|
102
|
+
@default_params.is_a?(Proc) ? instance_exec(event, record, &@default_params) : @default_params
|
102
103
|
end
|
103
104
|
|
104
105
|
def flow_color(template_id)
|
data/lib/nuntius/version.rb
CHANGED
data/lib/nuntius.rb
CHANGED
@@ -1,27 +1,13 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
desc "Release a new version"
|
4
1
|
namespace :nuntius do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
# frozen_string_literal: true
|
10
|
-
|
11
|
-
module Nuntius
|
12
|
-
VERSION = '#{Nuntius::VERSION.split(".").map(&:to_i).tap { |parts| parts[2] += 1 }.join(".")}'
|
13
|
-
end
|
14
|
-
EOVERSION
|
15
|
-
end
|
16
|
-
module Nuntius
|
17
|
-
remove_const :VERSION
|
2
|
+
namespace :tailwindcss do
|
3
|
+
desc "Configure your Tailwind CSS"
|
4
|
+
task :config do
|
5
|
+
Rails::Generators.invoke("nuntius:tailwind_config", ["--force"])
|
18
6
|
end
|
19
|
-
load version_file
|
20
|
-
puts "Updated version to #{Nuntius::VERSION}"
|
21
|
-
|
22
|
-
`git commit lib/nuntius/version.rb -m "Version #{Nuntius::VERSION}"`
|
23
|
-
`git push`
|
24
|
-
`git tag #{Nuntius::VERSION}`
|
25
|
-
`git push --tags`
|
26
7
|
end
|
27
8
|
end
|
9
|
+
|
10
|
+
if Rake::Task.task_defined?("tailwindcss:build")
|
11
|
+
Rake::Task["tailwindcss:build"].enhance(["nuntius:tailwindcss:config"])
|
12
|
+
Rake::Task["tailwindcss:watch"].enhance(["nuntius:tailwindcss:config"])
|
13
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nuntius
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom de Grunt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-04-
|
11
|
+
date: 2024-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: apnotic
|
@@ -426,6 +426,7 @@ files:
|
|
426
426
|
- MIT-LICENSE
|
427
427
|
- README.md
|
428
428
|
- Rakefile
|
429
|
+
- app/assets/stylesheets/nuntius/application.css
|
429
430
|
- app/controllers/nuntius/admin/campaigns_controller.rb
|
430
431
|
- app/controllers/nuntius/admin/layouts/attachments_controller.rb
|
431
432
|
- app/controllers/nuntius/admin/layouts_controller.rb
|
@@ -495,13 +496,14 @@ files:
|
|
495
496
|
- app/services/nuntius/deliver_campaign_service.rb
|
496
497
|
- app/services/nuntius/deliver_inbound_message_service.rb
|
497
498
|
- app/services/nuntius/retrieve_inbound_mail_service.rb
|
498
|
-
- app/tables/
|
499
|
-
- app/tables/
|
500
|
-
- app/tables/
|
501
|
-
- app/tables/
|
502
|
-
- app/tables/
|
503
|
-
- app/tables/
|
504
|
-
- app/tables/
|
499
|
+
- app/tables/nuntius/application_table.rb
|
500
|
+
- app/tables/nuntius/campaigns_table.rb
|
501
|
+
- app/tables/nuntius/layouts_table.rb
|
502
|
+
- app/tables/nuntius/lists_table.rb
|
503
|
+
- app/tables/nuntius/locales_table.rb
|
504
|
+
- app/tables/nuntius/messages_table.rb
|
505
|
+
- app/tables/nuntius/subscribers_table.rb
|
506
|
+
- app/tables/nuntius/templates_table.rb
|
505
507
|
- app/transports/nuntius/base_transport.rb
|
506
508
|
- app/transports/nuntius/mail_transport.rb
|
507
509
|
- app/transports/nuntius/push_transport.rb
|
@@ -557,6 +559,9 @@ files:
|
|
557
559
|
- db/migrate/20220412114148_add_last_sent_to_message.rb
|
558
560
|
- db/migrate/20240205204719_add_description_to_list.rb
|
559
561
|
- db/migrate/20240206203019_add_slug_to_nuntius_list.rb
|
562
|
+
- lib/generators/nuntius/install_generator.rb
|
563
|
+
- lib/generators/nuntius/tailwind_config_generator.rb
|
564
|
+
- lib/generators/nuntius/templates/config/initializers/nuntius.rb
|
560
565
|
- lib/nuntius.rb
|
561
566
|
- lib/nuntius/active_record_helpers.rb
|
562
567
|
- lib/nuntius/active_storage_helpers.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class NuntiusCampaignsTable < ActionTable::ActionTable
|
4
|
-
model Nuntius::Campaign
|
5
|
-
|
6
|
-
column(:name)
|
7
|
-
column(:metadata) { |campaign| Nuntius.config.metadata_humanize(campaign.metadata) }
|
8
|
-
column(:transport)
|
9
|
-
column(:state)
|
10
|
-
column(:list, sort_field: "nuntius_lists.name") { |campaign| campaign.list.name }
|
11
|
-
|
12
|
-
column :actions, title: "", sortable: false do |campaign|
|
13
|
-
next unless campaign.can_publish?
|
14
|
-
|
15
|
-
content_tag(:span, class: "btn-group btn-group-xs") do
|
16
|
-
concat link_to(content_tag(:i, nil, class: "fa fa-paper-plane"), nuntius.publish_admin_campaign_path(campaign), data: {turbo_confirm: "Are you sure you want to send out this campaign?", turbo_method: :post}, class: "btn btn-xs btn-danger")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
initial_order :name, :asc
|
21
|
-
|
22
|
-
row_link { |campaign| nuntius.edit_admin_campaign_path(campaign) }
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def scope
|
27
|
-
@scope = Nuntius::Campaign.visible
|
28
|
-
@scope = Nuntius::Campaign.joins(:list)
|
29
|
-
end
|
30
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class NuntiusLayoutsTable < ActionTable::ActionTable
|
4
|
-
model Nuntius::Layout
|
5
|
-
|
6
|
-
column(:name)
|
7
|
-
column(:metadata) { |layout| Nuntius.config.metadata_humanize(layout.metadata) }
|
8
|
-
|
9
|
-
column :actions, title: "", sortable: false do |layout|
|
10
|
-
content_tag(:span, class: "btn-group btn-group-xs") do
|
11
|
-
concat link_to(content_tag(:i, nil, class: "fa fa-trash"), nuntius.admin_layout_url(layout), data: {turbo_confirm: "Are you sure you want to delete the layout?", turbo_method: :delete}, class: "btn btn-xs btn-danger")
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
initial_order :name, :asc
|
16
|
-
|
17
|
-
row_link { |layout| nuntius.edit_admin_layout_path(layout) }
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def scope
|
22
|
-
@scope = Nuntius::Layout.visible
|
23
|
-
end
|
24
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class NuntiusListsTable < ActionTable::ActionTable
|
4
|
-
model Nuntius::List
|
5
|
-
|
6
|
-
column(:name)
|
7
|
-
column(:metadata) { |list| Nuntius.config.metadata_humanize(list.metadata) }
|
8
|
-
column(:subscribers, sort_field: "subscribers_count") { |list| list.subscribers.count || "-" }
|
9
|
-
|
10
|
-
initial_order :name, :asc
|
11
|
-
|
12
|
-
row_link { |list| nuntius.edit_admin_list_path(list) }
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def scope
|
17
|
-
@scope = Nuntius::List.visible
|
18
|
-
end
|
19
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class NuntiusLocalesTable < ActionTable::ActionTable
|
4
|
-
model Nuntius::Locale
|
5
|
-
|
6
|
-
column(:key)
|
7
|
-
column(:metadata) { |locale| Nuntius.config.metadata_humanize(locale.metadata) }
|
8
|
-
|
9
|
-
initial_order :key
|
10
|
-
|
11
|
-
row_link { |locale| nuntius.edit_admin_locale_path(locale) }
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def scope
|
16
|
-
@scope = Nuntius::Locale.visible
|
17
|
-
end
|
18
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class NuntiusMessagesTable < ActionTable::ActionTable
|
4
|
-
model Nuntius::Message
|
5
|
-
|
6
|
-
column(:to)
|
7
|
-
column(:created_at, html_value: proc { |message| ln(message.created_at) })
|
8
|
-
column(:last_sent_at, html_value: proc { |message| ln(message.last_sent_at) })
|
9
|
-
column(:origin, sort_field: "nuntius_messages.campaign_id, nuntius_messages.template_id") do |message|
|
10
|
-
link_to message.campaign&.name, nuntius.edit_admin_campaign_path(message.campaign) if message.campaign
|
11
|
-
link_to message.template&.description, nuntius.edit_admin_template_path(message.template) if message.template
|
12
|
-
end
|
13
|
-
column(:subject) do |message|
|
14
|
-
if message.nuntiable
|
15
|
-
link_to "#{message.nuntiable_type} [#{message.nuntiable}]", begin
|
16
|
-
url_for(message.nuntiable)
|
17
|
-
rescue
|
18
|
-
"#"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
column(:status)
|
23
|
-
|
24
|
-
initial_order :created_at, :desc
|
25
|
-
|
26
|
-
row_link { |message| nuntius.admin_message_path(message) }
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def scope
|
31
|
-
@scope = Nuntius::Message.visible
|
32
|
-
@scope = @scope.where(nuntiable_id: params[:nuntiable_id], nuntiable_type: params[:nuntiable_type]) if params[:nuntiable_id]
|
33
|
-
@scope = @scope.where(template_id: params[:template_id]) if params[:template_id]
|
34
|
-
@scope
|
35
|
-
end
|
36
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class NuntiusSubscribersTable < ActionTable::ActionTable
|
4
|
-
model Nuntius::Subscriber
|
5
|
-
|
6
|
-
column(:name, sortable: false)
|
7
|
-
column(:email)
|
8
|
-
column(:phonenumber)
|
9
|
-
column(:unsubscribed_at) { |subscriber| ln(subscriber.unsubscribed_at) }
|
10
|
-
|
11
|
-
initial_order :name, :asc
|
12
|
-
|
13
|
-
row_link { |subscriber| nuntius.edit_admin_list_subscriber_path(subscriber, list_id: subscriber.list) }
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
def scope
|
18
|
-
@scope = Nuntius::Subscriber.where(list_id: params[:list_id])
|
19
|
-
end
|
20
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
class NuntiusTemplatesTable < ActionTable::ActionTable
|
4
|
-
model Nuntius::Template
|
5
|
-
|
6
|
-
column(:description)
|
7
|
-
column(:enabled, as: :boolean)
|
8
|
-
column(:klass)
|
9
|
-
column(:event)
|
10
|
-
column(:messages, sort_field: "message_count") { |template| link_to template.messages.count, nuntius.admin_messages_path(template_id: template.id) }
|
11
|
-
|
12
|
-
column(:metadata) { |template| Nuntius.config.metadata_humanize(template.metadata) }
|
13
|
-
column(:created_at, html_value: proc { |flow| ln(flow.created_at) })
|
14
|
-
|
15
|
-
column(:traffic_light, sortable: false) do |template|
|
16
|
-
color = Nuntius.config.flow_color(template.id).light_color || "green"
|
17
|
-
|
18
|
-
"<span class='traffic-signal-#{color.downcase}'><i class='fa fa-circle fa-xl'></i></span>"
|
19
|
-
end
|
20
|
-
|
21
|
-
column :actions, title: "", sortable: false do |template|
|
22
|
-
content_tag(:span, class: "btn-group btn-group-xs") do
|
23
|
-
concat link_to(content_tag(:i, nil, class: "fa fa-trash"), nuntius.admin_template_path(template), data: {turbo_confirm: "Are you sure you want to delete the template?", turbo_method: :delete}, class: "btn btn-xs btn-danger")
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
initial_order :description, :asc
|
28
|
-
|
29
|
-
row_link { |template| nuntius.edit_admin_template_path(template) }
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def scope
|
34
|
-
@scope = Nuntius::Template.visible
|
35
|
-
@scope = Nuntius::Template.visible.select("nuntius_templates.*, (select count(id) from nuntius_messages where nuntius_messages.template_id = nuntius_templates.id) as message_count")
|
36
|
-
end
|
37
|
-
end
|