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.
- checksums.yaml +4 -4
- data/app/clients/disco_app/graphql_client.rb +85 -0
- data/app/controllers/disco_app/flow/actions_controller.rb +7 -0
- data/app/controllers/disco_app/flow/concerns/actions_controller.rb +47 -0
- data/app/jobs/disco_app/flow/process_action_job.rb +11 -0
- data/app/jobs/disco_app/flow/process_trigger_job.rb +11 -0
- data/app/jobs/disco_app/shop_job.rb +8 -9
- data/app/models/disco_app/concerns/renders_assets.rb +1 -1
- data/app/models/disco_app/concerns/shop.rb +4 -5
- data/app/models/disco_app/flow/action.rb +7 -0
- data/app/models/disco_app/flow/concerns/action.rb +24 -0
- data/app/models/disco_app/flow/concerns/trigger.rb +24 -0
- data/app/models/disco_app/flow/trigger.rb +7 -0
- data/app/services/disco_app/flow/create_action.rb +35 -0
- data/app/services/disco_app/flow/create_trigger.rb +34 -0
- data/app/services/disco_app/flow/process_action.rb +50 -0
- data/app/services/disco_app/flow/process_trigger.rb +52 -0
- data/config/routes.rb +7 -1
- data/db/migrate/20150525000000_create_shops_if_not_existent.rb +80 -80
- data/db/migrate/20170315062548_create_disco_app_sources.rb +2 -0
- data/db/migrate/20170315062629_add_sources_to_shop_subscriptions.rb +2 -0
- data/db/migrate/20170327214540_create_disco_app_users.rb +2 -1
- data/db/migrate/20170606160751_fix_disco_app_users_index.rb +2 -0
- data/db/migrate/20181229100327_create_flow_actions_and_triggers.rb +32 -0
- data/lib/disco_app/configuration.rb +4 -0
- data/lib/disco_app/version.rb +1 -1
- data/lib/generators/disco_app/disco_app_generator.rb +24 -8
- data/lib/generators/disco_app/templates/config/appsignal.yml +12 -0
- data/lib/generators/disco_app/templates/config/cable.yml.tt +11 -0
- data/lib/generators/disco_app/templates/config/database.yml.tt +6 -3
- data/lib/generators/disco_app/templates/config/environments/staging.rb +108 -0
- data/lib/generators/disco_app/templates/config/newrelic.yml +3 -0
- data/lib/generators/disco_app/templates/controllers/home_controller.rb +1 -0
- data/lib/generators/disco_app/templates/initializers/session_store.rb +1 -1
- data/lib/generators/disco_app/templates/root/.env +3 -0
- data/lib/generators/disco_app/templates/root/.rubocop.yml +223 -158
- data/test/dummy/config/database.yml +3 -0
- data/test/dummy/config/environments/staging.rb +85 -0
- data/test/dummy/config/secrets.yml +3 -0
- data/test/dummy/db/schema.rb +39 -11
- data/test/services/disco_app/flow/create_action_test.rb +51 -0
- data/test/services/disco_app/flow/create_trigger_test.rb +56 -0
- data/test/services/disco_app/flow/process_action_test.rb +68 -0
- data/test/services/disco_app/flow/process_trigger_test.rb +61 -0
- data/test/vcr/flow_trigger_invalid_title.yml +35 -0
- data/test/vcr/flow_trigger_valid.yml +38 -0
- metadata +66 -11
- data/app/clients/disco_app/rollbar_client.rb +0 -53
- data/app/clients/disco_app/rollbar_client_error.rb +0 -2
- data/lib/generators/disco_app/templates/initializers/rollbar.rb +0 -23
- data/lib/tasks/rollbar.rake +0 -24
data/test/dummy/db/schema.rb
CHANGED
@@ -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:
|
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 "
|
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.
|
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:
|
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.
|
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.
|
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:
|
328
|
+
name: appsignal
|
329
329
|
requirement: !ruby/object:Gem::Requirement
|
330
330
|
requirements:
|
331
331
|
- - "~>"
|
332
332
|
- !ruby/object:Gem::Version
|
333
|
-
version: '2.
|
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.
|
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/
|
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
|