sm_sms_campaign_webhook 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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