pager_tree-integrations 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|