pager_tree-integrations 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/README.md +61 -0
- data/Rakefile +8 -0
- data/app/assets/config/pager_tree_integrations_manifest.js +1 -0
- data/app/assets/stylesheets/pager_tree/integrations/application.css +15 -0
- data/app/controllers/pager_tree/integrations/application_controller.rb +6 -0
- data/app/controllers/pager_tree/integrations/live_call_routing/twilio/v3_controller.rb +49 -0
- data/app/helpers/pager_tree/integrations/application_helper.rb +9 -0
- data/app/jobs/pager_tree/integrations/application_job.rb +6 -0
- data/app/jobs/pager_tree/integrations/outgoing_webhook_job.rb +12 -0
- data/app/mailers/pager_tree/integrations/application_mailer.rb +8 -0
- data/app/models/pager_tree/integrations/additional_datum.rb +41 -0
- data/app/models/pager_tree/integrations/alert.rb +60 -0
- data/app/models/pager_tree/integrations/apex_ping/v3.rb +69 -0
- data/app/models/pager_tree/integrations/application_record.rb +7 -0
- data/app/models/pager_tree/integrations/email/v3.rb +150 -0
- data/app/models/pager_tree/integrations/integration.rb +130 -0
- data/app/models/pager_tree/integrations/live_call_routing/twilio/v3.rb +332 -0
- data/app/models/pager_tree/integrations/outgoing_event.rb +25 -0
- data/app/models/pager_tree/integrations/outgoing_webhook/v3.rb +75 -0
- data/app/models/pager_tree/integrations/outgoing_webhook_delivery/hook_relay.rb +98 -0
- data/app/models/pager_tree/integrations/outgoing_webhook_delivery.rb +22 -0
- data/app/views/layouts/pager_tree/integrations/application.html.erb +15 -0
- data/app/views/pager_tree/integrations/apex_ping/v3/_form_options.html.erb +0 -0
- data/app/views/pager_tree/integrations/apex_ping/v3/_show_options.html.erb +0 -0
- data/app/views/pager_tree/integrations/email/v3/_form_options.html.erb +11 -0
- data/app/views/pager_tree/integrations/email/v3/_show_options.html.erb +17 -0
- data/app/views/pager_tree/integrations/live_call_routing/twilio/v3/_form_options.html.erb +80 -0
- data/app/views/pager_tree/integrations/live_call_routing/twilio/v3/_show_options.html.erb +181 -0
- data/app/views/pager_tree/integrations/outgoing_webhook/v3/_form_options.html.erb +50 -0
- data/app/views/pager_tree/integrations/outgoing_webhook/v3/_show_options.html.erb +61 -0
- data/app/views/shared/_password_visibility_button.html.erb +8 -0
- data/config/locales/en.yml +87 -0
- data/config/routes.rb +12 -0
- data/db/migrate/20220208195853_create_active_storage_tables.active_storage.rb +58 -0
- data/db/migrate/20220208195854_create_deferred_request_deferred_requests.deferred_request.rb +13 -0
- data/db/migrate/20220208195855_create_pager_tree_integrations_integrations.rb +10 -0
- data/db/migrate/20220215200426_create_pager_tree_integrations_outgoing_webhook_deliveries.rb +12 -0
- data/lib/generators/integration/USAGE +11 -0
- data/lib/generators/integration/integration_generator.rb +14 -0
- data/lib/generators/integration/templates/_form_options.html.erb.tt +8 -0
- data/lib/generators/integration/templates/_show_options.html.erb.tt +14 -0
- data/lib/generators/integration/templates/model.rb.tt +64 -0
- data/lib/generators/integration/templates/test.rb.tt +87 -0
- data/lib/pager_tree/integrations/engine.rb +11 -0
- data/lib/pager_tree/integrations/env.rb +36 -0
- data/lib/pager_tree/integrations/version.rb +5 -0
- data/lib/pager_tree/integrations.rb +29 -0
- data/lib/tasks/pager_tree/integrations_tasks.rake +4 -0
- metadata +152 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
# This migration comes from active_storage (originally 20170806125915)
|
2
|
+
class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
|
3
|
+
def change
|
4
|
+
# Use Active Record's configured type for primary and foreign keys
|
5
|
+
primary_key_type, foreign_key_type = primary_and_foreign_key_types
|
6
|
+
|
7
|
+
create_table :active_storage_blobs, id: primary_key_type do |t|
|
8
|
+
t.string :key, null: false
|
9
|
+
t.string :filename, null: false
|
10
|
+
t.string :content_type
|
11
|
+
t.text :metadata
|
12
|
+
t.string :service_name, null: false
|
13
|
+
t.bigint :byte_size, null: false
|
14
|
+
t.string :checksum
|
15
|
+
|
16
|
+
if connection.supports_datetime_with_precision?
|
17
|
+
t.datetime :created_at, precision: 6, null: false
|
18
|
+
else
|
19
|
+
t.datetime :created_at, null: false
|
20
|
+
end
|
21
|
+
|
22
|
+
t.index [:key], unique: true
|
23
|
+
end
|
24
|
+
|
25
|
+
create_table :active_storage_attachments, id: primary_key_type do |t|
|
26
|
+
t.string :name, null: false
|
27
|
+
t.references :record, null: false, polymorphic: true, index: false, type: foreign_key_type
|
28
|
+
t.references :blob, null: false, type: foreign_key_type
|
29
|
+
|
30
|
+
if connection.supports_datetime_with_precision?
|
31
|
+
t.datetime :created_at, precision: 6, null: false
|
32
|
+
else
|
33
|
+
t.datetime :created_at, null: false
|
34
|
+
end
|
35
|
+
|
36
|
+
t.index [:record_type, :record_id, :name, :blob_id], name: :index_active_storage_attachments_uniqueness, unique: true
|
37
|
+
t.foreign_key :active_storage_blobs, column: :blob_id
|
38
|
+
end
|
39
|
+
|
40
|
+
create_table :active_storage_variant_records, id: primary_key_type do |t|
|
41
|
+
t.belongs_to :blob, null: false, index: false, type: foreign_key_type
|
42
|
+
t.string :variation_digest, null: false
|
43
|
+
|
44
|
+
t.index [:blob_id, :variation_digest], name: :index_active_storage_variant_records_uniqueness, unique: true
|
45
|
+
t.foreign_key :active_storage_blobs, column: :blob_id
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def primary_and_foreign_key_types
|
52
|
+
config = Rails.configuration.generators
|
53
|
+
setting = config.options[config.orm][:primary_key_type]
|
54
|
+
primary_key_type = setting || :primary_key
|
55
|
+
foreign_key_type = setting || :bigint
|
56
|
+
[primary_key_type, foreign_key_type]
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# This migration comes from deferred_request (originally 20220204152629)
|
2
|
+
class CreateDeferredRequestDeferredRequests < ActiveRecord::Migration[7.0]
|
3
|
+
def change
|
4
|
+
create_table :deferred_request_deferred_requests do |t|
|
5
|
+
t.text :request
|
6
|
+
t.text :routing
|
7
|
+
t.text :result
|
8
|
+
t.integer :status, default: 0, null: false
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreatePagerTreeIntegrationsOutgoingWebhookDeliveries < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :pager_tree_integrations_outgoing_webhook_deliveries do |t|
|
4
|
+
t.references :resource, polymorphic: true, index: {name: "idx_outgoing_webhook_deliveries_resource"}
|
5
|
+
t.string :type, null: false
|
6
|
+
t.string :thirdparty_id
|
7
|
+
t.integer :status, null: false, default: 0
|
8
|
+
t.text :data
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Description:
|
2
|
+
Generate a PagerTree integration
|
3
|
+
|
4
|
+
Example:
|
5
|
+
bin/rails generate integration #{vendor}/#{version}
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
create app/models/pager_tree/integrations/#{vendor}/#{version}.rb
|
9
|
+
create app/views/pager_tree/integrations/#{vendor}/#{version}/_form_options.html.erb
|
10
|
+
create app/views/pager_tree/integrations/#{vendor}/#{version}/_show_options.html.erb
|
11
|
+
create test/models/pager_tree/integrations/#{vendor}/#{version}_test.rb
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class IntegrationGenerator < Rails::Generators::NamedBase
|
2
|
+
source_root File.expand_path("templates", __dir__)
|
3
|
+
|
4
|
+
def copy_templates
|
5
|
+
template "model.rb.tt", "app/models/#{file_path}.rb"
|
6
|
+
template "_form_options.html.erb.tt", "app/views/#{file_path}/_form_options.html.erb"
|
7
|
+
template "_show_options.html.erb.tt", "app/views/#{file_path}/_show_options.html.erb"
|
8
|
+
template "test.rb.tt", "test/models/#{file_path}_test.rb"
|
9
|
+
end
|
10
|
+
|
11
|
+
def inject_locales
|
12
|
+
puts "IMPORTANT: Ensure you add your translations to config/locales/en.yml"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
2
|
+
<div class="form-group">
|
3
|
+
<%%= form.label :option_api_key %>
|
4
|
+
<%%= form.text_field :option_api_key, class: "form-control" %>
|
5
|
+
<p class="form-hint"><%%== t(".option_api_key_hint_html") %></p>
|
6
|
+
</div>
|
7
|
+
<!-- TODO ADD/EDIT YOUR INTEGRATION OPTIONS HERE. SEE CREATING_AN_INTEGRATION.md for different form fields -->
|
8
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="sm:col-span-2">
|
2
|
+
<dt class="text-sm font-medium text-gray-500">
|
3
|
+
<%%= t("activerecord.attributes.<%= file_path %>.option_account_sid") %>
|
4
|
+
</dt>
|
5
|
+
<dd class="mt-1 text-sm text-gray-900">
|
6
|
+
<div class="flex items-center gap-2">
|
7
|
+
<p class="text-sm truncate">
|
8
|
+
<%%= integration.option_api_key %>
|
9
|
+
</p>
|
10
|
+
</div>
|
11
|
+
</dd>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<!-- TODO: add/edit your integration options here. See CREATING_AN_INTEGRATION.md for different form fields. You should only show "very important" options -->
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module PagerTree::Integrations
|
2
|
+
class <%= class_name %> < Integration
|
3
|
+
# TODO: Add options that are relevant to your integration
|
4
|
+
OPTIONS = [
|
5
|
+
{key: :api_key, type: :string, default: nil},
|
6
|
+
]
|
7
|
+
store_accessor :options, *OPTIONS.map { |x| x[:key] }.map(&:to_s), prefix: "option"
|
8
|
+
|
9
|
+
# TODO - add some validations for your options
|
10
|
+
validates :option_api_key, presence: true
|
11
|
+
|
12
|
+
# TODO - add defaults for your options
|
13
|
+
after_initialize do
|
14
|
+
self.option_api_key ||= nil
|
15
|
+
end
|
16
|
+
|
17
|
+
# TODO: Does this integration support incoming requests?
|
18
|
+
def adapter_supports_incoming?
|
19
|
+
true
|
20
|
+
end
|
21
|
+
|
22
|
+
# TODO: Does this integration support outgoing events?
|
23
|
+
def adapter_supports_outgoing?
|
24
|
+
true
|
25
|
+
end
|
26
|
+
|
27
|
+
# TODO: can requests from this integration be deferred? most integrations should be 'true'
|
28
|
+
# unless a realtime response is needed by the posting service
|
29
|
+
def adapter_incoming_can_defer?
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
33
|
+
# TODO: A unique identifier for this integration/alert
|
34
|
+
def adapter_thirdparty_id
|
35
|
+
adapter_incoming_request_params.dig("id")
|
36
|
+
end
|
37
|
+
|
38
|
+
# TODO: Returns :create, :acknowledge, :resolve, or :other
|
39
|
+
def adapter_action
|
40
|
+
:other
|
41
|
+
end
|
42
|
+
|
43
|
+
# TODO: Implement your transform
|
44
|
+
def adapter_process_create
|
45
|
+
Alert.new(
|
46
|
+
title: adapter_incoming_request_params.dig("title"),
|
47
|
+
urgency: adapter_incoming_request_params.dig("urgency"),
|
48
|
+
thirdparty_id: adapter_thirdparty_id,
|
49
|
+
dedup_keys: [adapter_thirdparty_id],
|
50
|
+
additional_data: _additional_datums
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
# TODO: Implement any additional data that should be shown in the alert with high priority (be picky as to 'very important' information)
|
57
|
+
def _additional_datums
|
58
|
+
[
|
59
|
+
# AdditionalDatum.new(format: "text", label: "Method", value: adapter_incoming_request_params.dig("check", "method")),
|
60
|
+
# AdditionalDatum.new(format: "datetime", label: "Triggered At", value: adapter_incoming_request_params.dig("triggered_at"))
|
61
|
+
]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
module PagerTree::Integrations
|
4
|
+
class <%= class_name %>Test < ActiveSupport::TestCase
|
5
|
+
include Integrateable
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@integration = pager_tree_integrations_integrations(:<%= class_name.underscore.gsub("/", "_") %>)
|
9
|
+
|
10
|
+
# TODO: Write some requests to test the integration
|
11
|
+
@create_request = {
|
12
|
+
"triggered_at": "2016-05-24T20:10:57.657259407Z",
|
13
|
+
"state": "triggered",
|
14
|
+
"alert": {
|
15
|
+
"id": 9,
|
16
|
+
"type": "time_total",
|
17
|
+
"stat": "avg",
|
18
|
+
"window_duration": 5,
|
19
|
+
"value": 2500,
|
20
|
+
"op": "gt"
|
21
|
+
},
|
22
|
+
"check": {
|
23
|
+
"id": 80,
|
24
|
+
"name": "Axe Search",
|
25
|
+
"method": "GET",
|
26
|
+
"protocol": "http",
|
27
|
+
"url": "www.axemusic.com/catalogsearch/result/?cat=0&q=sm58",
|
28
|
+
"apdex_threshold": 700
|
29
|
+
},
|
30
|
+
"value": 2724
|
31
|
+
}.with_indifferent_access
|
32
|
+
|
33
|
+
@resolve_request = @create_request.deep_dup
|
34
|
+
@resolve_request[:state] = "resolved"
|
35
|
+
|
36
|
+
@other_request = @create_request.deep_dup
|
37
|
+
@other_request[:state] = "baaad"
|
38
|
+
end
|
39
|
+
|
40
|
+
test "sanity" do
|
41
|
+
# TODO: Check some sane defaults your integration should have
|
42
|
+
assert @integration.adapter_supports_incoming?
|
43
|
+
assert @integration.adapter_incoming_can_defer?
|
44
|
+
assert_not @integration.adapter_supports_outgoing?
|
45
|
+
assert @integration.adapter_show_alerts?
|
46
|
+
assert @integration.adapter_show_logs?
|
47
|
+
assert_not @integration.adapter_show_outgoing_webhook_delivery?
|
48
|
+
end
|
49
|
+
|
50
|
+
test "adapter_actions" do
|
51
|
+
# TODO: Check that the adapter_actions returns expected results based on the inputs
|
52
|
+
@integration.adapter_incoming_request_params = @create_request
|
53
|
+
assert_equal :create, @integration.adapter_action
|
54
|
+
|
55
|
+
@integration.adapter_incoming_request_params = @resolve_request
|
56
|
+
assert_equal :resolve, @integration.adapter_action
|
57
|
+
|
58
|
+
@integration.adapter_incoming_request_params = @other_request
|
59
|
+
assert_equal :other, @integration.adapter_action
|
60
|
+
end
|
61
|
+
|
62
|
+
test "adapter_thirdparty_id" do
|
63
|
+
# TODO: Check that the third party id comes back as expected
|
64
|
+
@integration.adapter_incoming_request_params = @create_request
|
65
|
+
assert_equal 9, @integration.adapter_thirdparty_id
|
66
|
+
end
|
67
|
+
|
68
|
+
test "adapter_process_create" do
|
69
|
+
# TODO: Check tthe entire transform
|
70
|
+
@integration.adapter_incoming_request_params = @create_request
|
71
|
+
|
72
|
+
true_alert = Alert.new(
|
73
|
+
title: "Axe Search triggered",
|
74
|
+
urgency: nil,
|
75
|
+
thirdparty_id: 9,
|
76
|
+
dedup_keys: [9],
|
77
|
+
additional_data: [
|
78
|
+
AdditionalDatum.new(format: "link", label: "URL", value: "http://www.axemusic.com/catalogsearch/result/?cat=0&q=sm58"),
|
79
|
+
AdditionalDatum.new(format: "text", label: "Method", value: "GET"),
|
80
|
+
AdditionalDatum.new(format: "datetime", label: "Triggered At", value: "2016-05-24T20:10:57.657259407Z")
|
81
|
+
]
|
82
|
+
)
|
83
|
+
|
84
|
+
assert_equal true_alert.to_json, @integration.adapter_process_create.to_json
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module PagerTree
|
2
|
+
module Integrations
|
3
|
+
module Env
|
4
|
+
private
|
5
|
+
|
6
|
+
# Search for environment variables
|
7
|
+
#
|
8
|
+
# We must handle a lot of different cases, including the new Rails 6
|
9
|
+
# environment separated credentials files which have no nesting for
|
10
|
+
# the current environment.
|
11
|
+
#
|
12
|
+
# 1. Check environment variable
|
13
|
+
# 2. Check environment scoped credentials, then secrets
|
14
|
+
# 3. Check unscoped credentials, then secrets
|
15
|
+
def find_value_by_name(scope, name)
|
16
|
+
ENV["#{scope.upcase}_#{name.upcase}"] ||
|
17
|
+
credentials&.dig(env, scope, name) ||
|
18
|
+
secrets&.dig(env, scope, name) ||
|
19
|
+
credentials&.dig(scope, name) ||
|
20
|
+
secrets&.dig(scope, name)
|
21
|
+
end
|
22
|
+
|
23
|
+
def env
|
24
|
+
Rails.env.to_sym
|
25
|
+
end
|
26
|
+
|
27
|
+
def secrets
|
28
|
+
Rails.application.secrets
|
29
|
+
end
|
30
|
+
|
31
|
+
def credentials
|
32
|
+
Rails.application.credentials if Rails.application.respond_to?(:credentials)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require "pager_tree/integrations/version"
|
2
|
+
require "pager_tree/integrations/engine"
|
3
|
+
|
4
|
+
module PagerTree
|
5
|
+
module Integrations
|
6
|
+
autoload :Env, "pager_tree/integrations/env"
|
7
|
+
|
8
|
+
mattr_accessor :deferred_request_class
|
9
|
+
@@deferred_request_class = "DeferredRequest::DeferredRequest"
|
10
|
+
|
11
|
+
mattr_accessor :integration_parent_class
|
12
|
+
@@integration_parent_class = "ApplicationRecord"
|
13
|
+
|
14
|
+
mattr_accessor :outgoing_webhook_delivery_parent_class
|
15
|
+
@@outgoing_webhook_delivery_parent_class = "ApplicationRecord"
|
16
|
+
|
17
|
+
mattr_accessor :outgoing_webhook_delivery_factory_class
|
18
|
+
@@outgoing_webhook_delivery_factory_class = "PagerTree::Integrations::OutgoingWebhookDelivery::HookRelay"
|
19
|
+
|
20
|
+
mattr_accessor :outgoing_webhook_delivery_table_name
|
21
|
+
@@outgoing_webhook_delivery_table_name = "pager_tree_integrations_outgoing_webhook_deliveries"
|
22
|
+
|
23
|
+
mattr_accessor :integration_email_v3_domain
|
24
|
+
@@integration_email_v3_domain = "alerts.pagertree.com"
|
25
|
+
|
26
|
+
mattr_accessor :integration_email_v3_inbox
|
27
|
+
@@integration_email_v3_inbox = "a"
|
28
|
+
end
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pager_tree-integrations
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Austin Miller
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-02-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 7.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 7.0.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: standardrb
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: vcr
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: webmock
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: PagerTree Open Source Integration Adapters. Contribute to a growing library
|
70
|
+
of PagerTree integrations!
|
71
|
+
email:
|
72
|
+
- amiller@pagertree.com
|
73
|
+
executables: []
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- LICENSE
|
78
|
+
- README.md
|
79
|
+
- Rakefile
|
80
|
+
- app/assets/config/pager_tree_integrations_manifest.js
|
81
|
+
- app/assets/stylesheets/pager_tree/integrations/application.css
|
82
|
+
- app/controllers/pager_tree/integrations/application_controller.rb
|
83
|
+
- app/controllers/pager_tree/integrations/live_call_routing/twilio/v3_controller.rb
|
84
|
+
- app/helpers/pager_tree/integrations/application_helper.rb
|
85
|
+
- app/jobs/pager_tree/integrations/application_job.rb
|
86
|
+
- app/jobs/pager_tree/integrations/outgoing_webhook_job.rb
|
87
|
+
- app/mailers/pager_tree/integrations/application_mailer.rb
|
88
|
+
- app/models/pager_tree/integrations/additional_datum.rb
|
89
|
+
- app/models/pager_tree/integrations/alert.rb
|
90
|
+
- app/models/pager_tree/integrations/apex_ping/v3.rb
|
91
|
+
- app/models/pager_tree/integrations/application_record.rb
|
92
|
+
- app/models/pager_tree/integrations/email/v3.rb
|
93
|
+
- app/models/pager_tree/integrations/integration.rb
|
94
|
+
- app/models/pager_tree/integrations/live_call_routing/twilio/v3.rb
|
95
|
+
- app/models/pager_tree/integrations/outgoing_event.rb
|
96
|
+
- app/models/pager_tree/integrations/outgoing_webhook/v3.rb
|
97
|
+
- app/models/pager_tree/integrations/outgoing_webhook_delivery.rb
|
98
|
+
- app/models/pager_tree/integrations/outgoing_webhook_delivery/hook_relay.rb
|
99
|
+
- app/views/layouts/pager_tree/integrations/application.html.erb
|
100
|
+
- app/views/pager_tree/integrations/apex_ping/v3/_form_options.html.erb
|
101
|
+
- app/views/pager_tree/integrations/apex_ping/v3/_show_options.html.erb
|
102
|
+
- app/views/pager_tree/integrations/email/v3/_form_options.html.erb
|
103
|
+
- app/views/pager_tree/integrations/email/v3/_show_options.html.erb
|
104
|
+
- app/views/pager_tree/integrations/live_call_routing/twilio/v3/_form_options.html.erb
|
105
|
+
- app/views/pager_tree/integrations/live_call_routing/twilio/v3/_show_options.html.erb
|
106
|
+
- app/views/pager_tree/integrations/outgoing_webhook/v3/_form_options.html.erb
|
107
|
+
- app/views/pager_tree/integrations/outgoing_webhook/v3/_show_options.html.erb
|
108
|
+
- app/views/shared/_password_visibility_button.html.erb
|
109
|
+
- config/locales/en.yml
|
110
|
+
- config/routes.rb
|
111
|
+
- db/migrate/20220208195853_create_active_storage_tables.active_storage.rb
|
112
|
+
- db/migrate/20220208195854_create_deferred_request_deferred_requests.deferred_request.rb
|
113
|
+
- db/migrate/20220208195855_create_pager_tree_integrations_integrations.rb
|
114
|
+
- db/migrate/20220215200426_create_pager_tree_integrations_outgoing_webhook_deliveries.rb
|
115
|
+
- lib/generators/integration/USAGE
|
116
|
+
- lib/generators/integration/integration_generator.rb
|
117
|
+
- lib/generators/integration/templates/_form_options.html.erb.tt
|
118
|
+
- lib/generators/integration/templates/_show_options.html.erb.tt
|
119
|
+
- lib/generators/integration/templates/model.rb.tt
|
120
|
+
- lib/generators/integration/templates/test.rb.tt
|
121
|
+
- lib/pager_tree/integrations.rb
|
122
|
+
- lib/pager_tree/integrations/engine.rb
|
123
|
+
- lib/pager_tree/integrations/env.rb
|
124
|
+
- lib/pager_tree/integrations/version.rb
|
125
|
+
- lib/tasks/pager_tree/integrations_tasks.rake
|
126
|
+
homepage: https://pagertree.com
|
127
|
+
licenses:
|
128
|
+
- Apache License v2.0
|
129
|
+
metadata:
|
130
|
+
homepage_uri: https://pagertree.com
|
131
|
+
source_code_uri: https://github.com/PagerTree/pager_tree-integrations
|
132
|
+
changelog_uri: https://github.com/PagerTree/pager_tree-integrations/blob/master/CHANGELOG.md
|
133
|
+
post_install_message:
|
134
|
+
rdoc_options: []
|
135
|
+
require_paths:
|
136
|
+
- lib
|
137
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ">="
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
requirements: []
|
148
|
+
rubygems_version: 3.2.3
|
149
|
+
signing_key:
|
150
|
+
specification_version: 4
|
151
|
+
summary: PagerTree Integration Adapters
|
152
|
+
test_files: []
|