bullet_train-outgoing_webhooks 1.0.0 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +20 -0
- data/README.md +11 -26
- data/Rakefile +5 -11
- data/app/assets/config/bullet_train_outgoing_webhooks_manifest.js +0 -0
- data/app/controllers/account/webhooks/outgoing/deliveries_controller.rb +79 -0
- data/app/controllers/account/webhooks/outgoing/delivery_attempts_controller.rb +80 -0
- data/app/controllers/account/webhooks/outgoing/endpoints_controller.rb +79 -0
- data/app/controllers/api/v1/webhooks/outgoing/deliveries_endpoint.rb +63 -0
- data/app/controllers/api/v1/webhooks/outgoing/delivery_attempts_endpoint.rb +65 -0
- data/app/controllers/api/v1/webhooks/outgoing/endpoints_endpoint.rb +119 -0
- data/app/jobs/webhooks/outgoing/delivery_job.rb +7 -0
- data/{lib → app}/models/concerns/webhooks/outgoing/issuing_model.rb +6 -14
- data/{lib → app}/models/concerns/webhooks/outgoing/team_support.rb +0 -0
- data/{lib → app}/models/webhooks/outgoing/delivery.rb +18 -1
- data/{lib → app}/models/webhooks/outgoing/delivery_attempt.rb +17 -1
- data/{lib → app}/models/webhooks/outgoing/endpoint.rb +15 -5
- data/{lib → app}/models/webhooks/outgoing/event.rb +3 -3
- data/{lib → app}/models/webhooks/outgoing/event_type.rb +4 -6
- data/{lib → app}/models/webhooks/outgoing.rb +0 -3
- data/app/models/webhooks.rb +5 -0
- data/app/serializers/api/v1/webhooks/outgoing/delivery_attempt_serializer.rb +16 -0
- data/app/serializers/api/v1/webhooks/outgoing/delivery_serializer.rb +14 -0
- data/app/serializers/api/v1/webhooks/outgoing/endpoint_serializer.rb +14 -0
- data/app/views/account/webhooks/outgoing/deliveries/_breadcrumbs.html.erb +8 -0
- data/app/views/account/webhooks/outgoing/deliveries/_delivery.json.jbuilder +10 -0
- data/app/views/account/webhooks/outgoing/deliveries/_form.html.erb +21 -0
- data/app/views/account/webhooks/outgoing/deliveries/_index.html.erb +73 -0
- data/app/views/account/webhooks/outgoing/deliveries/_menu_item.html.erb +10 -0
- data/app/views/account/webhooks/outgoing/deliveries/_success_indicator.html.erb +7 -0
- data/app/views/account/webhooks/outgoing/deliveries/edit.html.erb +12 -0
- data/app/views/account/webhooks/outgoing/deliveries/index.html.erb +6 -0
- data/app/views/account/webhooks/outgoing/deliveries/index.json.jbuilder +1 -0
- data/app/views/account/webhooks/outgoing/deliveries/new.html.erb +12 -0
- data/app/views/account/webhooks/outgoing/deliveries/show.html.erb +37 -0
- data/app/views/account/webhooks/outgoing/deliveries/show.json.jbuilder +1 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/_breadcrumbs.html.erb +8 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/_delivery_attempt.json.jbuilder +12 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/_form.html.erb +22 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/_index.html.erb +69 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/_menu_item.html.erb +10 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/_success_indicator.html.erb +7 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/edit.html.erb +12 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/index.html.erb +6 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/index.json.jbuilder +1 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/new.html.erb +12 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/show.html.erb +32 -0
- data/app/views/account/webhooks/outgoing/delivery_attempts/show.json.jbuilder +1 -0
- data/app/views/account/webhooks/outgoing/endpoints/_breadcrumbs.html.erb +8 -0
- data/app/views/account/webhooks/outgoing/endpoints/_endpoint.json.jbuilder +10 -0
- data/app/views/account/webhooks/outgoing/endpoints/_form.html.erb +21 -0
- data/app/views/account/webhooks/outgoing/endpoints/_index.html.erb +62 -0
- data/app/views/account/webhooks/outgoing/endpoints/_menu_item.html.erb +10 -0
- data/app/views/account/webhooks/outgoing/endpoints/edit.html.erb +12 -0
- data/app/views/account/webhooks/outgoing/endpoints/index.html.erb +6 -0
- data/app/views/account/webhooks/outgoing/endpoints/index.json.jbuilder +1 -0
- data/app/views/account/webhooks/outgoing/endpoints/new.html.erb +12 -0
- data/app/views/account/webhooks/outgoing/endpoints/show.html.erb +42 -0
- data/app/views/account/webhooks/outgoing/endpoints/show.json.jbuilder +1 -0
- data/config/locales/en/webhooks/outgoing/deliveries.en.yml +112 -0
- data/config/locales/en/webhooks/outgoing/delivery_attempts.en.yml +122 -0
- data/config/locales/en/webhooks/outgoing/endpoints.en.yml +108 -0
- data/config/locales/en/webhooks/outgoing/events.en.yml +10 -0
- data/config/routes.rb +18 -0
- data/db/migrate/20180420013127_create_webhooks_outgoing_endpoints.rb +10 -0
- data/db/migrate/20180420013505_create_webhooks_outgoing_endpoint_event_types.rb +10 -0
- data/db/migrate/20180420013852_create_webhooks_outgoing_event_types.rb +9 -0
- data/db/migrate/20180420014623_create_webhooks_outgoing_events.rb +12 -0
- data/db/migrate/20180420021016_create_webhooks_outgoing_deliveries.rb +11 -0
- data/db/migrate/20180420022027_add_team_to_webhooks_outgoing_events.rb +5 -0
- data/db/migrate/20180420165345_create_webhooks_outgoing_delivery_attempts.rb +11 -0
- data/db/migrate/20180420172112_add_error_message_to_webhooks_outgoing_delivery_attempt.rb +6 -0
- data/db/migrate/20181012234232_add_name_to_webhooks_outgoing_endpoints.rb +5 -0
- data/db/migrate/20181013030208_add_delivered_at_to_webhooks_outgoing_deliveries.rb +5 -0
- data/db/migrate/20181013165056_add_uuid_to_webhooks_outgoing_events.rb +5 -0
- data/db/migrate/20181013174539_add_payload_to_webhooks_outgoing_events.rb +5 -0
- data/db/migrate/20181013192951_add_attempt_number_to_webhooks_outgoing_delivery_attempts.rb +5 -0
- data/db/migrate/20210805060451_change_body_to_data_on_webhooks_outgoing_events.rb +5 -0
- data/db/migrate/20211126230846_add_event_type_ids_to_webhooks_outgoing_endpoints.rb +5 -0
- data/db/migrate/20211126230847_migrate_event_type_ids_on_webhooks_outgoing_endpoints.rb +8 -0
- data/db/migrate/20211127013539_remove_event_type_from_webhooks_outgoing_events.rb +5 -0
- data/db/migrate/20211127013800_add_new_event_type_id_to_webhooks_outgoing_events.rb +5 -0
- data/db/migrate/20211127014001_migrate_event_types_on_webhooks_outgoing_events.rb +10 -0
- data/db/migrate/20211127015712_drop_webhooks_outgoing_endpoint_event_types.rb +9 -0
- data/db/migrate/20211127015713_drop_webhooks_outgoing_event_types.rb +9 -0
- data/lib/bullet_train/outgoing_webhooks/engine.rb +13 -0
- data/lib/bullet_train/outgoing_webhooks/version.rb +1 -3
- data/lib/bullet_train/outgoing_webhooks.rb +2 -17
- data/lib/tasks/bullet_train/outgoing_webhooks_tasks.rake +4 -0
- metadata +97 -60
- data/.standard.yml +0 -2
- data/CHANGELOG.md +0 -5
- data/CODE_OF_CONDUCT.md +0 -84
- data/Gemfile +0 -12
- data/Gemfile.lock +0 -193
- data/LICENSE.txt +0 -21
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/lib/models/concerns/webhooks/outgoing/has_uuid.rb +0 -21
- data/lib/models/webhooks.rb +0 -2
- data/sig/bullet_train/outgoing_webhooks.rbs +0 -6
@@ -1,4 +1,6 @@
|
|
1
|
-
class Webhooks::Outgoing::Delivery <
|
1
|
+
class Webhooks::Outgoing::Delivery < ApplicationRecord
|
2
|
+
# 🚅 add concerns above.
|
3
|
+
|
2
4
|
belongs_to :endpoint, class_name: "Webhooks::Outgoing::Endpoint"
|
3
5
|
belongs_to :event, class_name: "Webhooks::Outgoing::Event"
|
4
6
|
has_one :team, through: :endpoint
|
@@ -11,7 +13,20 @@ class Webhooks::Outgoing::Delivery < ActiveRecord::Base
|
|
11
13
|
5 => 1.hour,
|
12
14
|
}
|
13
15
|
|
16
|
+
# 🚅 add belongs_to associations above.
|
17
|
+
|
14
18
|
has_many :delivery_attempts, class_name: "Webhooks::Outgoing::DeliveryAttempt", dependent: :destroy, foreign_key: :delivery_id
|
19
|
+
# 🚅 add has_many associations above.
|
20
|
+
|
21
|
+
# 🚅 add has_one associations above.
|
22
|
+
|
23
|
+
# 🚅 add scopes above.
|
24
|
+
|
25
|
+
# 🚅 add validations above.
|
26
|
+
|
27
|
+
# 🚅 add callbacks above.
|
28
|
+
|
29
|
+
# 🚅 add delegations above.
|
15
30
|
|
16
31
|
def label_string
|
17
32
|
event.short_uuid
|
@@ -59,4 +74,6 @@ class Webhooks::Outgoing::Delivery < ActiveRecord::Base
|
|
59
74
|
def max_attempts
|
60
75
|
ATTEMPT_SCHEDULE.keys.max
|
61
76
|
end
|
77
|
+
|
78
|
+
# 🚅 add methods above.
|
62
79
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
class Webhooks::Outgoing::DeliveryAttempt <
|
1
|
+
class Webhooks::Outgoing::DeliveryAttempt < ApplicationRecord
|
2
|
+
# 🚅 add concerns above.
|
3
|
+
|
2
4
|
belongs_to :delivery
|
3
5
|
has_one :team, through: :delivery
|
4
6
|
scope :successful, -> { where(response_code: 200) }
|
@@ -44,6 +46,20 @@ class Webhooks::Outgoing::DeliveryAttempt < ActiveRecord::Base
|
|
44
46
|
def label_string
|
45
47
|
"#{attempt_number.ordinalize} Attempt"
|
46
48
|
end
|
49
|
+
# 🚅 add belongs_to associations above.
|
50
|
+
|
51
|
+
# 🚅 add has_many associations above.
|
52
|
+
|
53
|
+
# 🚅 add has_one associations above.
|
54
|
+
|
55
|
+
# 🚅 add scopes above.
|
47
56
|
|
48
57
|
validates :response_code, presence: true
|
58
|
+
# 🚅 add validations above.
|
59
|
+
|
60
|
+
# 🚅 add callbacks above.
|
61
|
+
|
62
|
+
# 🚅 add delegations above.
|
63
|
+
|
64
|
+
# 🚅 add methods above.
|
49
65
|
end
|
@@ -1,12 +1,24 @@
|
|
1
|
-
class Webhooks::Outgoing::Endpoint <
|
2
|
-
|
1
|
+
class Webhooks::Outgoing::Endpoint < ApplicationRecord
|
2
|
+
# 🚅 add concerns above.
|
3
|
+
|
4
|
+
belongs_to :team
|
5
|
+
# 🚅 add belongs_to associations above.
|
3
6
|
|
4
7
|
has_many :deliveries, class_name: "Webhooks::Outgoing::Delivery", dependent: :destroy, foreign_key: :endpoint_id
|
5
8
|
has_many :events, -> { distinct }, through: :deliveries
|
9
|
+
# 🚅 add has_many associations above.
|
10
|
+
|
11
|
+
# 🚅 add has_one associations above.
|
6
12
|
|
7
13
|
scope :listening_for_event_type_id, ->(event_type_id) { where("event_type_ids @> ? OR event_type_ids = '[]'::jsonb", "\"#{event_type_id}\"") }
|
14
|
+
# 🚅 add scopes above.
|
8
15
|
|
9
16
|
validates :name, presence: true
|
17
|
+
# 🚅 add validations above.
|
18
|
+
|
19
|
+
# 🚅 add callbacks above.
|
20
|
+
|
21
|
+
# 🚅 add delegations above.
|
10
22
|
|
11
23
|
def valid_event_types
|
12
24
|
Webhooks::Outgoing::EventType.all
|
@@ -16,7 +28,5 @@ class Webhooks::Outgoing::Endpoint < ActiveRecord::Base
|
|
16
28
|
event_type_ids.map { |id| Webhooks::Outgoing::EventType.find(id) }
|
17
29
|
end
|
18
30
|
|
19
|
-
|
20
|
-
name
|
21
|
-
end
|
31
|
+
# 🚅 add methods above.
|
22
32
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
class Webhooks::Outgoing::Event <
|
2
|
-
include
|
3
|
-
belongs_to :team
|
1
|
+
class Webhooks::Outgoing::Event < ApplicationRecord
|
2
|
+
include HasUuid
|
3
|
+
belongs_to :team
|
4
4
|
belongs_to :event_type, class_name: "Webhooks::Outgoing::EventType"
|
5
5
|
belongs_to :subject, polymorphic: true
|
6
6
|
has_many :deliveries, dependent: :destroy
|
@@ -1,15 +1,13 @@
|
|
1
|
-
class Webhooks::Outgoing::EventType <
|
2
|
-
include ActiveHash::Associations
|
3
|
-
|
1
|
+
class Webhooks::Outgoing::EventType < ApplicationHash
|
4
2
|
self.data = YAML.load_file("config/models/webhooks/outgoing/event_types.yml").map do |topic, events|
|
5
3
|
events.map { |event| event == "crud" ? ["created", "updated", "deleted"] : event }.flatten.map { |event| {id: "#{topic}.#{event}"} }
|
6
4
|
end.flatten
|
7
5
|
|
8
|
-
def
|
9
|
-
|
6
|
+
def label_string
|
7
|
+
name
|
10
8
|
end
|
11
9
|
|
12
|
-
def
|
10
|
+
def name
|
13
11
|
id
|
14
12
|
end
|
15
13
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Api::V1::Webhooks::Outgoing::DeliveryAttemptSerializer < Api::V1::ApplicationSerializer
|
2
|
+
set_type "webhooks/outgoing/delivery_attempt"
|
3
|
+
|
4
|
+
attributes :id,
|
5
|
+
:delivery_id,
|
6
|
+
:response_code,
|
7
|
+
:response_body,
|
8
|
+
:response_message,
|
9
|
+
:error_message,
|
10
|
+
:attempt_number,
|
11
|
+
# 🚅 super scaffolding will insert new fields above this line.
|
12
|
+
:created_at,
|
13
|
+
:updated_at
|
14
|
+
|
15
|
+
belongs_to :delivery, serializer: Api::V1::Webhooks::Outgoing::DeliverySerializer
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Api::V1::Webhooks::Outgoing::DeliverySerializer < Api::V1::ApplicationSerializer
|
2
|
+
set_type "webhooks/outgoing/delivery"
|
3
|
+
|
4
|
+
attributes :id,
|
5
|
+
:endpoint_id,
|
6
|
+
:event_id,
|
7
|
+
:endpoint_url,
|
8
|
+
:delivered_at,
|
9
|
+
# 🚅 super scaffolding will insert new fields above this line.
|
10
|
+
:created_at,
|
11
|
+
:updated_at
|
12
|
+
|
13
|
+
belongs_to :endpoint, serializer: Api::V1::Webhooks::Outgoing::EndpointSerializer
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Api::V1::Webhooks::Outgoing::EndpointSerializer < Api::V1::ApplicationSerializer
|
2
|
+
set_type "webhooks/outgoing/endpoint"
|
3
|
+
|
4
|
+
attributes :id,
|
5
|
+
:team_id,
|
6
|
+
:name,
|
7
|
+
:url,
|
8
|
+
:event_type_ids,
|
9
|
+
# 🚅 super scaffolding will insert new fields above this line.
|
10
|
+
:created_at,
|
11
|
+
:updated_at
|
12
|
+
|
13
|
+
belongs_to :team, serializer: Api::V1::TeamSerializer
|
14
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% delivery ||= @delivery %>
|
2
|
+
<% endpoint ||= @endpoint || delivery&.endpoint %>
|
3
|
+
<%= render 'account/webhooks/outgoing/endpoints/breadcrumbs', endpoint: endpoint %>
|
4
|
+
<%= render 'account/shared/breadcrumb', label: t('.label'), url: [:account, endpoint, :deliveries] %>
|
5
|
+
<% if delivery&.persisted? %>
|
6
|
+
<%= render 'account/shared/breadcrumb', label: delivery.label_string, url: [:account, delivery] %>
|
7
|
+
<% end %>
|
8
|
+
<%= render 'account/shared/breadcrumbs/actions', only_for: 'webhooks/outgoing/deliveries' %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
json.extract! delivery,
|
2
|
+
:id,
|
3
|
+
:endpoint_id,
|
4
|
+
:event_id,
|
5
|
+
:endpoint_url,
|
6
|
+
:delivered_at,
|
7
|
+
# 🚅 super scaffolding will insert new fields above this line.
|
8
|
+
:created_at,
|
9
|
+
:updated_at
|
10
|
+
json.url account_webhooks_outgoing_delivery_url(delivery, format: :json)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<%= form_with model: delivery, url: (delivery.persisted? ? [:account, delivery] : [:account, @endpoint, :deliveries]), local: true, class: 'form' do |form| %>
|
2
|
+
<%= render 'account/shared/forms/errors', form: form %>
|
3
|
+
|
4
|
+
<% with_field_settings form: form do %>
|
5
|
+
<%= render 'shared/fields/super_select', method: :event_id, options: {autofocus: true, include_blank: t('.fields.event_id.placeholder')},
|
6
|
+
choices: @delivery.valid_events.map { |event| [event.label_string, event.id] } %>
|
7
|
+
<%= render 'shared/fields/text_field', method: :endpoint_url %>
|
8
|
+
<%= render 'shared/fields/date_and_time_field', method: :delivered_at %>
|
9
|
+
<%# 🚅 super scaffolding will insert new fields above this line. %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<div class="buttons">
|
13
|
+
<%= form.submit (form.object.persisted? ? t('.buttons.update') : t('.buttons.create')), class: "button" %>
|
14
|
+
<% if form.object.persisted? %>
|
15
|
+
<%= link_to t('global.buttons.cancel'), [:account, delivery], class: "button-secondary" %>
|
16
|
+
<% else %>
|
17
|
+
<%= link_to t('global.buttons.cancel'), [:account, @endpoint, :deliveries], class: "button-secondary" %>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<% end %>
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<% endpoint = @endpoint || @endpoint %>
|
2
|
+
<% context ||= endpoint %>
|
3
|
+
<% collection ||= :deliveries %>
|
4
|
+
<% hide_actions ||= false %>
|
5
|
+
<% hide_back ||= false %>
|
6
|
+
|
7
|
+
<%= render 'account/shared/box' do |p| %>
|
8
|
+
<% p.content_for :title, t(".contexts.#{context.class.name.underscore}.header") %>
|
9
|
+
<% p.content_for :description do %>
|
10
|
+
<%= t(".contexts.#{context.class.name.underscore}.description") %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% p.content_for :table do %>
|
14
|
+
<% if deliveries.any? %>
|
15
|
+
<table class="table">
|
16
|
+
<thead>
|
17
|
+
<tr>
|
18
|
+
<th><%= t('webhooks/outgoing/events.fields.short_uuid.heading') %></th>
|
19
|
+
<th><%= t('webhooks/outgoing/events.fields.event_type_name.heading') %></th>
|
20
|
+
<th><%= t('.fields.endpoint_url.heading') %></th>
|
21
|
+
<th class="text-center"><%= t('.fields.delivered_at.heading') %></th>
|
22
|
+
<%# 🚅 super scaffolding will insert new field headers above this line. %>
|
23
|
+
<th><%= t('.fields.created_at.heading') %></th>
|
24
|
+
<th class="text-right"></th>
|
25
|
+
</tr>
|
26
|
+
</thead>
|
27
|
+
<tbody>
|
28
|
+
<% deliveries.each do |delivery| %>
|
29
|
+
<% with_attribute_settings object: delivery do %>
|
30
|
+
<tr data-id="<%= delivery.id %>">
|
31
|
+
<% with_attribute_settings object: delivery.event do %>
|
32
|
+
<td><%= render 'shared/attributes/code', attribute: :short_uuid, url: [:account, delivery] %></td>
|
33
|
+
<td><%= render 'shared/attributes/code', attribute: :event_type_name %></td>
|
34
|
+
<% end %>
|
35
|
+
<td><%= render 'shared/attributes/code', attribute: :endpoint_url %></td>
|
36
|
+
<td class="text-center"><%= render 'shared/attributes/attempt', attribute: :status, success_method: :delivered?, attempting_method: :still_attempting?, failure_method: :failed? %></td>
|
37
|
+
<%# 🚅 super scaffolding will insert new fields above this line. %>
|
38
|
+
<td><%= render 'shared/attributes/date_and_time', attribute: :created_at %></td>
|
39
|
+
<td class="buttons">
|
40
|
+
<% unless hide_actions %>
|
41
|
+
<% if can? :show, delivery %>
|
42
|
+
<%= link_to t('.buttons.shorthand.show'), [:account, delivery], class: 'button-secondary button-smaller' %>
|
43
|
+
<% end %>
|
44
|
+
<% if can? :edit, delivery %>
|
45
|
+
<%= link_to t('.buttons.shorthand.edit'), [:edit, :account, delivery], class: 'button-secondary button-smaller' %>
|
46
|
+
<% end %>
|
47
|
+
<% if can? :destroy, delivery %>
|
48
|
+
<%= button_to t('.buttons.shorthand.destroy'), [:account, delivery], method: :delete, data: { confirm: t('.buttons.confirmations.destroy', model_locales(delivery)) }, class: 'button-secondary button-smaller' %>
|
49
|
+
<% end %>
|
50
|
+
<% end %>
|
51
|
+
</td>
|
52
|
+
</tr>
|
53
|
+
<% end %>
|
54
|
+
<% end %>
|
55
|
+
</tbody>
|
56
|
+
</table>
|
57
|
+
<% end %>
|
58
|
+
<% end %>
|
59
|
+
|
60
|
+
<% p.content_for :actions do %>
|
61
|
+
<% unless hide_actions %>
|
62
|
+
<% if context == endpoint %>
|
63
|
+
<% if can? :create, Webhooks::Outgoing::Delivery.new(endpoint: endpoint) %>
|
64
|
+
<%= link_to t('.buttons.new'), [:new, :account, endpoint, :delivery], class: "#{first_button_primary(:delivery)} new" %>
|
65
|
+
<% end %>
|
66
|
+
<% end %>
|
67
|
+
|
68
|
+
<% unless hide_back %>
|
69
|
+
<%= link_to t('global.buttons.back'), [:account, context], class: "#{first_button_primary(:delivery)} back" %>
|
70
|
+
<% end %>
|
71
|
+
<% end %>
|
72
|
+
<% end %>
|
73
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% if can? :read, Webhooks::Outgoing::Delivery.new(team: current_team) %>
|
2
|
+
<%= render 'account/shared/menu/item', {
|
3
|
+
url: main_app.polymorphic_path([:account, current_team, :webhooks_outgoing_deliveries]),
|
4
|
+
label: t('webhooks/outgoing/deliveries.navigation.label'),
|
5
|
+
} do |p| %>
|
6
|
+
<% p.content_for :icon do %>
|
7
|
+
<i class="<%= t('webhooks/outgoing/deliveries.navigation.icon') %>"></i>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<% if delivery.delivered? %>
|
2
|
+
<div class="square-icon text-success"><i class="ti-check"></i></div>
|
3
|
+
<% elsif delivery.still_attempting? %>
|
4
|
+
<div class="square-icon"><i class="ti-reload rotating"></i></div>
|
5
|
+
<% else %>
|
6
|
+
<div class="square-icon text-danger"><i class="ti-close"></i></div>
|
7
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= render 'account/shared/page' do |p| %>
|
2
|
+
<% p.content_for :title, t('.section') %>
|
3
|
+
<% p.content_for :body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |p| %>
|
5
|
+
<% p.content_for :title, t('.header') %>
|
6
|
+
<% p.content_for :description, t('.description') %>
|
7
|
+
<% p.content_for :body do %>
|
8
|
+
<%= render 'form', delivery: @delivery %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.array! @deliveries, partial: "webhooks/outgoing/deliveries/delivery", as: :delivery
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= render 'account/shared/page' do |p| %>
|
2
|
+
<% p.content_for :title, t('.section') %>
|
3
|
+
<% p.content_for :body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |p| %>
|
5
|
+
<% p.content_for :title, t('.header') %>
|
6
|
+
<% p.content_for :description, t('.description') %>
|
7
|
+
<% p.content_for :body do %>
|
8
|
+
<%= render 'form', delivery: @delivery %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<%= render 'account/shared/page' do |p| %>
|
2
|
+
<% p.content_for :title, t('.section').html_safe %>
|
3
|
+
<% p.content_for :body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |p| %>
|
5
|
+
<% p.content_for :title, t('.header') %>
|
6
|
+
<% p.content_for :description do %>
|
7
|
+
<%= t('.description').html_safe %>
|
8
|
+
<%= t('.manage_description') if can? :manage, @delivery %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% p.content_for :body do %>
|
12
|
+
<% with_attribute_settings object: @delivery, strategy: :label do %>
|
13
|
+
<% with_attribute_settings object: @delivery.event do %>
|
14
|
+
<%= render 'shared/attributes/code', attribute: :uuid %>
|
15
|
+
<%= render 'shared/attributes/code', attribute: :event_type_name %>
|
16
|
+
<%= render 'shared/attributes/attribute', attribute: :payload do %>
|
17
|
+
<pre><%= JSON.pretty_generate(@delivery.event.payload) %></pre>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
20
|
+
<%= render 'shared/attributes/attempt', attribute: :status, success_method: :delivered?, attempting_method: :still_attempting?, failure_method: :failed? %>
|
21
|
+
<%= render 'shared/attributes/code', attribute: :endpoint_url %>
|
22
|
+
<%= render 'shared/attributes/date_and_time', attribute: :delivered_at %>
|
23
|
+
<%# 🚅 super scaffolding will insert new fields above this line. %>
|
24
|
+
<% end %>
|
25
|
+
<% end %>
|
26
|
+
|
27
|
+
<% p.content_for :actions do %>
|
28
|
+
<%= link_to t('.buttons.edit'), [:edit, :account, @delivery], class: first_button_primary if can? :edit, @delivery %>
|
29
|
+
<%= button_to t('.buttons.destroy'), [:account, @delivery], method: :delete, class: first_button_primary, data: { confirm: t('.buttons.confirmations.destroy', model_locales(@delivery)) } if can? :destroy, @delivery %>
|
30
|
+
<%= link_to t('global.buttons.back'), [:account, @endpoint, :deliveries], class: first_button_primary %>
|
31
|
+
<% end %>
|
32
|
+
<% end %>
|
33
|
+
|
34
|
+
<%= render 'account/webhooks/outgoing/delivery_attempts/index', delivery_attempts: @delivery.delivery_attempts, hide_back: true %>
|
35
|
+
<%# 🚅 super scaffolding will insert new children above this line. %>
|
36
|
+
<% end %>
|
37
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.partial! "webhooks/outgoing/deliveries/delivery", delivery: @delivery
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% delivery_attempt ||= @delivery_attempt %>
|
2
|
+
<% delivery ||= @delivery || delivery_attempt&.delivery %>
|
3
|
+
<%= render 'account/webhooks/outgoing/deliveries/breadcrumbs', delivery: delivery %>
|
4
|
+
<%= render 'account/shared/breadcrumb', label: t('.label'), url: [:account, delivery, :delivery_attempts] %>
|
5
|
+
<% if delivery_attempt&.persisted? %>
|
6
|
+
<%= render 'account/shared/breadcrumb', label: delivery_attempt.label_string, url: [:account, delivery_attempt] %>
|
7
|
+
<% end %>
|
8
|
+
<%= render 'account/shared/breadcrumbs/actions', only_for: 'webhooks/outgoing/delivery_attempts' %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
json.extract! delivery_attempt,
|
2
|
+
:id,
|
3
|
+
:delivery_id,
|
4
|
+
:response_code,
|
5
|
+
:response_body,
|
6
|
+
:response_message,
|
7
|
+
:error_message,
|
8
|
+
:attempt_number,
|
9
|
+
# 🚅 super scaffolding will insert new fields above this line.
|
10
|
+
:created_at,
|
11
|
+
:updated_at
|
12
|
+
json.url account_webhooks_outgoing_delivery_attempt_url(delivery_attempt, format: :json)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<%= form_with model: delivery_attempt, url: (delivery_attempt.persisted? ? [:account, delivery_attempt] : [:account, @delivery, :delivery_attempts]), local: true, class: 'form' do |form| %>
|
2
|
+
<%= render 'account/shared/forms/errors', form: form %>
|
3
|
+
|
4
|
+
<% with_field_settings form: form do %>
|
5
|
+
<%= render 'shared/fields/text_field', method: :response_code, options: {autofocus: true} %>
|
6
|
+
<%= render 'shared/fields/text_area', method: :response_body %>
|
7
|
+
<%= render 'shared/fields/text_area', method: :response_message %>
|
8
|
+
<%= render 'shared/fields/text_area', method: :error_message %>
|
9
|
+
<%= render 'shared/fields/text_field', method: :attempt_number %>
|
10
|
+
<%# 🚅 super scaffolding will insert new fields above this line. %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<div class="buttons">
|
14
|
+
<%= form.submit (form.object.persisted? ? t('.buttons.update') : t('.buttons.create')), class: "button" %>
|
15
|
+
<% if form.object.persisted? %>
|
16
|
+
<%= link_to t('global.buttons.cancel'), [:account, delivery_attempt], class: "button-secondary" %>
|
17
|
+
<% else %>
|
18
|
+
<%= link_to t('global.buttons.cancel'), [:account, @delivery, :delivery_attempts], class: "button-secondary" %>
|
19
|
+
<% end %>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<% end %>
|
@@ -0,0 +1,69 @@
|
|
1
|
+
<% delivery = @delivery || @delivery %>
|
2
|
+
<% context ||= delivery %>
|
3
|
+
<% collection ||= :delivery_attempts %>
|
4
|
+
<% hide_actions ||= false %>
|
5
|
+
<% hide_back ||= false %>
|
6
|
+
|
7
|
+
<%= render 'account/shared/box' do |p| %>
|
8
|
+
<% p.content_for :title, t(".contexts.#{context.class.name.underscore}.header") %>
|
9
|
+
<% p.content_for :description do %>
|
10
|
+
<%= t(".contexts.#{context.class.name.underscore}.description") %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% p.content_for :table do %>
|
14
|
+
<% if delivery_attempts.any? %>
|
15
|
+
<table class="table">
|
16
|
+
<thead>
|
17
|
+
<tr>
|
18
|
+
<th><%= t('.fields.attempt_number.heading') %></th>
|
19
|
+
<th><%= t('.fields.created_at.heading') %></th>
|
20
|
+
<th class="text-center"><%= t('.fields.status.heading') %></th>
|
21
|
+
<th class="text-center"><%= t('.fields.response_code.heading') %></th>
|
22
|
+
<%# 🚅 super scaffolding will insert new field headers above this line. %>
|
23
|
+
<th class="text-right"></th>
|
24
|
+
</tr>
|
25
|
+
</thead>
|
26
|
+
<tbody>
|
27
|
+
<% delivery_attempts.each do |delivery_attempt| %>
|
28
|
+
<% with_attribute_settings object: delivery_attempt do %>
|
29
|
+
<tr data-id="<%= delivery_attempt.id %>">
|
30
|
+
<td><%= render 'shared/attributes/text', attribute: :attempt_number, url: [:account, delivery_attempt] %></td>
|
31
|
+
<td><%= render 'shared/attributes/date_and_time', attribute: :created_at %></td>
|
32
|
+
<td class="text-center"><%= render 'shared/attributes/attempt', attribute: :status, success_method: :successful?, attempting_method: :still_attempting?, failure_method: :failed? %></td>
|
33
|
+
<td class="text-center"><%= render 'shared/attributes/code', attribute: :response_code %></td>
|
34
|
+
<%# 🚅 super scaffolding will insert new fields above this line. %>
|
35
|
+
<td class="buttons">
|
36
|
+
<% unless hide_actions %>
|
37
|
+
<% if can? :show, delivery_attempt %>
|
38
|
+
<%= link_to t('.buttons.shorthand.show'), [:account, delivery_attempt], class: 'button-secondary button-smaller' %>
|
39
|
+
<% end %>
|
40
|
+
<% if can? :edit, delivery_attempt %>
|
41
|
+
<%= link_to t('.buttons.shorthand.edit'), [:edit, :account, delivery_attempt], class: 'button-secondary button-smaller' %>
|
42
|
+
<% end %>
|
43
|
+
<% if can? :destroy, delivery_attempt %>
|
44
|
+
<%= button_to t('.buttons.shorthand.destroy'), [:account, delivery_attempt], method: :delete, data: { confirm: t('.buttons.confirmations.destroy', model_locales(delivery_attempt)) }, class: 'button-secondary button-smaller' %>
|
45
|
+
<% end %>
|
46
|
+
<% end %>
|
47
|
+
</td>
|
48
|
+
</tr>
|
49
|
+
<% end %>
|
50
|
+
<% end %>
|
51
|
+
</tbody>
|
52
|
+
</table>
|
53
|
+
<% end %>
|
54
|
+
<% end %>
|
55
|
+
|
56
|
+
<% p.content_for :actions do %>
|
57
|
+
<% unless hide_actions %>
|
58
|
+
<% if context == delivery %>
|
59
|
+
<% if can? :create, Webhooks::Outgoing::DeliveryAttempt.new(delivery: delivery) %>
|
60
|
+
<%= link_to t('.buttons.new'), [:new, :account, delivery, :delivery_attempt], class: "#{first_button_primary(:delivery_attempt)} new" %>
|
61
|
+
<% end %>
|
62
|
+
<% end %>
|
63
|
+
|
64
|
+
<% unless hide_back %>
|
65
|
+
<%= link_to t('global.buttons.back'), [:account, context], class: "#{first_button_primary(:delivery_attempt)} back" %>
|
66
|
+
<% end %>
|
67
|
+
<% end %>
|
68
|
+
<% end %>
|
69
|
+
<% end %>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% if can? :read, Webhooks::Outgoing::DeliveryAttempt.new(team: current_team) %>
|
2
|
+
<%= render 'account/shared/menu/item', {
|
3
|
+
url: main_app.polymorphic_path([:account, current_team, :webhooks_outgoing_delivery_attempts]),
|
4
|
+
label: t('webhooks/outgoing/delivery_attempts.navigation.label'),
|
5
|
+
} do |p| %>
|
6
|
+
<% p.content_for :icon do %>
|
7
|
+
<i class="<%= t('webhooks/outgoing/delivery_attempts.navigation.icon') %>"></i>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<% if delivery_attempt.successful? %>
|
2
|
+
<div class="square-icon text-success"><i class="ti-check"></i></div>
|
3
|
+
<% elsif delivery_attempt.still_attempting? %>
|
4
|
+
<div class="square-icon"><i class="ti-reload rotating"></i></div>
|
5
|
+
<% else %>
|
6
|
+
<div class="square-icon text-danger"><i class="ti-close"></i></div>
|
7
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= render 'account/shared/page' do |p| %>
|
2
|
+
<% p.content_for :title, t('.section') %>
|
3
|
+
<% p.content_for :body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |p| %>
|
5
|
+
<% p.content_for :title, t('.header') %>
|
6
|
+
<% p.content_for :description, t('.description') %>
|
7
|
+
<% p.content_for :body do %>
|
8
|
+
<%= render 'form', delivery_attempt: @delivery_attempt %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.array! @delivery_attempts, partial: "webhooks/outgoing/delivery_attempts/delivery_attempt", as: :delivery_attempt
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= render 'account/shared/page' do |p| %>
|
2
|
+
<% p.content_for :title, t('.section') %>
|
3
|
+
<% p.content_for :body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |p| %>
|
5
|
+
<% p.content_for :title, t('.header') %>
|
6
|
+
<% p.content_for :description, t('.description') %>
|
7
|
+
<% p.content_for :body do %>
|
8
|
+
<%= render 'form', delivery_attempt: @delivery_attempt %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
<% end %>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<%= render 'account/shared/page' do |p| %>
|
2
|
+
<% p.content_for :title, t('.section').html_safe %>
|
3
|
+
<% p.content_for :body do %>
|
4
|
+
<%= render 'account/shared/box', divider: true do |p| %>
|
5
|
+
<% p.content_for :title, t('.header') %>
|
6
|
+
<% p.content_for :description do %>
|
7
|
+
<%= t('.description') %>
|
8
|
+
<%= t('.manage_description') if can? :manage, @delivery_attempt %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% p.content_for :body do %>
|
12
|
+
<% with_attribute_settings object: @delivery_attempt, strategy: :label do %>
|
13
|
+
<%= render 'shared/attributes/text', attribute: :attempt_number %>
|
14
|
+
<%= render 'shared/attributes/attempt', attribute: :status, success_method: :successful?, attempting_method: :still_attempting?, failure_method: :failed? %>
|
15
|
+
<%= render 'shared/attributes/code', attribute: :response_code %>
|
16
|
+
<%= render 'shared/attributes/code', attribute: :response_message %>
|
17
|
+
<%= render 'shared/attributes/block', attribute: :response_body %>
|
18
|
+
<%= render 'shared/attributes/code', attribute: :error_message %>
|
19
|
+
<%# 🚅 super scaffolding will insert new fields above this line. %>
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<% p.content_for :actions do %>
|
24
|
+
<%= link_to t('.buttons.edit'), [:edit, :account, @delivery_attempt], class: first_button_primary if can? :edit, @delivery_attempt %>
|
25
|
+
<%= button_to t('.buttons.destroy'), [:account, @delivery_attempt], method: :delete, class: first_button_primary, data: { confirm: t('.buttons.confirmations.destroy', model_locales(@delivery_attempt)) } if can? :destroy, @delivery_attempt %>
|
26
|
+
<%= link_to t('global.buttons.back'), [:account, @delivery, :delivery_attempts], class: first_button_primary %>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
29
|
+
|
30
|
+
<%# 🚅 super scaffolding will insert new children above this line. %>
|
31
|
+
<% end %>
|
32
|
+
<% end %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.partial! "webhooks/outgoing/delivery_attempts/delivery_attempt", delivery_attempt: @delivery_attempt
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% endpoint ||= @endpoint %>
|
2
|
+
<% team ||= @team || endpoint&.team %>
|
3
|
+
<%= render 'account/teams/breadcrumbs', team: team %>
|
4
|
+
<%= render 'account/shared/breadcrumb', label: t('.label'), url: [:account, team, :webhooks_outgoing_endpoints] %>
|
5
|
+
<% if endpoint&.persisted? %>
|
6
|
+
<%= render 'account/shared/breadcrumb', label: endpoint.label_string, url: [:account, endpoint] %>
|
7
|
+
<% end %>
|
8
|
+
<%= render 'account/shared/breadcrumbs/actions', only_for: 'webhooks/outgoing/endpoints' %>
|