cnfs-comm 0.0.1.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +17 -0
  4. data/Rakefile +22 -0
  5. data/app/controllers/campaigns_controller.rb +4 -0
  6. data/app/controllers/comm/application_controller.rb +6 -0
  7. data/app/controllers/events_controller.rb +4 -0
  8. data/app/controllers/messages_controller.rb +19 -0
  9. data/app/controllers/providers_controller.rb +4 -0
  10. data/app/controllers/templates_controller.rb +4 -0
  11. data/app/controllers/whatsapps_controller.rb +73 -0
  12. data/app/jobs/call_job.rb +8 -0
  13. data/app/jobs/comm/application_job.rb +6 -0
  14. data/app/jobs/event_process_job.rb +4 -0
  15. data/app/jobs/message_process_job.rb +4 -0
  16. data/app/jobs/message_send_job.rb +4 -0
  17. data/app/mailers/application_mailer.rb +6 -0
  18. data/app/models/campaign.rb +17 -0
  19. data/app/models/comm/application_record.rb +7 -0
  20. data/app/models/event.rb +81 -0
  21. data/app/models/message.rb +21 -0
  22. data/app/models/provider.rb +24 -0
  23. data/app/models/providers/aws.rb +54 -0
  24. data/app/models/providers/twilio.rb +37 -0
  25. data/app/models/template.rb +54 -0
  26. data/app/models/tenant.rb +7 -0
  27. data/app/models/whatsapp.rb +4 -0
  28. data/app/operations/event_process.rb +41 -0
  29. data/app/operations/message_create.rb +116 -0
  30. data/app/operations/message_process.rb +17 -0
  31. data/app/operations/message_send.rb +25 -0
  32. data/app/policies/campaign_policy.rb +4 -0
  33. data/app/policies/comm/application_policy.rb +6 -0
  34. data/app/policies/event_policy.rb +4 -0
  35. data/app/policies/message_policy.rb +9 -0
  36. data/app/policies/provider_policy.rb +4 -0
  37. data/app/policies/template_policy.rb +4 -0
  38. data/app/resources/campaign_resource.rb +12 -0
  39. data/app/resources/comm/application_resource.rb +7 -0
  40. data/app/resources/event_resource.rb +25 -0
  41. data/app/resources/message_resource.rb +23 -0
  42. data/app/resources/provider_resource.rb +5 -0
  43. data/app/resources/template_resource.rb +5 -0
  44. data/app/resources/twilio_resource.rb +3 -0
  45. data/app/resources/whatsapp_resource.rb +5 -0
  46. data/config/environment.rb +0 -0
  47. data/config/routes.rb +10 -0
  48. data/config/sidekiq.yml +3 -0
  49. data/config/spring.rb +3 -0
  50. data/db/migrate/20190212220055_create_whatsapps.rb +19 -0
  51. data/db/migrate/20190217113829_create_providers.rb +18 -0
  52. data/db/migrate/20190317045825_create_campaigns.rb +12 -0
  53. data/db/migrate/20190317080012_create_templates.rb +12 -0
  54. data/db/migrate/20190317090002_create_events.rb +19 -0
  55. data/db/migrate/20190317114527_create_messages.rb +15 -0
  56. data/db/migrate/20191127070152_add_provider_id_to_message.rb +5 -0
  57. data/db/seeds/development/data.seeds.rb +35 -0
  58. data/db/seeds/development/tenants.seeds.rb +8 -0
  59. data/lib/ros/comm.rb +11 -0
  60. data/lib/ros/comm/console.rb +8 -0
  61. data/lib/ros/comm/engine.rb +53 -0
  62. data/lib/ros/comm/version.rb +7 -0
  63. data/lib/tasks/ros/comm_tasks.rake +16 -0
  64. metadata +181 -0
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class WhatsappResource < Comm::ApplicationResource
4
+ attributes :body, :to, :from
5
+ end
File without changes
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ Ros::Comm::Engine.routes.draw do
4
+ jsonapi_resources :providers
5
+ jsonapi_resources :campaigns
6
+ jsonapi_resources :templates
7
+ jsonapi_resources :events
8
+ jsonapi_resources :messages
9
+ jsonapi_resources :whatsapps
10
+ end
@@ -0,0 +1,3 @@
1
+ ---
2
+ :queues:
3
+ - comm_default
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ Spring.application_root = './spec/dummy'
@@ -0,0 +1,19 @@
1
+ class CreateWhatsapps < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :whatsapps do |t|
4
+ t.string :sms_message_sid
5
+ t.string :num_media
6
+ t.string :sms_sid
7
+ t.string :sms_status
8
+ t.string :body
9
+ t.string :to
10
+ t.string :num_segments
11
+ t.string :message_sid
12
+ t.string :account_sid
13
+ t.string :from
14
+ t.string :api_version
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ class CreateProviders < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :providers do |t|
4
+ t.string :name
5
+ t.string :type
6
+ t.string :encrypted_credentials
7
+ t.string :encrypted_credentials_iv
8
+ t.string :encrypted_credential_1
9
+ t.string :encrypted_credential_1_iv
10
+ t.string :encrypted_credential_2
11
+ t.string :encrypted_credential_2_iv
12
+ t.string :encrypted_credential_3
13
+ t.string :encrypted_credential_3_iv
14
+
15
+ t.timestamps
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ class CreateCampaigns < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :campaigns do |t|
4
+ t.string :name
5
+ t.string :description
6
+ t.references :owner, polymorphic: true
7
+ t.string :base_url
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ class CreateTemplates < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :templates do |t|
4
+ t.string :name
5
+ t.string :description
6
+ t.text :content
7
+ t.string :status
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateEvents < ActiveRecord::Migration[6.0]
4
+ def change
5
+ create_table :events do |t|
6
+ t.string :name
7
+ t.references :campaign, foreign_key: true
8
+ t.references :template, foreign_key: true
9
+ t.references :target, polymorphic: true
10
+ t.references :owner, polymorphic: true
11
+ t.references :provider, foreign_key: true
12
+ t.string :status, null: false
13
+ t.string :channel
14
+ t.timestamp :send_at
15
+
16
+ t.timestamps
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ class CreateMessages < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :messages do |t|
4
+ t.references :provider, foreign_key: true
5
+ t.references :owner, polymorphic: true
6
+ # t.integer :cognito_user_id, null: false
7
+ t.string :channel
8
+ t.string :from
9
+ t.string :to
10
+ t.string :body
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class AddProviderIdToMessage < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :messages, :provider_msg_id, :string
4
+ end
5
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ after 'development:tenants' do
4
+ Tenant.all.each do |tenant|
5
+ # next if tenant.id.eql? 1
6
+ tenant.switch do
7
+ Providers::Twilio.create(name: "Marketing Team's Twilio", account_sid: ENV['TWILIO_ACCOUNT_SID'],
8
+ auth_token: ENV['TWILIO_AUTH_TOKEN'])
9
+ Providers::Aws.create(name: "Tech Team's AWS", access_key_id: ENV['AWS_ACCESS_KEY_ID'],
10
+ secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
11
+ # Campaign.create(owner_type: 'Perx::Survey::Campaign', cognito_endpoint_id: 2, owner_id: 1).tap do |campaign|
12
+ # template = campaign.templates.create(
13
+ # content: 'Dear <%= user.title %> <%= user.last_name %>, we are delighted to have you ' \
14
+ # 'with us. At ABC Corp, we always have your interest at heart and appreciate it if you ' \
15
+ # 'may complete a 2 minute survey for us to know you better. <%= endpoint.url %>' \
16
+ # '/primary_identifier=?<%= user.primary_identifier %> to answer a survey'
17
+ # )
18
+ # tz = ActiveSupport::TimeZone['Asia/Singapore']
19
+ # mgmt = campaign.events.create(target_type: 'Ros::Cognito::Pool', target_id: 1, template: template,
20
+ # provider: twilio, channel: :sms, send_at: 1.minutes.from_now)
21
+ # prod = campaign.events.create(target_type: 'Ros::Cognito::Pool', target_id: 2, template: template,
22
+ # provider: twilio, channel: :sms, send_at: tz.parse('2019-03-21 17:00:00'))
23
+ # # Send to management team at 10am
24
+ # eng = campaign.events.create(target_type: 'Ros::Cognito::Pool', target_id: 3, template: template,
25
+ # provider: twilio, channel: :sms, send_at: tz.parse('2019-03-22 10:30:00'))
26
+ # support = campaign.events.create(target_type: 'Ros::Cognito::Pool', target_id: 4, template: template,
27
+ # provider: twilio, channel: :sms, send_at: tz.parse('2019-03-22 16:10:00'))
28
+ # sales = campaign.events.create(target_type: 'Ros::Cognito::Pool', target_id: 5, template: template,
29
+ # provider: twilio, channel: :sms, send_at: tz.parse('2019-03-22 16:10:00'))
30
+ # pru = campaign.events.create(target_type: 'Ros::Cognito::Pool', target_id: 6, template: template,
31
+ # provider: twilio, channel: :sms, send_at: tz.parse('2019-03-22 16:10:00'))
32
+ # end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ Tenant.create(schema_name: 'public')
4
+
5
+ 1.upto(7) do |id|
6
+ tenant = Tenant.create!(schema_name: Tenant.account_id_to_schema(id.to_s * 9))
7
+ tenant.update(platform_twilio_enabled: true) if id == 1
8
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'twilio-ruby'
4
+ require 'aws-sdk-sns'
5
+
6
+ require 'ros/comm/engine'
7
+
8
+ module Ros
9
+ module Comm
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Console
5
+ module Methods
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Comm
5
+ class Engine < ::Rails::Engine
6
+ config.generators.api_only = true
7
+ config.generators do |g|
8
+ g.test_framework :rspec, fixture: true
9
+ g.fixture_replacement :factory_bot, dir: 'spec/factories'
10
+ end
11
+
12
+ initializer 'service.set_platform_config', before: 'ros_core.load_platform_config' do |_app|
13
+ settings_path = root.join('config/settings.yml')
14
+ Settings.prepend_source!(settings_path) if File.exist? settings_path
15
+ name = self.class.module_parent.name.demodulize.underscore
16
+ Settings.prepend_source!(service: { name: name, policy_name: name.capitalize })
17
+ end
18
+
19
+ # Adds this gem's db/migrations path to the enclosing application's migraations_path array
20
+ # if the gem has been included in an application, i.e. it is not running in the dummy app
21
+ # https://github.com/rails/rails/issues/22261
22
+ initializer 'service.configure_migrations' do |app|
23
+ unless Rails.root.to_s.end_with?('spec/dummy')
24
+ config.paths['db/migrate'].expanded.each do |expanded_path|
25
+ app.config.paths['db/migrate'] << expanded_path
26
+ ActiveRecord::Migrator.migrations_paths << expanded_path
27
+ end
28
+ end
29
+ end
30
+
31
+ initializer 'service.set_factory_paths', after: 'ros_core.set_factory_paths' do
32
+ if defined?(FactoryBot) && !Rails.env.production?
33
+ FactoryBot.definition_file_paths.prepend(Pathname.new(__FILE__).join('../../../../spec/factories'))
34
+ end
35
+ end
36
+
37
+ initializer 'service.configure_event_logging' do |_app|
38
+ if Settings.dig(:event_logging, :enabled)
39
+ Settings.event_logging.config.schemas_path = root.join(Settings.event_logging.config.schemas_path)
40
+ end
41
+ end
42
+
43
+ # initializer 'service.initialize_infra_services', after: 'ros_core.initialize_infra_services' do |app|
44
+ # end
45
+
46
+ # initializer 'service.configure_console_methods', before: 'ros_core.configure_console_methods' do |_app|
47
+ # if Rails.env.development? && !Rails.const_defined?('Server')
48
+ # require_relative 'console'
49
+ # end
50
+ # end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ros
4
+ module Comm
5
+ VERSION = '0.0.1.alpha'
6
+ end
7
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :ros do
4
+ namespace :comm do
5
+ namespace :db do
6
+ desc 'Load engine seeds'
7
+ task :seed do
8
+ seedbank_root = Seedbank.seeds_root
9
+ Seedbank.seeds_root = File.expand_path('db/seeds', Ros::Comm::Engine.root)
10
+ Seedbank.load_tasks
11
+ Rake::Task['db:seed'].invoke
12
+ Seedbank.seeds_root = seedbank_root
13
+ end
14
+ end
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cnfs-comm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1.alpha
5
+ platform: ruby
6
+ authors:
7
+ - Robert Roach
8
+ - Rui Baltazar
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2020-01-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: aws-sdk-sns
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: 1.21.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: 1.21.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: cnfs-core
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '='
33
+ - !ruby/object:Gem::Version
34
+ version: 0.0.1alpha
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '='
40
+ - !ruby/object:Gem::Version
41
+ version: 0.0.1alpha
42
+ - !ruby/object:Gem::Dependency
43
+ name: cnfs_sdk
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - '='
47
+ - !ruby/object:Gem::Version
48
+ version: 0.0.1alpha
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - '='
54
+ - !ruby/object:Gem::Version
55
+ version: 0.0.1alpha
56
+ - !ruby/object:Gem::Dependency
57
+ name: rails
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: 6.0.2.1
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: 6.0.2.1
70
+ - !ruby/object:Gem::Dependency
71
+ name: twilio-ruby
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: 5.31.0
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: 5.31.0
84
+ description: 3rd party communication services can be invoked by other services per
85
+ tenant
86
+ email:
87
+ - rjayroach@gmail.com
88
+ - rui.p.baltazar@gmail.com
89
+ executables: []
90
+ extensions: []
91
+ extra_rdoc_files: []
92
+ files:
93
+ - MIT-LICENSE
94
+ - README.md
95
+ - Rakefile
96
+ - app/controllers/campaigns_controller.rb
97
+ - app/controllers/comm/application_controller.rb
98
+ - app/controllers/events_controller.rb
99
+ - app/controllers/messages_controller.rb
100
+ - app/controllers/providers_controller.rb
101
+ - app/controllers/templates_controller.rb
102
+ - app/controllers/whatsapps_controller.rb
103
+ - app/jobs/call_job.rb
104
+ - app/jobs/comm/application_job.rb
105
+ - app/jobs/event_process_job.rb
106
+ - app/jobs/message_process_job.rb
107
+ - app/jobs/message_send_job.rb
108
+ - app/mailers/application_mailer.rb
109
+ - app/models/campaign.rb
110
+ - app/models/comm/application_record.rb
111
+ - app/models/event.rb
112
+ - app/models/message.rb
113
+ - app/models/provider.rb
114
+ - app/models/providers/aws.rb
115
+ - app/models/providers/twilio.rb
116
+ - app/models/template.rb
117
+ - app/models/tenant.rb
118
+ - app/models/whatsapp.rb
119
+ - app/operations/event_process.rb
120
+ - app/operations/message_create.rb
121
+ - app/operations/message_process.rb
122
+ - app/operations/message_send.rb
123
+ - app/policies/campaign_policy.rb
124
+ - app/policies/comm/application_policy.rb
125
+ - app/policies/event_policy.rb
126
+ - app/policies/message_policy.rb
127
+ - app/policies/provider_policy.rb
128
+ - app/policies/template_policy.rb
129
+ - app/resources/campaign_resource.rb
130
+ - app/resources/comm/application_resource.rb
131
+ - app/resources/event_resource.rb
132
+ - app/resources/message_resource.rb
133
+ - app/resources/provider_resource.rb
134
+ - app/resources/template_resource.rb
135
+ - app/resources/twilio_resource.rb
136
+ - app/resources/whatsapp_resource.rb
137
+ - config/environment.rb
138
+ - config/routes.rb
139
+ - config/sidekiq.yml
140
+ - config/spring.rb
141
+ - db/migrate/20190212220055_create_whatsapps.rb
142
+ - db/migrate/20190217113829_create_providers.rb
143
+ - db/migrate/20190317045825_create_campaigns.rb
144
+ - db/migrate/20190317080012_create_templates.rb
145
+ - db/migrate/20190317090002_create_events.rb
146
+ - db/migrate/20190317114527_create_messages.rb
147
+ - db/migrate/20191127070152_add_provider_id_to_message.rb
148
+ - db/seeds/development/data.seeds.rb
149
+ - db/seeds/development/tenants.seeds.rb
150
+ - lib/ros/comm.rb
151
+ - lib/ros/comm/console.rb
152
+ - lib/ros/comm/engine.rb
153
+ - lib/ros/comm/version.rb
154
+ - lib/tasks/ros/comm_tasks.rake
155
+ homepage: http://guides.rails-on-services.org/
156
+ licenses:
157
+ - MIT
158
+ metadata: {}
159
+ post_install_message:
160
+ rdoc_options: []
161
+ require_paths:
162
+ - lib
163
+ required_ruby_version: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">"
166
+ - !ruby/object:Gem::Version
167
+ version: 2.6.0
168
+ - - "<"
169
+ - !ruby/object:Gem::Version
170
+ version: '2.7'
171
+ required_rubygems_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">"
174
+ - !ruby/object:Gem::Version
175
+ version: 1.3.1
176
+ requirements: []
177
+ rubygems_version: 3.0.3
178
+ signing_key:
179
+ specification_version: 4
180
+ summary: Provides communication tools, e.g. Twilio to the Ros Platform
181
+ test_files: []