sm_sms_campaign_webhook 0.1.1 → 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 +4 -4
- data/CHANGELOG.md +23 -0
- data/README.md +243 -4
- data/app/controllers/sm_sms_campaign_webhook/application_controller.rb +22 -0
- data/app/controllers/sm_sms_campaign_webhook/webhook_controller.rb +25 -0
- data/app/exceptions/sm_sms_campaign_webhook/error.rb +6 -0
- data/app/exceptions/sm_sms_campaign_webhook/invalid_payload.rb +6 -0
- data/app/exceptions/sm_sms_campaign_webhook/invalid_payload_value.rb +6 -0
- data/app/exceptions/sm_sms_campaign_webhook/missing_config_error.rb +6 -0
- data/app/exceptions/sm_sms_campaign_webhook/payload_dispatch_error.rb +6 -0
- data/app/jobs/sm_sms_campaign_webhook/application_job.rb +7 -0
- data/app/jobs/sm_sms_campaign_webhook/dispatch_payload_job.rb +14 -0
- data/app/jobs/sm_sms_campaign_webhook/process_campaign_engagement_job.rb +14 -0
- data/app/models/sm_sms_campaign_webhook/campaign_engagement.rb +216 -0
- data/app/models/sm_sms_campaign_webhook/campaign_engagement/answer.rb +72 -0
- data/app/operations/sm_sms_campaign_webhook/campaign_engagement_operation.rb +36 -0
- data/app/operations/sm_sms_campaign_webhook/payload_operation.rb +26 -0
- data/app/processors/sm_sms_campaign_webhook/default_processor.rb +11 -0
- data/app/processors/sm_sms_campaign_webhook/processable.rb +21 -0
- data/config/routes.rb +7 -0
- data/lib/generators/sm_sms_campaign_webhook/install/USAGE +12 -0
- data/lib/generators/sm_sms_campaign_webhook/install/install_generator.rb +35 -0
- data/lib/generators/sm_sms_campaign_webhook/install/templates/README +25 -0
- data/lib/generators/sm_sms_campaign_webhook/install/templates/sm_sms_campaign_webhook.rb +9 -0
- data/lib/generators/sm_sms_campaign_webhook/install/templates/sms_payload_processor.rb.erb +13 -0
- data/lib/sm_sms_campaign_webhook.rb +25 -2
- data/lib/sm_sms_campaign_webhook/engine.rb +11 -0
- data/lib/sm_sms_campaign_webhook/version.rb +1 -1
- data/sm_sms_campaign_webhook.gemspec +27 -19
- metadata +66 -16
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.travis.yml +0 -18
- data/Gemfile +0 -4
- data/Rakefile +0 -6
- data/bin/console +0 -14
- data/bin/setup +0 -8
@@ -0,0 +1,25 @@
|
|
1
|
+
================================================================================
|
2
|
+
|
3
|
+
Some setup you must do manually if you haven't yet:
|
4
|
+
|
5
|
+
1. Set the ENV value SM_SMS_CAMPAIGN_WEBHOOK_AUTH_TOKEN with a Rails secret:
|
6
|
+
|
7
|
+
$ bundle exec rails secret
|
8
|
+
|
9
|
+
2. Prep the app for ActiveJob using Sidekiq. In config/application.rb:
|
10
|
+
|
11
|
+
config.active_job.queue_adapter = :sidekiq
|
12
|
+
|
13
|
+
In Procfile or appropriate app launch config:
|
14
|
+
|
15
|
+
worker: bundle exec sidekiq --config config/sidekiq.yml
|
16
|
+
|
17
|
+
3. Implement SmsPayloadProcessor behavior. Remember, the generated processor
|
18
|
+
provides the skeleton but will raise errors out of the box. Data handling
|
19
|
+
is app specific!
|
20
|
+
|
21
|
+
This will configure the app to be ready to accept SMS campaign service payloads.
|
22
|
+
|
23
|
+
Happy hacking!
|
24
|
+
|
25
|
+
================================================================================
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sm_sms_campaign_webhook"
|
4
|
+
|
5
|
+
SmSmsCampaignWebhook.config do |config|
|
6
|
+
# SMS campaign payload processor implementing SmSmsCampaignWebhook::Processable behavior.
|
7
|
+
# default: SmSmsCampaignWebhook::DefaultProcessor (raises errors for processing)
|
8
|
+
config.processor = SmsPayloadProcessor
|
9
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Processes SMS campaign service payloads.
|
4
|
+
# @see https://github.com/SouthernMade/sm_sms_campaign_webhook/blob/v<%= SmSmsCampaignWebhook::VERSION %>/app/processors/sm_sms_campaign_webhook/processable.rb SmSmsCampaignWebhook::Processable
|
5
|
+
class SmsPayloadProcessor
|
6
|
+
include SmSmsCampaignWebhook::Processable
|
7
|
+
|
8
|
+
# @param campaign_enagement [SmSmsCampaignWebhook::CampaignEngagement]
|
9
|
+
# @see https://github.com/SouthernMade/sm_sms_campaign_webhook/blob/v<%= SmSmsCampaignWebhook::VERSION %>/app/models/sm_sms_campaign_webhook/campaign_engagement.rb SmSmsCampaignWebhook::CampaignEngagement
|
10
|
+
# @todo Implement business logic to process campaign engagement.
|
11
|
+
# def self.process_campaign_engagement(campaign_engagement)
|
12
|
+
# end
|
13
|
+
end
|
@@ -1,9 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "sm_sms_campaign_webhook/engine"
|
3
4
|
require "sm_sms_campaign_webhook/version"
|
4
5
|
|
5
6
|
# Namespace for SMS campaign webhook.
|
6
7
|
module SmSmsCampaignWebhook
|
7
|
-
#
|
8
|
-
|
8
|
+
# @return [SmSmsCampaignWebhook] self for configuration purposes
|
9
|
+
def self.config(&block)
|
10
|
+
yield self if block
|
11
|
+
end
|
12
|
+
|
13
|
+
# @return [String] SMS campaign webhook auth token
|
14
|
+
# @raise [MissingConfigError] when ENV does not contain SM_SMS_CAMPAIGN_WEBHOOK_AUTH_TOKEN value
|
15
|
+
def self.auth_token
|
16
|
+
@auth_token ||= ENV.fetch("SM_SMS_CAMPAIGN_WEBHOOK_AUTH_TOKEN") do
|
17
|
+
raise MissingConfigError,
|
18
|
+
"ENV does not contain SM_SMS_CAMPAIGN_WEBHOOK_AUTH_TOKEN value"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @return [Processable] SMS campaign payload processor used by operations
|
23
|
+
def self.processor
|
24
|
+
@processor ||= DefaultProcessor
|
25
|
+
end
|
26
|
+
|
27
|
+
# @param processor [Processable] Custom SMS campaign payload processor
|
28
|
+
# @see Processable
|
29
|
+
def self.processor=(processor)
|
30
|
+
@processor = processor
|
31
|
+
end
|
9
32
|
end
|
@@ -3,32 +3,40 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
3
3
|
require "sm_sms_campaign_webhook/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.version
|
8
|
-
spec.
|
9
|
-
spec.
|
10
|
-
|
11
|
-
spec.
|
12
|
-
spec.
|
13
|
-
spec.
|
6
|
+
spec.name = "sm_sms_campaign_webhook"
|
7
|
+
spec.version = SmSmsCampaignWebhook::VERSION
|
8
|
+
spec.license = "MIT"
|
9
|
+
spec.summary = %q{Middleware providing webhook for Southern Made SMS Campaign Engagement.}
|
10
|
+
spec.description = %q{Middleware providing webhook for Southern Made SMS Campaign Engagement.}
|
11
|
+
spec.homepage = "https://github.com/SouthernMade/sm_sms_campaign_webhook"
|
12
|
+
spec.authors = ["Cameron Dykes", "Matt Mueller"]
|
13
|
+
spec.email = ["cameron@southernmade.com", "matt@southernmade.com"]
|
14
14
|
|
15
15
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
|
-
|
17
|
-
spec.metadata["
|
18
|
-
spec.metadata["
|
19
|
-
spec.metadata["changelog_uri"] = "https://github.com/SouthernMade/sm_sms_campaign_webhook/blob/develop/CHANGELOG.md"
|
16
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
17
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
18
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/develop/CHANGELOG.md"
|
20
19
|
|
21
20
|
# Specify which files should be added to the gem when it is released.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
spec.files = Dir[
|
22
|
+
"{app,config,lib}/**/*",
|
23
|
+
"CHANGELOG.md",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.md",
|
26
|
+
"sm_sms_campaign_webhook.gemspec"
|
27
|
+
]
|
28
28
|
spec.require_paths = ["lib"]
|
29
29
|
|
30
|
+
# Required version of Ruby guided by Rails.
|
31
|
+
spec.required_ruby_version = "~> 2.5"
|
32
|
+
|
33
|
+
# Runtime dependencies.
|
34
|
+
spec.add_dependency "rails", [">= 5.2.3", "< 6.1"]
|
35
|
+
|
36
|
+
# Development + test dependencies.
|
30
37
|
spec.add_development_dependency "bundler", "~> 2.0"
|
31
38
|
spec.add_development_dependency "rake", "~> 12.0"
|
32
|
-
spec.add_development_dependency "rspec", "~> 3.
|
39
|
+
spec.add_development_dependency "rspec-rails", "~> 3.8"
|
40
|
+
spec.add_development_dependency "simplecov", "~> 0.17"
|
33
41
|
spec.add_development_dependency "yard", "~> 0.9"
|
34
42
|
end
|
metadata
CHANGED
@@ -1,16 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sm_sms_campaign_webhook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cameron Dykes
|
8
8
|
- Matt Mueller
|
9
9
|
autorequire:
|
10
|
-
bindir:
|
10
|
+
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-07-
|
12
|
+
date: 2019-07-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 5.2.3
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '6.1'
|
24
|
+
type: :runtime
|
25
|
+
prerelease: false
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 5.2.3
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '6.1'
|
14
34
|
- !ruby/object:Gem::Dependency
|
15
35
|
name: bundler
|
16
36
|
requirement: !ruby/object:Gem::Requirement
|
@@ -40,19 +60,33 @@ dependencies:
|
|
40
60
|
- !ruby/object:Gem::Version
|
41
61
|
version: '12.0'
|
42
62
|
- !ruby/object:Gem::Dependency
|
43
|
-
name: rspec
|
63
|
+
name: rspec-rails
|
44
64
|
requirement: !ruby/object:Gem::Requirement
|
45
65
|
requirements:
|
46
66
|
- - "~>"
|
47
67
|
- !ruby/object:Gem::Version
|
48
|
-
version: '3.
|
68
|
+
version: '3.8'
|
49
69
|
type: :development
|
50
70
|
prerelease: false
|
51
71
|
version_requirements: !ruby/object:Gem::Requirement
|
52
72
|
requirements:
|
53
73
|
- - "~>"
|
54
74
|
- !ruby/object:Gem::Version
|
55
|
-
version: '3.
|
75
|
+
version: '3.8'
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: simplecov
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.17'
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.17'
|
56
90
|
- !ruby/object:Gem::Dependency
|
57
91
|
name: yard
|
58
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +101,7 @@ dependencies:
|
|
67
101
|
- - "~>"
|
68
102
|
- !ruby/object:Gem::Version
|
69
103
|
version: '0.9'
|
70
|
-
description:
|
104
|
+
description: Middleware providing webhook for Southern Made SMS Campaign Engagement.
|
71
105
|
email:
|
72
106
|
- cameron@southernmade.com
|
73
107
|
- matt@southernmade.com
|
@@ -75,17 +109,33 @@ executables: []
|
|
75
109
|
extensions: []
|
76
110
|
extra_rdoc_files: []
|
77
111
|
files:
|
78
|
-
- ".gitignore"
|
79
|
-
- ".rspec"
|
80
|
-
- ".travis.yml"
|
81
112
|
- CHANGELOG.md
|
82
|
-
- Gemfile
|
83
113
|
- LICENSE.txt
|
84
114
|
- README.md
|
85
|
-
-
|
86
|
-
-
|
87
|
-
-
|
115
|
+
- app/controllers/sm_sms_campaign_webhook/application_controller.rb
|
116
|
+
- app/controllers/sm_sms_campaign_webhook/webhook_controller.rb
|
117
|
+
- app/exceptions/sm_sms_campaign_webhook/error.rb
|
118
|
+
- app/exceptions/sm_sms_campaign_webhook/invalid_payload.rb
|
119
|
+
- app/exceptions/sm_sms_campaign_webhook/invalid_payload_value.rb
|
120
|
+
- app/exceptions/sm_sms_campaign_webhook/missing_config_error.rb
|
121
|
+
- app/exceptions/sm_sms_campaign_webhook/payload_dispatch_error.rb
|
122
|
+
- app/jobs/sm_sms_campaign_webhook/application_job.rb
|
123
|
+
- app/jobs/sm_sms_campaign_webhook/dispatch_payload_job.rb
|
124
|
+
- app/jobs/sm_sms_campaign_webhook/process_campaign_engagement_job.rb
|
125
|
+
- app/models/sm_sms_campaign_webhook/campaign_engagement.rb
|
126
|
+
- app/models/sm_sms_campaign_webhook/campaign_engagement/answer.rb
|
127
|
+
- app/operations/sm_sms_campaign_webhook/campaign_engagement_operation.rb
|
128
|
+
- app/operations/sm_sms_campaign_webhook/payload_operation.rb
|
129
|
+
- app/processors/sm_sms_campaign_webhook/default_processor.rb
|
130
|
+
- app/processors/sm_sms_campaign_webhook/processable.rb
|
131
|
+
- config/routes.rb
|
132
|
+
- lib/generators/sm_sms_campaign_webhook/install/USAGE
|
133
|
+
- lib/generators/sm_sms_campaign_webhook/install/install_generator.rb
|
134
|
+
- lib/generators/sm_sms_campaign_webhook/install/templates/README
|
135
|
+
- lib/generators/sm_sms_campaign_webhook/install/templates/sm_sms_campaign_webhook.rb
|
136
|
+
- lib/generators/sm_sms_campaign_webhook/install/templates/sms_payload_processor.rb.erb
|
88
137
|
- lib/sm_sms_campaign_webhook.rb
|
138
|
+
- lib/sm_sms_campaign_webhook/engine.rb
|
89
139
|
- lib/sm_sms_campaign_webhook/version.rb
|
90
140
|
- sm_sms_campaign_webhook.gemspec
|
91
141
|
homepage: https://github.com/SouthernMade/sm_sms_campaign_webhook
|
@@ -102,9 +152,9 @@ require_paths:
|
|
102
152
|
- lib
|
103
153
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
154
|
requirements:
|
105
|
-
- - "
|
155
|
+
- - "~>"
|
106
156
|
- !ruby/object:Gem::Version
|
107
|
-
version: '
|
157
|
+
version: '2.5'
|
108
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
159
|
requirements:
|
110
160
|
- - ">="
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
---
|
2
|
-
env:
|
3
|
-
global:
|
4
|
-
- CC_TEST_REPORTER_ID=10742624af48a8870427ef318104de2f29460d1ae694df9aa3d422b77c8a470d
|
5
|
-
sudo: false
|
6
|
-
language: ruby
|
7
|
-
cache: bundler
|
8
|
-
rvm:
|
9
|
-
- 2.6.3
|
10
|
-
before_install: gem install bundler -v 2.0.2
|
11
|
-
before_script:
|
12
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
13
|
-
- chmod +x ./cc-test-reporter
|
14
|
-
- ./cc-test-reporter before-build
|
15
|
-
script:
|
16
|
-
- bundle exec rspec
|
17
|
-
after_script:
|
18
|
-
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
data/Gemfile
DELETED
data/Rakefile
DELETED
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "sm_sms_campaign_webhook"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start(__FILE__)
|