pager_tree-integrations 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/README.md +61 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/config/pager_tree_integrations_manifest.js +1 -0
  6. data/app/assets/stylesheets/pager_tree/integrations/application.css +15 -0
  7. data/app/controllers/pager_tree/integrations/application_controller.rb +6 -0
  8. data/app/controllers/pager_tree/integrations/live_call_routing/twilio/v3_controller.rb +49 -0
  9. data/app/helpers/pager_tree/integrations/application_helper.rb +9 -0
  10. data/app/jobs/pager_tree/integrations/application_job.rb +6 -0
  11. data/app/jobs/pager_tree/integrations/outgoing_webhook_job.rb +12 -0
  12. data/app/mailers/pager_tree/integrations/application_mailer.rb +8 -0
  13. data/app/models/pager_tree/integrations/additional_datum.rb +41 -0
  14. data/app/models/pager_tree/integrations/alert.rb +60 -0
  15. data/app/models/pager_tree/integrations/apex_ping/v3.rb +69 -0
  16. data/app/models/pager_tree/integrations/application_record.rb +7 -0
  17. data/app/models/pager_tree/integrations/email/v3.rb +150 -0
  18. data/app/models/pager_tree/integrations/integration.rb +130 -0
  19. data/app/models/pager_tree/integrations/live_call_routing/twilio/v3.rb +332 -0
  20. data/app/models/pager_tree/integrations/outgoing_event.rb +25 -0
  21. data/app/models/pager_tree/integrations/outgoing_webhook/v3.rb +75 -0
  22. data/app/models/pager_tree/integrations/outgoing_webhook_delivery/hook_relay.rb +98 -0
  23. data/app/models/pager_tree/integrations/outgoing_webhook_delivery.rb +22 -0
  24. data/app/views/layouts/pager_tree/integrations/application.html.erb +15 -0
  25. data/app/views/pager_tree/integrations/apex_ping/v3/_form_options.html.erb +0 -0
  26. data/app/views/pager_tree/integrations/apex_ping/v3/_show_options.html.erb +0 -0
  27. data/app/views/pager_tree/integrations/email/v3/_form_options.html.erb +11 -0
  28. data/app/views/pager_tree/integrations/email/v3/_show_options.html.erb +17 -0
  29. data/app/views/pager_tree/integrations/live_call_routing/twilio/v3/_form_options.html.erb +80 -0
  30. data/app/views/pager_tree/integrations/live_call_routing/twilio/v3/_show_options.html.erb +181 -0
  31. data/app/views/pager_tree/integrations/outgoing_webhook/v3/_form_options.html.erb +50 -0
  32. data/app/views/pager_tree/integrations/outgoing_webhook/v3/_show_options.html.erb +61 -0
  33. data/app/views/shared/_password_visibility_button.html.erb +8 -0
  34. data/config/locales/en.yml +87 -0
  35. data/config/routes.rb +12 -0
  36. data/db/migrate/20220208195853_create_active_storage_tables.active_storage.rb +58 -0
  37. data/db/migrate/20220208195854_create_deferred_request_deferred_requests.deferred_request.rb +13 -0
  38. data/db/migrate/20220208195855_create_pager_tree_integrations_integrations.rb +10 -0
  39. data/db/migrate/20220215200426_create_pager_tree_integrations_outgoing_webhook_deliveries.rb +12 -0
  40. data/lib/generators/integration/USAGE +11 -0
  41. data/lib/generators/integration/integration_generator.rb +14 -0
  42. data/lib/generators/integration/templates/_form_options.html.erb.tt +8 -0
  43. data/lib/generators/integration/templates/_show_options.html.erb.tt +14 -0
  44. data/lib/generators/integration/templates/model.rb.tt +64 -0
  45. data/lib/generators/integration/templates/test.rb.tt +87 -0
  46. data/lib/pager_tree/integrations/engine.rb +11 -0
  47. data/lib/pager_tree/integrations/env.rb +36 -0
  48. data/lib/pager_tree/integrations/version.rb +5 -0
  49. data/lib/pager_tree/integrations.rb +29 -0
  50. data/lib/tasks/pager_tree/integrations_tasks.rake +4 -0
  51. 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,10 @@
1
+ class CreatePagerTreeIntegrationsIntegrations < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :pager_tree_integrations_integrations do |t|
4
+ t.string :type, null: false
5
+ t.text :options
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ 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,11 @@
1
+ module PagerTree
2
+ module Integrations
3
+ class Engine < ::Rails::Engine
4
+ isolate_namespace PagerTree::Integrations
5
+
6
+ config.before_initialize do
7
+ config.i18n.load_path += Dir["#{config.root}/config/locales/**/*.yml"]
8
+ end
9
+ end
10
+ end
11
+ 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,5 @@
1
+ module PagerTree
2
+ module Integrations
3
+ VERSION = "1.0.0"
4
+ end
5
+ 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
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :pager_tree_integrations do
3
+ # # Task goes here
4
+ # 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: []