disco_app 0.15.2 → 0.16.1

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 +4 -4
  2. data/app/clients/disco_app/graphql_client.rb +85 -0
  3. data/app/controllers/disco_app/flow/actions_controller.rb +7 -0
  4. data/app/controllers/disco_app/flow/concerns/actions_controller.rb +47 -0
  5. data/app/jobs/disco_app/flow/process_action_job.rb +11 -0
  6. data/app/jobs/disco_app/flow/process_trigger_job.rb +11 -0
  7. data/app/jobs/disco_app/shop_job.rb +8 -9
  8. data/app/models/disco_app/concerns/renders_assets.rb +1 -1
  9. data/app/models/disco_app/concerns/shop.rb +4 -5
  10. data/app/models/disco_app/flow/action.rb +7 -0
  11. data/app/models/disco_app/flow/concerns/action.rb +24 -0
  12. data/app/models/disco_app/flow/concerns/trigger.rb +24 -0
  13. data/app/models/disco_app/flow/trigger.rb +7 -0
  14. data/app/services/disco_app/flow/create_action.rb +35 -0
  15. data/app/services/disco_app/flow/create_trigger.rb +34 -0
  16. data/app/services/disco_app/flow/process_action.rb +50 -0
  17. data/app/services/disco_app/flow/process_trigger.rb +52 -0
  18. data/config/routes.rb +7 -1
  19. data/db/migrate/20150525000000_create_shops_if_not_existent.rb +80 -80
  20. data/db/migrate/20170315062548_create_disco_app_sources.rb +2 -0
  21. data/db/migrate/20170315062629_add_sources_to_shop_subscriptions.rb +2 -0
  22. data/db/migrate/20170327214540_create_disco_app_users.rb +2 -1
  23. data/db/migrate/20170606160751_fix_disco_app_users_index.rb +2 -0
  24. data/db/migrate/20181229100327_create_flow_actions_and_triggers.rb +32 -0
  25. data/lib/disco_app/configuration.rb +4 -0
  26. data/lib/disco_app/version.rb +1 -1
  27. data/lib/generators/disco_app/disco_app_generator.rb +24 -8
  28. data/lib/generators/disco_app/templates/config/appsignal.yml +12 -0
  29. data/lib/generators/disco_app/templates/config/cable.yml.tt +11 -0
  30. data/lib/generators/disco_app/templates/config/database.yml.tt +6 -3
  31. data/lib/generators/disco_app/templates/config/environments/staging.rb +108 -0
  32. data/lib/generators/disco_app/templates/config/newrelic.yml +3 -0
  33. data/lib/generators/disco_app/templates/controllers/home_controller.rb +1 -0
  34. data/lib/generators/disco_app/templates/initializers/session_store.rb +1 -1
  35. data/lib/generators/disco_app/templates/root/.env +3 -0
  36. data/lib/generators/disco_app/templates/root/.rubocop.yml +223 -158
  37. data/test/dummy/config/database.yml +3 -0
  38. data/test/dummy/config/environments/staging.rb +85 -0
  39. data/test/dummy/config/secrets.yml +3 -0
  40. data/test/dummy/db/schema.rb +39 -11
  41. data/test/services/disco_app/flow/create_action_test.rb +51 -0
  42. data/test/services/disco_app/flow/create_trigger_test.rb +56 -0
  43. data/test/services/disco_app/flow/process_action_test.rb +68 -0
  44. data/test/services/disco_app/flow/process_trigger_test.rb +61 -0
  45. data/test/vcr/flow_trigger_invalid_title.yml +35 -0
  46. data/test/vcr/flow_trigger_valid.yml +38 -0
  47. metadata +66 -11
  48. data/app/clients/disco_app/rollbar_client.rb +0 -53
  49. data/app/clients/disco_app/rollbar_client_error.rb +0 -2
  50. data/lib/generators/disco_app/templates/initializers/rollbar.rb +0 -23
  51. data/lib/tasks/rollbar.rake +0 -24
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 20170606160751) do
13
+ ActiveRecord::Schema.define(version: 2018_12_29_100327) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -24,12 +24,12 @@ ActiveRecord::Schema.define(version: 20170606160751) do
24
24
  t.index ["token"], name: "index_carts_on_token", unique: true
25
25
  end
26
26
 
27
- create_table "disco_app_app_settings", force: :cascade do |t|
27
+ create_table "disco_app_app_settings", id: :serial, force: :cascade do |t|
28
28
  t.datetime "created_at", null: false
29
29
  t.datetime "updated_at", null: false
30
30
  end
31
31
 
32
- create_table "disco_app_application_charges", force: :cascade do |t|
32
+ create_table "disco_app_application_charges", id: :serial, force: :cascade do |t|
33
33
  t.bigint "shop_id"
34
34
  t.bigint "subscription_id"
35
35
  t.integer "status", default: 0
@@ -39,7 +39,33 @@ ActiveRecord::Schema.define(version: 20170606160751) do
39
39
  t.string "confirmation_url"
40
40
  end
41
41
 
42
- create_table "disco_app_plan_codes", force: :cascade do |t|
42
+ create_table "disco_app_flow_actions", force: :cascade do |t|
43
+ t.bigint "shop_id"
44
+ t.string "action_id"
45
+ t.string "action_run_id"
46
+ t.jsonb "properties", default: {}
47
+ t.integer "status", default: 0
48
+ t.datetime "processed_at"
49
+ t.jsonb "processing_errors", default: []
50
+ t.datetime "created_at", null: false
51
+ t.datetime "updated_at", null: false
52
+ t.index ["action_run_id"], name: "index_disco_app_flow_actions_on_action_run_id", unique: true
53
+ end
54
+
55
+ create_table "disco_app_flow_triggers", force: :cascade do |t|
56
+ t.bigint "shop_id"
57
+ t.string "title"
58
+ t.string "resource_name"
59
+ t.string "resource_url"
60
+ t.jsonb "properties", default: {}
61
+ t.integer "status", default: 0
62
+ t.datetime "processed_at"
63
+ t.jsonb "processing_errors", default: []
64
+ t.datetime "created_at", null: false
65
+ t.datetime "updated_at", null: false
66
+ end
67
+
68
+ create_table "disco_app_plan_codes", id: :serial, force: :cascade do |t|
43
69
  t.bigint "plan_id"
44
70
  t.string "code"
45
71
  t.integer "trial_period_days"
@@ -49,7 +75,7 @@ ActiveRecord::Schema.define(version: 20170606160751) do
49
75
  t.integer "status", default: 0
50
76
  end
51
77
 
52
- create_table "disco_app_plans", force: :cascade do |t|
78
+ create_table "disco_app_plans", id: :serial, force: :cascade do |t|
53
79
  t.integer "status", default: 0
54
80
  t.string "name"
55
81
  t.integer "plan_type", default: 0
@@ -62,7 +88,7 @@ ActiveRecord::Schema.define(version: 20170606160751) do
62
88
  t.integer "interval_count", default: 1
63
89
  end
64
90
 
65
- create_table "disco_app_recurring_application_charges", force: :cascade do |t|
91
+ create_table "disco_app_recurring_application_charges", id: :serial, force: :cascade do |t|
66
92
  t.bigint "shop_id"
67
93
  t.bigint "subscription_id"
68
94
  t.integer "status", default: 0
@@ -72,7 +98,7 @@ ActiveRecord::Schema.define(version: 20170606160751) do
72
98
  t.string "confirmation_url"
73
99
  end
74
100
 
75
- create_table "disco_app_sessions", force: :cascade do |t|
101
+ create_table "disco_app_sessions", id: :serial, force: :cascade do |t|
76
102
  t.string "session_id", null: false
77
103
  t.text "data"
78
104
  t.datetime "created_at", null: false
@@ -82,7 +108,7 @@ ActiveRecord::Schema.define(version: 20170606160751) do
82
108
  t.index ["updated_at"], name: "index_disco_app_sessions_on_updated_at"
83
109
  end
84
110
 
85
- create_table "disco_app_shops", force: :cascade do |t|
111
+ create_table "disco_app_shops", id: :serial, force: :cascade do |t|
86
112
  t.string "shopify_domain", null: false
87
113
  t.string "shopify_token", null: false
88
114
  t.datetime "created_at", null: false
@@ -95,7 +121,7 @@ ActiveRecord::Schema.define(version: 20170606160751) do
95
121
  t.index ["shopify_domain"], name: "index_disco_app_shops_on_shopify_domain", unique: true
96
122
  end
97
123
 
98
- create_table "disco_app_sources", force: :cascade do |t|
124
+ create_table "disco_app_sources", id: :serial, force: :cascade do |t|
99
125
  t.string "source"
100
126
  t.string "name"
101
127
  t.datetime "created_at", null: false
@@ -103,7 +129,7 @@ ActiveRecord::Schema.define(version: 20170606160751) do
103
129
  t.index ["source"], name: "index_disco_app_sources_on_source"
104
130
  end
105
131
 
106
- create_table "disco_app_subscriptions", force: :cascade do |t|
132
+ create_table "disco_app_subscriptions", id: :serial, force: :cascade do |t|
107
133
  t.integer "shop_id"
108
134
  t.integer "plan_id"
109
135
  t.integer "status"
@@ -121,7 +147,7 @@ ActiveRecord::Schema.define(version: 20170606160751) do
121
147
  t.index ["shop_id"], name: "index_disco_app_subscriptions_on_shop_id"
122
148
  end
123
149
 
124
- create_table "disco_app_users", force: :cascade do |t|
150
+ create_table "disco_app_users", id: :serial, force: :cascade do |t|
125
151
  t.bigint "shop_id"
126
152
  t.string "first_name"
127
153
  t.string "last_name"
@@ -154,6 +180,8 @@ ActiveRecord::Schema.define(version: 20170606160751) do
154
180
  add_foreign_key "carts", "disco_app_shops", column: "shop_id"
155
181
  add_foreign_key "disco_app_application_charges", "disco_app_shops", column: "shop_id"
156
182
  add_foreign_key "disco_app_application_charges", "disco_app_subscriptions", column: "subscription_id"
183
+ add_foreign_key "disco_app_flow_actions", "disco_app_shops", column: "shop_id", on_delete: :cascade
184
+ add_foreign_key "disco_app_flow_triggers", "disco_app_shops", column: "shop_id", on_delete: :cascade
157
185
  add_foreign_key "disco_app_plan_codes", "disco_app_plans", column: "plan_id"
158
186
  add_foreign_key "disco_app_recurring_application_charges", "disco_app_shops", column: "shop_id"
159
187
  add_foreign_key "disco_app_recurring_application_charges", "disco_app_subscriptions", column: "subscription_id"
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+
3
+ module DiscoApp
4
+ module Flow
5
+ class CreateActionTest < ActiveSupport::TestCase
6
+
7
+ include ActiveJob::TestHelper
8
+
9
+ def setup
10
+ @shop = disco_app_shops(:widget_store)
11
+ end
12
+
13
+ def teardown
14
+ @shop = nil
15
+ end
16
+
17
+ test 'call to create flow action creates model' do
18
+ result = CreateAction.call(shop: @shop, action_id: action_id, action_run_id: action_run_id, properties: properties)
19
+ assert result.success?
20
+ assert result.action.persisted?
21
+ assert result.action.pending?
22
+ assert_equal action_id, result.action.action_id
23
+ assert_equal action_run_id, result.action.action_run_id
24
+ assert_equal properties, result.action.properties
25
+ end
26
+
27
+ test 'call to create flow action enqueues processing job' do
28
+ assert_enqueued_with(job: ProcessActionJob) do
29
+ CreateAction.call(shop: @shop, action_id: action_id, action_run_id: action_run_id, properties: properties)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def action_id
36
+ 'test_action_id'
37
+ end
38
+
39
+ def action_run_id
40
+ 'bdb15e45-4f9d-4c80-88c8-7b43a24edaac-30892-cc8eb62a-14db-43fc-bc33-d6dea41ae623'
41
+ end
42
+
43
+ def properties
44
+ {
45
+ 'customer_email' => 'name@example.com'
46
+ }
47
+ end
48
+
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,56 @@
1
+ require 'test_helper'
2
+
3
+ module DiscoApp
4
+ module Flow
5
+ class CreateTriggerTest < ActiveSupport::TestCase
6
+
7
+ include ActiveJob::TestHelper
8
+
9
+ def setup
10
+ @shop = disco_app_shops(:widget_store)
11
+ end
12
+
13
+ def teardown
14
+ @shop = nil
15
+ end
16
+
17
+ test 'call to create flow trigger creates model' do
18
+ result = CreateTrigger.call(shop: @shop, title: title, resource_name: resource_name, resource_url: resource_url, properties: properties)
19
+ assert result.success?
20
+ assert result.trigger.persisted?
21
+ assert result.trigger.pending?
22
+ assert_equal title, result.trigger.title
23
+ assert_equal resource_name, result.trigger.resource_name
24
+ assert_equal resource_url, result.trigger.resource_url
25
+ assert_equal properties, result.trigger.properties
26
+ end
27
+
28
+ test 'call to create flow trigger enqueues processing job' do
29
+ assert_enqueued_with(job: ProcessTriggerJob) do
30
+ CreateTrigger.call(shop: @shop, title: title, resource_name: resource_name, resource_url: resource_url, properties: properties)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def title
37
+ 'Test trigger'
38
+ end
39
+
40
+ def resource_name
41
+ 'test_resource_name'
42
+ end
43
+
44
+ def resource_url
45
+ 'https://example.com/test-resource-url'
46
+ end
47
+
48
+ def properties
49
+ {
50
+ 'Customer email' => 'name@example.com'
51
+ }
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,68 @@
1
+ require 'test_helper'
2
+ require 'interactor'
3
+
4
+ class TestActionId
5
+
6
+ include Interactor
7
+
8
+ def call
9
+ # noop
10
+ end
11
+
12
+ end
13
+
14
+ module DiscoApp
15
+ module Flow
16
+ class ProcessActionTest < ActiveSupport::TestCase
17
+
18
+ include ActiveJob::TestHelper
19
+
20
+ def setup
21
+ @shop = disco_app_shops(:widget_store)
22
+ @action = @shop.flow_actions.create(
23
+ action_id: 'test_action_id',
24
+ action_run_id: 'bdb15e45-4f9d-4c80-88c8-7b43a24edaac-30892-cc8eb62a-14db-43fc-bc33-d6dea41ae623',
25
+ properties: { 'customer_email' => 'name@example.com' }
26
+ )
27
+ @now = Time.parse('2018-12-29T00:00:00Z')
28
+ Timecop.freeze(@now)
29
+ end
30
+
31
+ def teardown
32
+ @shop = nil
33
+ @action = nil
34
+ @now = nil
35
+ Timecop.return
36
+ end
37
+
38
+ test 'call to process action that has already succeeded fails' do
39
+ @action.succeeded!
40
+ result = ProcessAction.call(action: @action)
41
+ assert_not result.success?
42
+ end
43
+
44
+ test 'call to process trigger that has already failed fails' do
45
+ @action.failed!
46
+ result = ProcessAction.call(action: @action)
47
+ assert_not result.success?
48
+ end
49
+
50
+ test 'processing pending action with existing service class succeeds' do
51
+ result = ProcessAction.call(action: @action)
52
+ assert result.success?
53
+ assert @action.succeeded?
54
+ assert_equal @now, @action.processed_at
55
+ end
56
+
57
+ test 'processing pending action with non-existent service class does not succeed' do
58
+ @action.update!(action_id: 'unknown_test_action_id')
59
+ result = ProcessAction.call(action: @action)
60
+ assert_not result.success?
61
+ assert @action.failed?
62
+ assert_equal @now, @action.processed_at
63
+ assert_equal ['Could not find service class for unknown_test_action_id'], @action.processing_errors
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,61 @@
1
+ require 'test_helper'
2
+
3
+ module DiscoApp
4
+ module Flow
5
+ class ProcessTriggerTest < ActiveSupport::TestCase
6
+
7
+ include ActiveJob::TestHelper
8
+
9
+ def setup
10
+ @shop = disco_app_shops(:widget_store)
11
+ @trigger = @shop.flow_triggers.create(
12
+ title: 'Test trigger',
13
+ resource_name: 'test_resource_name',
14
+ resource_url: 'https://example.com/test-resource-url',
15
+ properties: { 'Customer email' => 'name@example.com' }
16
+ )
17
+ @now = Time.parse('2018-12-29T00:00:00Z')
18
+ Timecop.freeze(@now)
19
+ end
20
+
21
+ def teardown
22
+ @shop = nil
23
+ @trigger = nil
24
+ @now = nil
25
+ Timecop.return
26
+ end
27
+
28
+ test 'call to process trigger that has already succeeded fails' do
29
+ @trigger.succeeded!
30
+ result = ProcessTrigger.call(trigger: @trigger)
31
+ assert_not result.success?
32
+ end
33
+
34
+ test 'call to process trigger that has already failed fails' do
35
+ @trigger.failed!
36
+ result = ProcessTrigger.call(trigger: @trigger)
37
+ assert_not result.success?
38
+ end
39
+
40
+ test 'processing valid pending trigger succeeds and makes the expected api call' do
41
+ VCR.use_cassette('flow_trigger_valid') do
42
+ result = ProcessTrigger.call(trigger: @trigger)
43
+ assert result.success?
44
+ assert @trigger.succeeded?
45
+ assert_equal @now, @trigger.processed_at
46
+ end
47
+ end
48
+
49
+ test 'processing invalid pending trigger makes the expected api call with errors logged' do
50
+ VCR.use_cassette('flow_trigger_invalid_title') do
51
+ result = ProcessTrigger.call(trigger: @trigger)
52
+ assert_not result.success?
53
+ assert @trigger.failed?
54
+ assert_equal @now, @trigger.processed_at
55
+ assert_equal 1, @trigger.processing_errors.size
56
+ end
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,35 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://widgets.myshopify.com/admin/api/graphql.json
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"query":"\n mutation {\n flowTriggerReceive(body: \"{\\\"trigger_title\\\":\\\"Test trigger\\\",\\\"resources\\\":[{\\\"name\\\":\\\"test_resource_name\\\",\\\"url\\\":\\\"https://example.com/test-resource-url\\\"}],\\\"properties\\\":{\\\"Customer email\\\":\\\"name@example.com\\\"}}\") {\n userErrors {\n field,\n message\n }\n }\n }\n "}'
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Type:
15
+ - application/json
16
+ X-Shopify-Access-Token:
17
+ - 00000000000000000000000000000000
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Sat, 29 Dec 2018 11:44:11 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ body:
30
+ encoding: ASCII-8BIT
31
+ string: '{"data":{"flowTriggerReceive":{"userErrors":[{"field":["body"],"message":"Errors
32
+ validating schema:\n Invalid trigger_title ''Test trigger''.\n"}]}},"extensions":{"cost":{"requestedQueryCost":1,"actualQueryCost":1,"throttleStatus":{"maximumAvailable":2000.0,"currentlyAvailable":1999,"restoreRate":100.0}}}}'
33
+ http_version:
34
+ recorded_at: Sat, 29 Dec 2018 11:44:11 GMT
35
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,38 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://widgets.myshopify.com/admin/api/graphql.json
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"query":"\n mutation {\n flowTriggerReceive(body: \"{\\\"trigger_title\\\":\\\"Test trigger\\\",\\\"resources\\\":[{\\\"name\\\":\\\"test_resource_name\\\",\\\"url\\\":\\\"https://example.com/test-resource-url\\\"}],\\\"properties\\\":{\\\"Customer email\\\":\\\"name@example.com\\\"}}\") {\n userErrors {\n field,\n message\n }\n }\n }\n "}'
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ Content-Type:
15
+ - application/json
16
+ X-Shopify-Access-Token:
17
+ - 00000000000000000000000000000000
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Sat, 29 Dec 2018 11:46:27 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ body:
34
+ encoding: ASCII-8BIT
35
+ string: '{"data":{"flowTriggerReceive":{"userErrors":[]}},"extensions":{"cost":{"requestedQueryCost":1,"actualQueryCost":1,"throttleStatus":{"maximumAvailable":2000.0,"currentlyAvailable":1999,"restoreRate":100.0}}}}'
36
+ http_version:
37
+ recorded_at: Sat, 29 Dec 2018 11:46:27 GMT
38
+ recorded_with: VCR 3.0.3
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disco_app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.2
4
+ version: 0.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Ballard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-09 00:00:00.000000000 Z
11
+ date: 2022-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 5.1.0
19
+ version: 5.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 5.1.0
26
+ version: 5.2.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sass-rails
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -325,19 +325,19 @@ dependencies:
325
325
  - !ruby/object:Gem::Version
326
326
  version: '1.7'
327
327
  - !ruby/object:Gem::Dependency
328
- name: rollbar
328
+ name: appsignal
329
329
  requirement: !ruby/object:Gem::Requirement
330
330
  requirements:
331
331
  - - "~>"
332
332
  - !ruby/object:Gem::Version
333
- version: '2.14'
333
+ version: '2.7'
334
334
  type: :runtime
335
335
  prerelease: false
336
336
  version_requirements: !ruby/object:Gem::Requirement
337
337
  requirements:
338
338
  - - "~>"
339
339
  - !ruby/object:Gem::Version
340
- version: '2.14'
340
+ version: '2.7'
341
341
  - !ruby/object:Gem::Dependency
342
342
  name: oj
343
343
  requirement: !ruby/object:Gem::Requirement
@@ -394,6 +394,34 @@ dependencies:
394
394
  - - "~>"
395
395
  - !ruby/object:Gem::Version
396
396
  version: '1.0'
397
+ - !ruby/object:Gem::Dependency
398
+ name: interactor
399
+ requirement: !ruby/object:Gem::Requirement
400
+ requirements:
401
+ - - ">="
402
+ - !ruby/object:Gem::Version
403
+ version: '0'
404
+ type: :runtime
405
+ prerelease: false
406
+ version_requirements: !ruby/object:Gem::Requirement
407
+ requirements:
408
+ - - ">="
409
+ - !ruby/object:Gem::Version
410
+ version: '0'
411
+ - !ruby/object:Gem::Dependency
412
+ name: interactor-rails
413
+ requirement: !ruby/object:Gem::Requirement
414
+ requirements:
415
+ - - ">="
416
+ - !ruby/object:Gem::Version
417
+ version: '0'
418
+ type: :runtime
419
+ prerelease: false
420
+ version_requirements: !ruby/object:Gem::Requirement
421
+ requirements:
422
+ - - ">="
423
+ - !ruby/object:Gem::Version
424
+ version: '0'
397
425
  - !ruby/object:Gem::Dependency
398
426
  name: dotenv-rails
399
427
  requirement: !ruby/object:Gem::Requirement
@@ -564,8 +592,7 @@ files:
564
592
  - app/assets/stylesheets/disco_app/ui-kit/_ui-type.scss
565
593
  - app/clients/disco_app/api_client.rb
566
594
  - app/clients/disco_app/disco_api_error.rb
567
- - app/clients/disco_app/rollbar_client.rb
568
- - app/clients/disco_app/rollbar_client_error.rb
595
+ - app/clients/disco_app/graphql_client.rb
569
596
  - app/controllers/disco_app/admin/app_settings_controller.rb
570
597
  - app/controllers/disco_app/admin/application_controller.rb
571
598
  - app/controllers/disco_app/admin/concerns/app_settings_controller.rb
@@ -585,6 +612,8 @@ files:
585
612
  - app/controllers/disco_app/concerns/carrier_request_controller.rb
586
613
  - app/controllers/disco_app/concerns/user_authenticated_controller.rb
587
614
  - app/controllers/disco_app/concerns/webhooks_controller.rb
615
+ - app/controllers/disco_app/flow/actions_controller.rb
616
+ - app/controllers/disco_app/flow/concerns/actions_controller.rb
588
617
  - app/controllers/disco_app/frame_controller.rb
589
618
  - app/controllers/disco_app/install_controller.rb
590
619
  - app/controllers/disco_app/subscriptions_controller.rb
@@ -604,6 +633,8 @@ files:
604
633
  - app/jobs/disco_app/concerns/synchronise_resources_job.rb
605
634
  - app/jobs/disco_app/concerns/synchronise_users_job.rb
606
635
  - app/jobs/disco_app/concerns/synchronise_webhooks_job.rb
636
+ - app/jobs/disco_app/flow/process_action_job.rb
637
+ - app/jobs/disco_app/flow/process_trigger_job.rb
607
638
  - app/jobs/disco_app/render_asset_group_job.rb
608
639
  - app/jobs/disco_app/send_subscription_job.rb
609
640
  - app/jobs/disco_app/shop_job.rb
@@ -628,6 +659,10 @@ files:
628
659
  - app/models/disco_app/concerns/synchronises.rb
629
660
  - app/models/disco_app/concerns/taggable.rb
630
661
  - app/models/disco_app/concerns/user.rb
662
+ - app/models/disco_app/flow/action.rb
663
+ - app/models/disco_app/flow/concerns/action.rb
664
+ - app/models/disco_app/flow/concerns/trigger.rb
665
+ - app/models/disco_app/flow/trigger.rb
631
666
  - app/models/disco_app/plan.rb
632
667
  - app/models/disco_app/plan_code.rb
633
668
  - app/models/disco_app/recurring_application_charge.rb
@@ -640,6 +675,10 @@ files:
640
675
  - app/resources/disco_app/admin/resources/shop_resource.rb
641
676
  - app/services/disco_app/carrier_request_service.rb
642
677
  - app/services/disco_app/charges_service.rb
678
+ - app/services/disco_app/flow/create_action.rb
679
+ - app/services/disco_app/flow/create_trigger.rb
680
+ - app/services/disco_app/flow/process_action.rb
681
+ - app/services/disco_app/flow/process_trigger.rb
643
682
  - app/services/disco_app/partner_app_service.rb
644
683
  - app/services/disco_app/proxy_service.rb
645
684
  - app/services/disco_app/request_validation_service.rb
@@ -681,6 +720,7 @@ files:
681
720
  - db/migrate/20170315062629_add_sources_to_shop_subscriptions.rb
682
721
  - db/migrate/20170327214540_create_disco_app_users.rb
683
722
  - db/migrate/20170606160751_fix_disco_app_users_index.rb
723
+ - db/migrate/20181229100327_create_flow_actions_and_triggers.rb
684
724
  - lib/disco_app.rb
685
725
  - lib/disco_app/configuration.rb
686
726
  - lib/disco_app/constants.rb
@@ -694,12 +734,14 @@ files:
694
734
  - lib/generators/disco_app/templates/assets/javascripts/application.js
695
735
  - lib/generators/disco_app/templates/assets/javascripts/components.js
696
736
  - lib/generators/disco_app/templates/assets/stylesheets/application.scss
737
+ - lib/generators/disco_app/templates/config/appsignal.yml
738
+ - lib/generators/disco_app/templates/config/cable.yml.tt
697
739
  - lib/generators/disco_app/templates/config/database.yml.tt
740
+ - lib/generators/disco_app/templates/config/environments/staging.rb
698
741
  - lib/generators/disco_app/templates/config/newrelic.yml
699
742
  - lib/generators/disco_app/templates/config/puma.rb
700
743
  - lib/generators/disco_app/templates/controllers/home_controller.rb
701
744
  - lib/generators/disco_app/templates/initializers/disco_app.rb
702
- - lib/generators/disco_app/templates/initializers/rollbar.rb
703
745
  - lib/generators/disco_app/templates/initializers/session_store.rb
704
746
  - lib/generators/disco_app/templates/initializers/shopify_app.rb
705
747
  - lib/generators/disco_app/templates/initializers/shopify_session_repository.rb
@@ -719,7 +761,6 @@ files:
719
761
  - lib/tasks/carrier_service.rake
720
762
  - lib/tasks/database.rake
721
763
  - lib/tasks/partner_app.rake
722
- - lib/tasks/rollbar.rake
723
764
  - lib/tasks/sessions.rake
724
765
  - lib/tasks/shops.rake
725
766
  - lib/tasks/start.rake
@@ -774,6 +815,7 @@ files:
774
815
  - test/dummy/config/environment.rb
775
816
  - test/dummy/config/environments/development.rb
776
817
  - test/dummy/config/environments/production.rb
818
+ - test/dummy/config/environments/staging.rb
777
819
  - test/dummy/config/environments/test.rb
778
820
  - test/dummy/config/initializers/assets.rb
779
821
  - test/dummy/config/initializers/backtrace_silencers.rb
@@ -18753,10 +18795,16 @@ files:
18753
18795
  - test/models/disco_app/shop_test.rb
18754
18796
  - test/models/disco_app/subscription_test.rb
18755
18797
  - test/services/disco_app/charges_service_test.rb
18798
+ - test/services/disco_app/flow/create_action_test.rb
18799
+ - test/services/disco_app/flow/create_trigger_test.rb
18800
+ - test/services/disco_app/flow/process_action_test.rb
18801
+ - test/services/disco_app/flow/process_trigger_test.rb
18756
18802
  - test/services/disco_app/subscription_service_test.rb
18757
18803
  - test/support/test_file_fixtures.rb
18758
18804
  - test/support/test_shopify_api.rb
18759
18805
  - test/test_helper.rb
18806
+ - test/vcr/flow_trigger_invalid_title.yml
18807
+ - test/vcr/flow_trigger_valid.yml
18760
18808
  - test/vcr/webhook_failure.yml
18761
18809
  homepage: https://github.com/discolabs/disco_app/
18762
18810
  licenses:
@@ -18819,6 +18867,7 @@ test_files:
18819
18867
  - test/dummy/config/routes.rb
18820
18868
  - test/dummy/config/locales/en.yml
18821
18869
  - test/dummy/config/environments/production.rb
18870
+ - test/dummy/config/environments/staging.rb
18822
18871
  - test/dummy/config/environments/development.rb
18823
18872
  - test/dummy/config/environments/test.rb
18824
18873
  - test/dummy/config/environment.rb
@@ -36734,7 +36783,9 @@ test_files:
36734
36783
  - test/models/disco_app/can_be_liquified_test.rb
36735
36784
  - test/models/disco_app/subscription_test.rb
36736
36785
  - test/disco_app_test.rb
36786
+ - test/vcr/flow_trigger_valid.yml
36737
36787
  - test/vcr/webhook_failure.yml
36788
+ - test/vcr/flow_trigger_invalid_title.yml
36738
36789
  - test/support/test_shopify_api.rb
36739
36790
  - test/support/test_file_fixtures.rb
36740
36791
  - test/fixtures/products.yml
@@ -36816,3 +36867,7 @@ test_files:
36816
36867
  - test/controllers/home_controller_test.rb
36817
36868
  - test/services/disco_app/subscription_service_test.rb
36818
36869
  - test/services/disco_app/charges_service_test.rb
36870
+ - test/services/disco_app/flow/process_trigger_test.rb
36871
+ - test/services/disco_app/flow/process_action_test.rb
36872
+ - test/services/disco_app/flow/create_trigger_test.rb
36873
+ - test/services/disco_app/flow/create_action_test.rb