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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/README.md +243 -4
  4. data/app/controllers/sm_sms_campaign_webhook/application_controller.rb +22 -0
  5. data/app/controllers/sm_sms_campaign_webhook/webhook_controller.rb +25 -0
  6. data/app/exceptions/sm_sms_campaign_webhook/error.rb +6 -0
  7. data/app/exceptions/sm_sms_campaign_webhook/invalid_payload.rb +6 -0
  8. data/app/exceptions/sm_sms_campaign_webhook/invalid_payload_value.rb +6 -0
  9. data/app/exceptions/sm_sms_campaign_webhook/missing_config_error.rb +6 -0
  10. data/app/exceptions/sm_sms_campaign_webhook/payload_dispatch_error.rb +6 -0
  11. data/app/jobs/sm_sms_campaign_webhook/application_job.rb +7 -0
  12. data/app/jobs/sm_sms_campaign_webhook/dispatch_payload_job.rb +14 -0
  13. data/app/jobs/sm_sms_campaign_webhook/process_campaign_engagement_job.rb +14 -0
  14. data/app/models/sm_sms_campaign_webhook/campaign_engagement.rb +216 -0
  15. data/app/models/sm_sms_campaign_webhook/campaign_engagement/answer.rb +72 -0
  16. data/app/operations/sm_sms_campaign_webhook/campaign_engagement_operation.rb +36 -0
  17. data/app/operations/sm_sms_campaign_webhook/payload_operation.rb +26 -0
  18. data/app/processors/sm_sms_campaign_webhook/default_processor.rb +11 -0
  19. data/app/processors/sm_sms_campaign_webhook/processable.rb +21 -0
  20. data/config/routes.rb +7 -0
  21. data/lib/generators/sm_sms_campaign_webhook/install/USAGE +12 -0
  22. data/lib/generators/sm_sms_campaign_webhook/install/install_generator.rb +35 -0
  23. data/lib/generators/sm_sms_campaign_webhook/install/templates/README +25 -0
  24. data/lib/generators/sm_sms_campaign_webhook/install/templates/sm_sms_campaign_webhook.rb +9 -0
  25. data/lib/generators/sm_sms_campaign_webhook/install/templates/sms_payload_processor.rb.erb +13 -0
  26. data/lib/sm_sms_campaign_webhook.rb +25 -2
  27. data/lib/sm_sms_campaign_webhook/engine.rb +11 -0
  28. data/lib/sm_sms_campaign_webhook/version.rb +1 -1
  29. data/sm_sms_campaign_webhook.gemspec +27 -19
  30. metadata +66 -16
  31. data/.gitignore +0 -16
  32. data/.rspec +0 -3
  33. data/.travis.yml +0 -18
  34. data/Gemfile +0 -4
  35. data/Rakefile +0 -6
  36. data/bin/console +0 -14
  37. 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
- # General base error type for custom errors.
8
- class Error < StandardError; end
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
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails"
4
+
5
+ module SmSmsCampaignWebhook
6
+ # General Rails engine configuration.
7
+ class Engine < ::Rails::Engine
8
+ isolate_namespace SmSmsCampaignWebhook
9
+ config.generators.api_only = true
10
+ end
11
+ end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module SmSmsCampaignWebhook
4
4
  # @return [String] gem version
5
- VERSION = "0.1.1"
5
+ VERSION = "1.0.0"
6
6
  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 = "sm_sms_campaign_webhook"
7
- spec.version = SmSmsCampaignWebhook::VERSION
8
- spec.authors = ["Cameron Dykes", "Matt Mueller"]
9
- spec.email = ["cameron@southernmade.com", "matt@southernmade.com"]
10
-
11
- spec.summary = %q{Middleware providing webhook for Southern Made SMS Campaign Engagement.}
12
- spec.homepage = "https://github.com/SouthernMade/sm_sms_campaign_webhook"
13
- spec.license = "MIT"
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["homepage_uri"] = spec.homepage
18
- spec.metadata["source_code_uri"] = "https://github.com/SouthernMade/sm_sms_campaign_webhook"
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
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
24
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
- end
26
- spec.bindir = "exe"
27
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
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.0"
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.1.1
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: exe
10
+ bindir: bin
11
11
  cert_chain: []
12
- date: 2019-07-16 00:00:00.000000000 Z
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.0'
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.0'
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
- - Rakefile
86
- - bin/console
87
- - bin/setup
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: '0'
157
+ version: '2.5'
108
158
  required_rubygems_version: !ruby/object:Gem::Requirement
109
159
  requirements:
110
160
  - - ">="
data/.gitignore DELETED
@@ -1,16 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
12
-
13
- # local dev
14
- *.swp
15
- .tool-versions
16
- Gemfile.lock
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
@@ -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
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in sm_sms_campaign_webhook.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new(:spec)
5
-
6
- task :default => :spec
@@ -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__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here