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.
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: []