disco_app 0.15.2 → 0.18.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 (310) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -5
  3. data/app/clients/disco_app/api_client.rb +25 -19
  4. data/app/clients/disco_app/graphql_client.rb +85 -0
  5. data/app/controllers/disco_app/admin/app_settings_controller.rb +2 -0
  6. data/app/controllers/disco_app/admin/application_controller.rb +1 -0
  7. data/app/controllers/disco_app/admin/concerns/app_settings_controller.rb +2 -1
  8. data/app/controllers/disco_app/admin/concerns/authenticated_controller.rb +5 -3
  9. data/app/controllers/disco_app/admin/concerns/plans_controller.rb +3 -2
  10. data/app/controllers/disco_app/admin/concerns/shops_controller.rb +1 -0
  11. data/app/controllers/disco_app/admin/concerns/sources_controller.rb +2 -1
  12. data/app/controllers/disco_app/admin/concerns/subscriptions_controller.rb +3 -2
  13. data/app/controllers/disco_app/admin/plans_controller.rb +2 -0
  14. data/app/controllers/disco_app/admin/resources/shops_controller.rb +2 -0
  15. data/app/controllers/disco_app/admin/shops_controller.rb +2 -0
  16. data/app/controllers/disco_app/admin/sources_controller.rb +2 -0
  17. data/app/controllers/disco_app/admin/subscriptions_controller.rb +2 -0
  18. data/app/controllers/disco_app/charges_controller.rb +6 -7
  19. data/app/controllers/disco_app/concerns/app_proxy_controller.rb +6 -6
  20. data/app/controllers/disco_app/concerns/authenticated_controller.rb +26 -27
  21. data/app/controllers/disco_app/concerns/carrier_request_controller.rb +22 -11
  22. data/app/controllers/disco_app/concerns/user_authenticated_controller.rb +1 -0
  23. data/app/controllers/disco_app/concerns/webhooks_controller.rb +13 -12
  24. data/app/controllers/disco_app/flow/actions_controller.rb +9 -0
  25. data/app/controllers/disco_app/flow/concerns/actions_controller.rb +23 -0
  26. data/app/controllers/disco_app/flow/concerns/trigger_usage_controller.rb +29 -0
  27. data/app/controllers/disco_app/flow/concerns/verifies_flow_payload.rb +39 -0
  28. data/app/controllers/disco_app/flow/trigger_usage_controller.rb +9 -0
  29. data/app/controllers/disco_app/frame_controller.rb +0 -1
  30. data/app/controllers/disco_app/install_controller.rb +3 -6
  31. data/app/controllers/disco_app/subscriptions_controller.rb +12 -4
  32. data/app/controllers/disco_app/user_sessions_controller.rb +1 -0
  33. data/app/controllers/disco_app/webhooks_controller.rb +2 -0
  34. data/app/controllers/sessions_controller.rb +5 -6
  35. data/app/helpers/disco_app/application_helper.rb +7 -7
  36. data/app/jobs/disco_app/app_installed_job.rb +2 -0
  37. data/app/jobs/disco_app/app_uninstalled_job.rb +2 -0
  38. data/app/jobs/disco_app/concerns/app_installed_job.rb +2 -3
  39. data/app/jobs/disco_app/concerns/app_uninstalled_job.rb +2 -1
  40. data/app/jobs/disco_app/concerns/customers_data_request_job.rb +13 -0
  41. data/app/jobs/disco_app/concerns/customers_redact_job.rb +13 -0
  42. data/app/jobs/disco_app/concerns/render_asset_group_job.rb +1 -0
  43. data/app/jobs/disco_app/concerns/shop_redact_job.rb +13 -0
  44. data/app/jobs/disco_app/concerns/shop_update_job.rb +9 -2
  45. data/app/jobs/disco_app/concerns/subscription_changed_job.rb +2 -1
  46. data/app/jobs/disco_app/concerns/synchronise_carrier_service_job.rb +8 -7
  47. data/app/jobs/disco_app/concerns/synchronise_resources_job.rb +1 -0
  48. data/app/jobs/disco_app/concerns/synchronise_users_job.rb +6 -3
  49. data/app/jobs/disco_app/concerns/synchronise_webhooks_job.rb +24 -11
  50. data/app/jobs/disco_app/customers_data_request_job.rb +5 -0
  51. data/app/jobs/disco_app/customers_redact_job.rb +5 -0
  52. data/app/jobs/disco_app/flow/process_action_job.rb +11 -0
  53. data/app/jobs/disco_app/flow/process_trigger_job.rb +11 -0
  54. data/app/jobs/disco_app/render_asset_group_job.rb +2 -0
  55. data/app/jobs/disco_app/shop_job.rb +10 -10
  56. data/app/jobs/disco_app/shop_redact_job.rb +5 -0
  57. data/app/jobs/disco_app/shop_update_job.rb +2 -0
  58. data/app/jobs/disco_app/subscription_changed_job.rb +2 -0
  59. data/app/jobs/disco_app/synchronise_carrier_service_job.rb +2 -0
  60. data/app/jobs/disco_app/synchronise_resources_job.rb +2 -0
  61. data/app/jobs/disco_app/synchronise_users_job.rb +2 -0
  62. data/app/jobs/disco_app/synchronise_webhooks_job.rb +2 -0
  63. data/app/models/application_record.rb +2 -0
  64. data/app/models/disco_app/app_settings.rb +2 -0
  65. data/app/models/disco_app/application_charge.rb +1 -1
  66. data/app/models/disco_app/concerns/app_settings.rb +2 -0
  67. data/app/models/disco_app/concerns/can_be_liquified.rb +29 -14
  68. data/app/models/disco_app/concerns/has_metafields.rb +1 -2
  69. data/app/models/disco_app/concerns/plan.rb +3 -4
  70. data/app/models/disco_app/concerns/plan_code.rb +1 -2
  71. data/app/models/disco_app/concerns/renders_assets.rb +15 -21
  72. data/app/models/disco_app/concerns/shop.rb +20 -14
  73. data/app/models/disco_app/concerns/source.rb +2 -3
  74. data/app/models/disco_app/concerns/subscription.rb +3 -3
  75. data/app/models/disco_app/concerns/synchronises.rb +10 -15
  76. data/app/models/disco_app/concerns/taggable.rb +1 -0
  77. data/app/models/disco_app/concerns/user.rb +3 -2
  78. data/app/models/disco_app/flow/action.rb +9 -0
  79. data/app/models/disco_app/flow/concerns/action.rb +27 -0
  80. data/app/models/disco_app/flow/concerns/trigger.rb +28 -0
  81. data/app/models/disco_app/flow/concerns/trigger_usage.rb +17 -0
  82. data/app/models/disco_app/flow/trigger.rb +9 -0
  83. data/app/models/disco_app/flow/trigger_usage.rb +9 -0
  84. data/app/models/disco_app/plan.rb +2 -0
  85. data/app/models/disco_app/plan_code.rb +2 -0
  86. data/app/models/disco_app/session_storage.rb +5 -2
  87. data/app/models/disco_app/shop.rb +2 -0
  88. data/app/models/disco_app/source.rb +2 -0
  89. data/app/models/disco_app/subscription.rb +2 -0
  90. data/app/models/disco_app/user.rb +2 -0
  91. data/app/resources/disco_app/admin/resources/concerns/shop_resource.rb +12 -15
  92. data/app/resources/disco_app/admin/resources/shop_resource.rb +1 -0
  93. data/app/services/disco_app/carrier_request_service.rb +3 -3
  94. data/app/services/disco_app/charges_service.rb +26 -34
  95. data/app/services/disco_app/flow/create_action.rb +35 -0
  96. data/app/services/disco_app/flow/create_trigger.rb +34 -0
  97. data/app/services/disco_app/flow/process_action.rb +50 -0
  98. data/app/services/disco_app/flow/process_trigger.rb +72 -0
  99. data/app/services/disco_app/flow/update_trigger_usage.rb +42 -0
  100. data/app/services/disco_app/partner_app_service.rb +1 -1
  101. data/app/services/disco_app/proxy_service.rb +2 -2
  102. data/app/services/disco_app/request_validation_service.rb +2 -2
  103. data/app/services/disco_app/subscription_service.rb +60 -32
  104. data/app/services/disco_app/webhook_service.rb +9 -11
  105. data/app/views/layouts/admin.html.erb +1 -2
  106. data/app/views/layouts/application.html.erb +1 -2
  107. data/app/views/layouts/embedded_app.html.erb +2 -4
  108. data/app/views/layouts/embedded_app_modal.html.erb +2 -3
  109. data/app/views/shopify_app/sessions/new.html.erb +2 -4
  110. data/config/routes.rb +11 -3
  111. data/db/migrate/20150525000000_create_shops_if_not_existent.rb +80 -80
  112. data/db/migrate/20170315062548_create_disco_app_sources.rb +2 -0
  113. data/db/migrate/20170315062629_add_sources_to_shop_subscriptions.rb +3 -1
  114. data/db/migrate/20170327214540_create_disco_app_users.rb +2 -1
  115. data/db/migrate/20170606160751_fix_disco_app_users_index.rb +2 -0
  116. data/db/migrate/20181229100327_create_flow_actions_and_triggers.rb +32 -0
  117. data/db/migrate/20200405000000_create_flow_trigger_usages.rb +16 -0
  118. data/lib/disco_app/configuration.rb +12 -5
  119. data/lib/disco_app/constants.rb +4 -2
  120. data/lib/disco_app/engine.rb +1 -1
  121. data/lib/disco_app/session.rb +1 -0
  122. data/lib/disco_app/support/file_fixtures.rb +2 -1
  123. data/lib/disco_app/version.rb +3 -1
  124. data/lib/generators/disco_app/install/USAGE +5 -0
  125. data/lib/generators/disco_app/install/install_generator.rb +297 -0
  126. data/lib/generators/disco_app/{templates → install/templates}/assets/javascripts/application.js +0 -0
  127. data/lib/generators/disco_app/{templates → install/templates}/assets/javascripts/components.js +0 -0
  128. data/lib/generators/disco_app/{templates → install/templates}/assets/stylesheets/application.scss +0 -0
  129. data/lib/generators/disco_app/install/templates/config/appsignal.yml +12 -0
  130. data/lib/generators/disco_app/install/templates/config/cable.yml.tt +11 -0
  131. data/lib/generators/disco_app/{templates → install/templates}/config/database.yml.tt +6 -3
  132. data/lib/generators/disco_app/install/templates/config/environments/staging.rb +108 -0
  133. data/lib/generators/disco_app/{templates → install/templates}/config/puma.rb +0 -0
  134. data/lib/generators/disco_app/{templates → install/templates}/controllers/home_controller.rb +1 -0
  135. data/lib/generators/disco_app/{templates → install/templates}/initializers/disco_app.rb +5 -0
  136. data/lib/generators/disco_app/install/templates/initializers/session_store.rb +2 -0
  137. data/lib/generators/disco_app/install/templates/initializers/shopify_app.rb +11 -0
  138. data/lib/generators/disco_app/{templates → install/templates}/initializers/shopify_session_repository.rb +0 -0
  139. data/lib/generators/disco_app/install/templates/initializers/timber.rb +4 -0
  140. data/lib/generators/disco_app/{templates → install/templates}/root/.editorconfig +0 -0
  141. data/lib/generators/disco_app/{templates → install/templates}/root/.env +7 -0
  142. data/lib/generators/disco_app/{templates → install/templates}/root/.env.local +4 -0
  143. data/lib/generators/disco_app/{templates → install/templates}/root/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  144. data/lib/generators/disco_app/{templates → install/templates}/root/.gitignore +6 -0
  145. data/lib/generators/disco_app/install/templates/root/.rspec +1 -0
  146. data/lib/generators/disco_app/{templates → install/templates}/root/.rubocop.yml +315 -217
  147. data/lib/generators/disco_app/install/templates/root/.tool-versions +2 -0
  148. data/lib/generators/disco_app/{templates → install/templates}/root/CHECKS +0 -0
  149. data/lib/generators/disco_app/{templates → install/templates}/root/Procfile +0 -0
  150. data/lib/generators/disco_app/{templates → install/templates}/root/README.md +0 -0
  151. data/lib/generators/disco_app/install/templates/root/package.json.tt +17 -0
  152. data/lib/generators/disco_app/install/templates/spec/rails_helper.rb +40 -0
  153. data/lib/generators/disco_app/install/templates/spec/spec_helper.rb +24 -0
  154. data/lib/generators/disco_app/install/templates/spec/support/active_job.rb +13 -0
  155. data/lib/generators/disco_app/install/templates/spec/support/coveralls.rb +3 -0
  156. data/lib/generators/disco_app/install/templates/spec/support/database_cleaner.rb +17 -0
  157. data/lib/generators/disco_app/install/templates/spec/support/factory_bot.rb +3 -0
  158. data/lib/generators/disco_app/install/templates/spec/support/helpers/json_helper.rb +13 -0
  159. data/lib/generators/disco_app/install/templates/spec/support/shared_examples/a_synchronise_job.rb +12 -0
  160. data/lib/generators/disco_app/install/templates/spec/support/shoulda.rb +6 -0
  161. data/lib/generators/disco_app/install/templates/spec/support/vcr.rb +14 -0
  162. data/lib/generators/disco_app/install/templates/spec/support/webmock.rb +8 -0
  163. data/lib/generators/disco_app/{templates → install/templates}/views/home/index.html.erb +0 -0
  164. data/lib/generators/disco_app/react/USAGE +5 -0
  165. data/lib/generators/disco_app/react/react_generator.rb +108 -0
  166. data/lib/generators/disco_app/react/templates/app/controllers/embedded/api/base_controller.rb +18 -0
  167. data/lib/generators/disco_app/react/templates/app/controllers/embedded/api/home_controller.rb +10 -0
  168. data/lib/generators/disco_app/react/templates/app/controllers/embedded/api/shops_controller.rb +11 -0
  169. data/lib/generators/disco_app/react/templates/app/controllers/embedded/api/users_controller.rb +11 -0
  170. data/lib/generators/disco_app/react/templates/app/controllers/embedded/home_controller.rb +13 -0
  171. data/lib/generators/disco_app/react/templates/app/models/api_response.rb +107 -0
  172. data/lib/generators/disco_app/react/templates/app/serializers/disco_app/shop_serializer.rb +13 -0
  173. data/lib/generators/disco_app/react/templates/app/serializers/disco_app/user_serializer.rb +13 -0
  174. data/lib/generators/disco_app/react/templates/app/serializers/empty_serializer.rb +5 -0
  175. data/lib/generators/disco_app/react/templates/app/serializers/error_serializer.rb +76 -0
  176. data/lib/generators/disco_app/react/templates/app/views/embedded/home/index.html.erb +12 -0
  177. data/lib/generators/disco_app/react/templates/app/views/layouts/embedded.html.erb +10 -0
  178. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/components/App.jsx +77 -0
  179. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/components/HomePage.jsx +34 -0
  180. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/components/Shared/EmbeddedPage.jsx +70 -0
  181. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/components/Shared/ErrorBanner.jsx +58 -0
  182. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/components/Shared/PaginationWrapper.jsx +10 -0
  183. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/components/Shared/ScrollToTop.jsx +23 -0
  184. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/components/withApi.jsx +125 -0
  185. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/index.jsx +39 -0
  186. data/lib/generators/disco_app/react/templates/app/webpack/javascripts/embedded/utils.js +19 -0
  187. data/lib/generators/disco_app/react/templates/app/webpack/packs/embedded.js +2 -0
  188. data/lib/generators/disco_app/react/templates/app/webpack/stylesheets/embedded/shared/banners.scss +7 -0
  189. data/lib/generators/disco_app/react/templates/app/webpack/stylesheets/embedded/shared/busy.scss +3 -0
  190. data/lib/generators/disco_app/react/templates/app/webpack/stylesheets/embedded/shared/index.scss +3 -0
  191. data/lib/generators/disco_app/react/templates/app/webpack/stylesheets/embedded/shared/pagination.scss +5 -0
  192. data/lib/generators/disco_app/react/templates/app/webpack/stylesheets/embedded.scss +2 -0
  193. data/lib/generators/disco_app/react/templates/config/initializers/mime_types.rb +13 -0
  194. data/lib/generators/disco_app/react/templates/config/initializers/omniauth.rb +27 -0
  195. data/lib/generators/disco_app/react/templates/config/initializers/version.rb.tt +7 -0
  196. data/lib/generators/disco_app/react/templates/config/webpack/staging.js +5 -0
  197. data/lib/generators/disco_app/react/templates/config/webpack/test.js +5 -0
  198. data/lib/generators/disco_app/react/templates/config/webpacker.yml +96 -0
  199. data/lib/generators/disco_app/react/templates/root/.eslintignore +5 -0
  200. data/lib/generators/disco_app/react/templates/root/.eslintrc +69 -0
  201. data/lib/generators/disco_app/react/templates/root/.prettierrc +3 -0
  202. data/lib/generators/disco_app/react/templates/root/VERSION +1 -0
  203. data/lib/generators/disco_app/react/templates/root/babel.config.js +72 -0
  204. data/lib/generators/disco_app/react/templates/root/package.json.tt +84 -0
  205. data/lib/generators/disco_app/react/templates/root/postcss.config.js +14 -0
  206. data/lib/tasks/api.rake +0 -2
  207. data/lib/tasks/carrier_service.rake +0 -2
  208. data/lib/tasks/database.rake +1 -1
  209. data/lib/tasks/sessions.rake +0 -2
  210. data/lib/tasks/shops.rake +0 -2
  211. data/lib/tasks/users.rake +0 -2
  212. data/lib/tasks/webhooks.rake +0 -2
  213. data/test/clients/disco_app/api_client_test.rb +3 -3
  214. data/test/controllers/disco_app/admin/shops_controller_test.rb +1 -0
  215. data/test/controllers/disco_app/charges_controller_test.rb +8 -9
  216. data/test/controllers/disco_app/flow/trigger_usage_controller_test.rb +41 -0
  217. data/test/controllers/disco_app/install_controller_test.rb +2 -1
  218. data/test/controllers/disco_app/subscriptions_controller_test.rb +2 -1
  219. data/test/controllers/disco_app/webhooks_controller_test.rb +1 -0
  220. data/test/controllers/home_controller_test.rb +1 -1
  221. data/test/disco_app_test.rb +3 -1
  222. data/test/dummy/Rakefile +1 -1
  223. data/test/dummy/app/assets/config/manifest.js +2 -0
  224. data/test/dummy/app/controllers/application_controller.rb +2 -0
  225. data/test/dummy/app/controllers/carrier_request_controller.rb +1 -0
  226. data/test/dummy/app/controllers/disco_app/admin/shops_controller.rb +1 -0
  227. data/test/dummy/app/controllers/home_controller.rb +1 -0
  228. data/test/dummy/app/controllers/proxy_controller.rb +1 -0
  229. data/test/dummy/app/javascript/packs/application.js +18 -0
  230. data/test/dummy/app/jobs/disco_app/app_installed_job.rb +2 -3
  231. data/test/dummy/app/jobs/disco_app/app_uninstalled_job.rb +1 -0
  232. data/test/dummy/app/models/application_record.rb +2 -0
  233. data/test/dummy/app/models/cart.rb +4 -3
  234. data/test/dummy/app/models/disco_app/shop.rb +4 -5
  235. data/test/dummy/app/models/js_configuration.rb +1 -0
  236. data/test/dummy/app/models/product.rb +3 -2
  237. data/test/dummy/app/models/widget_configuration.rb +1 -0
  238. data/test/dummy/babel.config.js +72 -0
  239. data/test/dummy/bin/bundle +1 -1
  240. data/test/dummy/bin/rails +1 -1
  241. data/test/dummy/bin/setup +8 -8
  242. data/test/dummy/bin/webpack +19 -0
  243. data/test/dummy/bin/webpack-dev-server +19 -0
  244. data/test/dummy/config/application.rb +4 -3
  245. data/test/dummy/config/boot.rb +2 -2
  246. data/test/dummy/config/database.yml +3 -0
  247. data/test/dummy/config/environment.rb +1 -1
  248. data/test/dummy/config/environments/staging.rb +85 -0
  249. data/test/dummy/config/initializers/disco_app.rb +8 -1
  250. data/test/dummy/config/initializers/omniauth.rb +3 -4
  251. data/test/dummy/config/initializers/session_store.rb +1 -1
  252. data/test/dummy/config/initializers/shopify_app.rb +1 -0
  253. data/test/dummy/config/routes.rb +0 -2
  254. data/test/dummy/config/secrets.yml +3 -0
  255. data/test/dummy/config/webpack/development.js +5 -0
  256. data/test/dummy/config/webpack/environment.js +3 -0
  257. data/test/dummy/config/webpack/production.js +5 -0
  258. data/test/dummy/config/webpack/test.js +5 -0
  259. data/test/dummy/config/webpacker.yml +95 -0
  260. data/test/dummy/db/migrate/20160307182229_create_products.rb +3 -1
  261. data/test/dummy/db/migrate/20160530160739_create_asset_models.rb +3 -1
  262. data/test/dummy/db/migrate/20161105054746_create_carts.rb +2 -1
  263. data/test/dummy/db/schema.rb +45 -6
  264. data/test/dummy/package.json +8 -0
  265. data/test/dummy/postcss.config.js +12 -0
  266. data/test/dummy/yarn.lock +7244 -0
  267. data/test/fixtures/api/subscriptions/valid_request.json +1 -1
  268. data/test/fixtures/api/widget_store/empty_webhooks.json +3 -0
  269. data/test/fixtures/api/widget_store/existing_webhooks.json +43 -0
  270. data/test/fixtures/disco_app/shops.yml +3 -0
  271. data/test/fixtures/webhooks/flow/trigger_usage.json +7 -0
  272. data/test/integration/synchronises_test.rb +2 -1
  273. data/test/jobs/disco_app/app_installed_job_test.rb +28 -9
  274. data/test/jobs/disco_app/app_uninstalled_job_test.rb +5 -2
  275. data/test/jobs/disco_app/send_subscription_job_test.rb +3 -2
  276. data/test/jobs/disco_app/synchronise_carrier_service_job_test.rb +1 -0
  277. data/test/jobs/disco_app/synchronise_users_job_test.rb +1 -0
  278. data/test/jobs/disco_app/synchronise_webhooks_job_test.rb +70 -13
  279. data/test/models/disco_app/can_be_liquified_test.rb +3 -1
  280. data/test/models/disco_app/has_metafields_test.rb +37 -18
  281. data/test/models/disco_app/renders_assets_test.rb +2 -1
  282. data/test/models/disco_app/session_test.rb +2 -2
  283. data/test/models/disco_app/shop_test.rb +1 -1
  284. data/test/services/disco_app/charges_service_test.rb +7 -8
  285. data/test/services/disco_app/flow/create_action_test.rb +51 -0
  286. data/test/services/disco_app/flow/create_trigger_test.rb +56 -0
  287. data/test/services/disco_app/flow/process_action_test.rb +68 -0
  288. data/test/services/disco_app/flow/process_trigger_test.rb +94 -0
  289. data/test/services/disco_app/flow/update_trigger_usage_test.rb +87 -0
  290. data/test/services/disco_app/subscription_service_test.rb +3 -2
  291. data/test/support/test_file_fixtures.rb +2 -2
  292. data/test/support/test_shopify_api.rb +1 -1
  293. data/test/test_helper.rb +10 -7
  294. data/test/vcr/flow_trigger_invalid_title.yml +35 -0
  295. data/test/vcr/flow_trigger_valid.yml +38 -0
  296. data/test/vcr/webhook_failure.yml +13 -13
  297. metadata +282 -148
  298. data/app/clients/disco_app/disco_api_error.rb +0 -2
  299. data/app/clients/disco_app/rollbar_client.rb +0 -53
  300. data/app/clients/disco_app/rollbar_client_error.rb +0 -2
  301. data/lib/generators/disco_app/USAGE +0 -5
  302. data/lib/generators/disco_app/disco_app_generator.rb +0 -236
  303. data/lib/generators/disco_app/templates/config/newrelic.yml +0 -26
  304. data/lib/generators/disco_app/templates/initializers/rollbar.rb +0 -23
  305. data/lib/generators/disco_app/templates/initializers/session_store.rb +0 -2
  306. data/lib/generators/disco_app/templates/initializers/shopify_app.rb +0 -6
  307. data/lib/generators/disco_app/templates/root/.codeclimate.yml +0 -7
  308. data/lib/generators/disco_app/templates/root/.ruby-version +0 -1
  309. data/lib/tasks/rollbar.rake +0 -24
  310. data/test/fixtures/api/widget_store/webhooks.json +0 -1
@@ -8,13 +8,13 @@
8
8
  // Initialise the Shopify App.
9
9
  ShopifyApp.init({
10
10
  "apiKey": "<%= ShopifyApp.configuration.api_key %>",
11
- "shopOrigin": "<%= "https://#{ @shop_session.url }" if @shop_session %>",
11
+ "shopOrigin": "<%= "https://#{ @shop_session.domain }" if @shop_session %>",
12
12
  "debug": <%= Rails.env.development? ? 'true' : 'false' %>
13
13
  });
14
14
  </script>
15
15
 
16
16
  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
17
-
17
+ <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload', 'data-turbolinks-eval': false %>
18
18
  <%= csrf_meta_tags %>
19
19
 
20
20
  <%= yield :extra_head %>
@@ -43,8 +43,6 @@
43
43
  </script>
44
44
  <% end %>
45
45
 
46
- <%= javascript_include_tag 'application', 'data-turbolinks-track' => true, 'data-turbolinks-eval' => false %>
47
-
48
46
  <%= render 'disco_app/shared/icons' %>
49
47
  </body>
50
48
  </html>
@@ -7,15 +7,14 @@
7
7
  // Initialise the Shopify App.
8
8
  ShopifyApp.init({
9
9
  "apiKey": "<%= ShopifyApp.configuration.api_key %>",
10
- "shopOrigin": "<%= "https://#{ @shop_session.url }" if @shop_session %>",
10
+ "shopOrigin": "<%= "https://#{ @shop_session.domain }" if @shop_session %>",
11
11
  "debug": <%= Rails.env.development? ? 'true' : 'false' %>,
12
12
  "forceRedirect": false
13
13
  });
14
14
  </script>
15
15
 
16
- <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
17
16
  <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
18
-
17
+ <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
19
18
  <%= csrf_meta_tags %>
20
19
 
21
20
  <%= yield :extra_head %>
@@ -3,8 +3,8 @@
3
3
  <head>
4
4
  <title>Install <%= DiscoApp.configuration.app_name %></title>
5
5
 
6
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
7
-
6
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
7
+ <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
8
8
  <%= csrf_meta_tags %>
9
9
 
10
10
  <%= yield :extra_head %>
@@ -36,7 +36,5 @@
36
36
  </section>
37
37
  </div>
38
38
  <% end %>
39
-
40
- <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
41
39
  </body>
42
40
  </html>
data/config/routes.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'sidekiq/web'
2
2
 
3
3
  DiscoApp::Engine.routes.draw do
4
-
5
4
  get 'ref', to: '/sessions#referral'
6
5
  get '/auth/failure', to: '/sessions#failure'
7
6
 
@@ -9,6 +8,16 @@ DiscoApp::Engine.routes.draw do
9
8
  post 'webhooks' => :process_webhook, as: :webhooks
10
9
  end
11
10
 
11
+ namespace :flow do
12
+ controller :actions do
13
+ post 'actions/:id' => :create_flow_action, as: :flow_actions
14
+ end
15
+
16
+ controller :trigger_usage do
17
+ post 'trigger_usage' => :update_trigger_usage, as: :flow_trigger_usage
18
+ end
19
+ end
20
+
12
21
  resources :user_sessions, only: [:new, :create, :destroy]
13
22
  get 'auth/shopify_user/callback' => 'user_sessions#callback'
14
23
 
@@ -46,7 +55,7 @@ DiscoApp::Engine.routes.draw do
46
55
  end
47
56
 
48
57
  # Make the Sidekiq Web UI accessible using the same credentials as the admin.
49
- if Rails.env.production?
58
+ if Rails.env.production? || Rails.env.staging?
50
59
  Sidekiq::Web.use Rack::Auth::Basic do |username, password|
51
60
  [
52
61
  ENV['ADMIN_APP_USERNAME'].present?,
@@ -64,5 +73,4 @@ DiscoApp::Engine.routes.draw do
64
73
  get 'frame' => :frame, as: :frame
65
74
  end
66
75
  end
67
-
68
76
  end
@@ -6,105 +6,105 @@ class CreateShopsIfNotExistent < ActiveRecord::Migration[5.1]
6
6
  def change
7
7
  return if table_exists? :disco_app_shops
8
8
 
9
- create_table "disco_app_app_settings", force: :cascade do |t|
10
- t.datetime "created_at", null: false
11
- t.datetime "updated_at", null: false
9
+ create_table :disco_app_app_settings, force: :cascade do |t|
10
+ t.datetime :created_at, null: false
11
+ t.datetime :updated_at, null: false
12
12
  end
13
13
 
14
- create_table "disco_app_application_charges", force: :cascade do |t|
15
- t.integer "shop_id", limit: 8
16
- t.integer "subscription_id", limit: 8
17
- t.integer "status", default: 0
18
- t.datetime "created_at", null: false
19
- t.datetime "updated_at", null: false
20
- t.integer "shopify_id", limit: 8
21
- t.string "confirmation_url"
14
+ create_table :disco_app_application_charges, force: :cascade do |t|
15
+ t.integer :shop_id, limit: 8
16
+ t.integer :subscription_id, limit: 8
17
+ t.integer :status, default: 0
18
+ t.datetime :created_at, null: false
19
+ t.datetime :updated_at, null: false
20
+ t.integer :shopify_id, limit: 8
21
+ t.string :confirmation_url
22
22
  end
23
23
 
24
- create_table "disco_app_plan_codes", force: :cascade do |t|
25
- t.integer "plan_id", limit: 8
26
- t.string "code"
27
- t.integer "trial_period_days"
28
- t.integer "amount"
29
- t.datetime "created_at", null: false
30
- t.datetime "updated_at", null: false
31
- t.integer "status", default: 0
24
+ create_table :disco_app_plan_codes, force: :cascade do |t|
25
+ t.integer :plan_id, limit: 8
26
+ t.string :code
27
+ t.integer :trial_period_days
28
+ t.integer :amount
29
+ t.datetime :created_at, null: false
30
+ t.datetime :updated_at, null: false
31
+ t.integer :status, default: 0
32
32
  end
33
33
 
34
- create_table "disco_app_plans", force: :cascade do |t|
35
- t.integer "status", default: 0
36
- t.string "name"
37
- t.integer "plan_type", default: 0
38
- t.integer "trial_period_days"
39
- t.datetime "created_at", null: false
40
- t.datetime "updated_at", null: false
41
- t.integer "amount", default: 0
42
- t.string "currency", default: "USD"
43
- t.integer "interval", default: 0
44
- t.integer "interval_count", default: 1
34
+ create_table :disco_app_plans, force: :cascade do |t|
35
+ t.integer :status, default: 0
36
+ t.string :name
37
+ t.integer :plan_type, default: 0
38
+ t.integer :trial_period_days
39
+ t.datetime :created_at, null: false
40
+ t.datetime :updated_at, null: false
41
+ t.integer :amount, default: 0
42
+ t.string :currency, default: 'USD'
43
+ t.integer :interval, default: 0
44
+ t.integer :interval_count, default: 1
45
45
  end
46
46
 
47
- create_table "disco_app_recurring_application_charges", force: :cascade do |t|
48
- t.integer "shop_id", limit: 8
49
- t.integer "subscription_id", limit: 8
50
- t.integer "status", default: 0
51
- t.datetime "created_at", null: false
52
- t.datetime "updated_at", null: false
53
- t.integer "shopify_id", limit: 8
54
- t.string "confirmation_url"
47
+ create_table :disco_app_recurring_application_charges, force: :cascade do |t|
48
+ t.integer :shop_id, limit: 8
49
+ t.integer :subscription_id, limit: 8
50
+ t.integer :status, default: 0
51
+ t.datetime :created_at, null: false
52
+ t.datetime :updated_at, null: false
53
+ t.integer :shopify_id, limit: 8
54
+ t.string :confirmation_url
55
55
  end
56
56
 
57
- create_table "disco_app_sessions", force: :cascade do |t|
58
- t.string "session_id", null: false
59
- t.text "data"
60
- t.datetime "created_at", null: false
61
- t.datetime "updated_at", null: false
62
- t.integer "shop_id"
57
+ create_table :disco_app_sessions, force: :cascade do |t|
58
+ t.string :session_id, null: false
59
+ t.text :data
60
+ t.datetime :created_at, null: false
61
+ t.datetime :updated_at, null: false
62
+ t.integer :shop_id
63
63
  end
64
64
 
65
- add_index "disco_app_sessions", ["session_id"], name: "index_disco_app_sessions_on_session_id", unique: true, using: :btree
66
- add_index "disco_app_sessions", ["updated_at"], name: "index_disco_app_sessions_on_updated_at", using: :btree
65
+ add_index :disco_app_sessions, [:session_id], name: 'index_disco_app_sessions_on_session_id', unique: true, using: :btree
66
+ add_index :disco_app_sessions, [:updated_at], name: 'index_disco_app_sessions_on_updated_at', using: :btree
67
67
 
68
- create_table "disco_app_shops", force: :cascade do |t|
69
- t.string "shopify_domain", null: false
70
- t.string "shopify_token", null: false
71
- t.datetime "created_at", null: false
72
- t.datetime "updated_at", null: false
73
- t.integer "status", default: 0
74
- t.string "domain"
75
- t.string "plan_name"
76
- t.string "name"
77
- t.jsonb "data", default: {}
68
+ create_table :disco_app_shops, force: :cascade do |t|
69
+ t.string :shopify_domain, null: false
70
+ t.string :shopify_token, null: false
71
+ t.datetime :created_at, null: false
72
+ t.datetime :updated_at, null: false
73
+ t.integer :status, default: 0
74
+ t.string :domain
75
+ t.string :plan_name
76
+ t.string :name
77
+ t.jsonb :data, default: {}
78
78
  end
79
79
 
80
- add_index "disco_app_shops", ["shopify_domain"], name: "index_disco_app_shops_on_shopify_domain", unique: true, using: :btree
80
+ add_index :disco_app_shops, [:shopify_domain], name: 'index_disco_app_shops_on_shopify_domain', unique: true, using: :btree
81
81
 
82
- create_table "disco_app_subscriptions", force: :cascade do |t|
83
- t.integer "shop_id"
84
- t.integer "plan_id"
85
- t.integer "status"
86
- t.integer "subscription_type"
87
- t.datetime "created_at", null: false
88
- t.datetime "updated_at", null: false
89
- t.datetime "trial_start_at"
90
- t.datetime "trial_end_at"
91
- t.datetime "cancelled_at"
92
- t.integer "amount", default: 0
93
- t.integer "plan_code_id", limit: 8
94
- t.string "source"
95
- t.integer "trial_period_days"
82
+ create_table :disco_app_subscriptions, force: :cascade do |t|
83
+ t.integer :shop_id
84
+ t.integer :plan_id
85
+ t.integer :status
86
+ t.integer :subscription_type
87
+ t.datetime :created_at, null: false
88
+ t.datetime :updated_at, null: false
89
+ t.datetime :trial_start_at
90
+ t.datetime :trial_end_at
91
+ t.datetime :cancelled_at
92
+ t.integer :amount, default: 0
93
+ t.integer :plan_code_id, limit: 8
94
+ t.string :source
95
+ t.integer :trial_period_days
96
96
  end
97
97
 
98
- add_index "disco_app_subscriptions", ["plan_id"], name: "index_disco_app_subscriptions_on_plan_id", using: :btree
99
- add_index "disco_app_subscriptions", ["shop_id"], name: "index_disco_app_subscriptions_on_shop_id", using: :btree
98
+ add_index :disco_app_subscriptions, [:plan_id], name: 'index_disco_app_subscriptions_on_plan_id', using: :btree
99
+ add_index :disco_app_subscriptions, [:shop_id], name: 'index_disco_app_subscriptions_on_shop_id', using: :btree
100
100
 
101
- add_foreign_key "disco_app_application_charges", "disco_app_shops", column: "shop_id"
102
- add_foreign_key "disco_app_application_charges", "disco_app_subscriptions", column: "subscription_id"
103
- add_foreign_key "disco_app_plan_codes", "disco_app_plans", column: "plan_id"
104
- add_foreign_key "disco_app_recurring_application_charges", "disco_app_shops", column: "shop_id"
105
- add_foreign_key "disco_app_recurring_application_charges", "disco_app_subscriptions", column: "subscription_id"
106
- add_foreign_key "disco_app_sessions", "disco_app_shops", column: "shop_id", on_delete: :cascade
107
- add_foreign_key "disco_app_subscriptions", "disco_app_plan_codes", column: "plan_code_id"
101
+ add_foreign_key :disco_app_application_charges, :disco_app_shops, column: :shop_id
102
+ add_foreign_key :disco_app_application_charges, :disco_app_subscriptions, column: :subscription_id
103
+ add_foreign_key :disco_app_plan_codes, :disco_app_plans, column: :plan_id
104
+ add_foreign_key :disco_app_recurring_application_charges, :disco_app_shops, column: :shop_id
105
+ add_foreign_key :disco_app_recurring_application_charges, :disco_app_subscriptions, column: :subscription_id
106
+ add_foreign_key :disco_app_sessions, :disco_app_shops, column: :shop_id, on_delete: :cascade
107
+ add_foreign_key :disco_app_subscriptions, :disco_app_plan_codes, column: :plan_code_id
108
108
  end
109
109
 
110
110
  end
@@ -1,4 +1,5 @@
1
1
  class CreateDiscoAppSources < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  create_table :disco_app_sources do |t|
4
5
  t.string :source, null: true
@@ -7,4 +8,5 @@ class CreateDiscoAppSources < ActiveRecord::Migration[5.1]
7
8
  end
8
9
  add_index :disco_app_sources, :source
9
10
  end
11
+
10
12
  end
@@ -1,4 +1,5 @@
1
1
  class AddSourcesToShopSubscriptions < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  add_column :disco_app_subscriptions, :source_id, :integer, limit: 8, index: true
4
5
  add_foreign_key :disco_app_subscriptions, :disco_app_sources, column: :source_id
@@ -9,6 +10,7 @@ class AddSourcesToShopSubscriptions < ActiveRecord::Migration[5.1]
9
10
  end
10
11
  end
11
12
 
12
- remove_column :disco_app_subscriptions, :source
13
+ remove_column :disco_app_subscriptions, :source, :string
13
14
  end
15
+
14
16
  end
@@ -1,13 +1,14 @@
1
1
  class CreateDiscoAppUsers < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  create_table :disco_app_users do |t|
4
5
  t.integer :shop_id, limit: 8
5
6
  t.string :first_name
6
7
  t.string :last_name
7
8
  t.string :email
8
-
9
9
  t.timestamps null: false
10
10
  end
11
11
  add_index :disco_app_users, :shop_id, unique: true
12
12
  end
13
+
13
14
  end
@@ -1,6 +1,8 @@
1
1
  class FixDiscoAppUsersIndex < ActiveRecord::Migration[5.1]
2
+
2
3
  def change
3
4
  remove_index :disco_app_users, :shop_id
4
5
  add_index :disco_app_users, [:id, :shop_id], unique: true
5
6
  end
7
+
6
8
  end
@@ -0,0 +1,32 @@
1
+ class CreateFlowActionsAndTriggers < ActiveRecord::Migration[5.2]
2
+
3
+ def change
4
+ create_table :disco_app_flow_actions do |t|
5
+ t.integer :shop_id, limit: 8
6
+ t.string :action_id
7
+ t.string :action_run_id
8
+ t.jsonb :properties, default: {}
9
+ t.integer :status, default: 0
10
+ t.datetime :processed_at, null: true
11
+ t.jsonb :processing_errors, default: []
12
+ t.timestamps null: false
13
+ end
14
+
15
+ create_table :disco_app_flow_triggers do |t|
16
+ t.integer :shop_id, limit: 8
17
+ t.string :title
18
+ t.string :resource_name
19
+ t.string :resource_url
20
+ t.jsonb :properties, default: {}
21
+ t.integer :status, default: 0
22
+ t.datetime :processed_at, null: true
23
+ t.jsonb :processing_errors, default: []
24
+ t.timestamps null: false
25
+ end
26
+
27
+ add_foreign_key :disco_app_flow_actions, :disco_app_shops, column: :shop_id, on_delete: :cascade
28
+ add_foreign_key :disco_app_flow_triggers, :disco_app_shops, column: :shop_id, on_delete: :cascade
29
+ add_index :disco_app_flow_actions, :action_run_id, unique: true
30
+ end
31
+
32
+ end
@@ -0,0 +1,16 @@
1
+ class CreateFlowTriggerUsages < ActiveRecord::Migration[5.2]
2
+
3
+ def change
4
+ create_table :disco_app_flow_trigger_usages do |t|
5
+ t.integer :shop_id, limit: 8
6
+ t.string :flow_trigger_definition_id
7
+ t.boolean :has_enabled_flow, default: true
8
+ t.datetime :timestamp, null: true
9
+ t.timestamps null: false
10
+ end
11
+
12
+ add_foreign_key :disco_app_flow_trigger_usages, :disco_app_shops, column: :shop_id, on_delete: :cascade
13
+ add_index :disco_app_flow_trigger_usages, [:shop_id, :flow_trigger_definition_id], unique: true, name: :index_disco_app_flow_actions_on_shop_id_and_trigger_id
14
+ end
15
+
16
+ end
@@ -8,6 +8,13 @@ module DiscoApp
8
8
  # Set the list of Shopify webhook topics to register.
9
9
  attr_accessor :webhook_topics
10
10
 
11
+ # Define the list of fields to receive for each webhook topic.
12
+ attr_accessor :webhook_fields
13
+
14
+ # Set Flow configuration
15
+ attr_accessor :flow_actions
16
+ attr_accessor :flow_triggers
17
+
11
18
  # Set the below if using an application proxy.
12
19
  attr_accessor :app_proxy_prefix
13
20
 
@@ -16,17 +23,17 @@ module DiscoApp
16
23
 
17
24
  # Set the below to create real Shopify charges.
18
25
  attr_accessor :real_charges
19
- alias_method :real_charges?, :real_charges
26
+ alias real_charges? real_charges
20
27
 
21
28
  # Optional configuration, usually useful for development environments.
22
29
  attr_accessor :skip_proxy_verification
23
- alias_method :skip_proxy_verification?, :skip_proxy_verification
30
+ alias skip_proxy_verification? skip_proxy_verification
24
31
  attr_accessor :skip_webhook_verification
25
- alias_method :skip_webhook_verification?, :skip_webhook_verification
32
+ alias skip_webhook_verification? skip_webhook_verification
26
33
  attr_accessor :skip_carrier_request_verification
27
- alias_method :skip_carrier_request_verification?, :skip_carrier_request_verification
34
+ alias skip_carrier_request_verification? skip_carrier_request_verification
28
35
  attr_accessor :skip_oauth
29
- alias_method :skip_oauth?, :skip_oauth
36
+ alias skip_oauth? skip_oauth
30
37
 
31
38
  end
32
39
 
@@ -1,4 +1,6 @@
1
1
  module DiscoApp
2
- SOURCE_COOKIE_KEY = '_disco_app_source'
3
- CODE_COOKIE_KEY = '_disco_app_code'
2
+
3
+ SOURCE_COOKIE_KEY = '_disco_app_source'.freeze
4
+ CODE_COOKIE_KEY = '_disco_app_code'.freeze
5
+
4
6
  end
@@ -19,7 +19,7 @@ module DiscoApp
19
19
 
20
20
  # Ensure our frame assets are included for precompilation.
21
21
  initializer 'disco_app.assets.precompile' do |app|
22
- app.config.assets.precompile += %w(disco_app/icon.svg disco_app/admin.css disco_app/frame.css disco_app/frame.js)
22
+ app.config.assets.precompile += %w[disco_app/icon.svg disco_app/admin.css disco_app/frame.css disco_app/frame.js]
23
23
  end
24
24
 
25
25
  end
@@ -7,6 +7,7 @@ module DiscoApp
7
7
 
8
8
  def set_shop_id!
9
9
  return false unless loaded?
10
+
10
11
  write_attribute(:shop_id, data[:shopify] || data['shopify'])
11
12
  end
12
13
 
@@ -11,7 +11,8 @@ module DiscoApp::Test
11
11
  def json_fixture(path, dir: 'json', parse: true)
12
12
  filename = Rails.root.join('test', 'fixtures', dir, "#{path}.json")
13
13
  return File.read(filename) unless parse
14
- HashWithIndifferentAccess.new(ActiveSupport::JSON.decode(File.read(filename)))
14
+
15
+ HashWithIndifferentAccess.new(JSON.parse(File.read(filename)))
15
16
  end
16
17
 
17
18
  # Webhook fixtures are special-case JSON fixtures.
@@ -1,3 +1,5 @@
1
1
  module DiscoApp
2
- VERSION = '0.15.2'
2
+
3
+ VERSION = '0.18.1'.freeze
4
+
3
5
  end
@@ -0,0 +1,5 @@
1
+ Description:
2
+ Generate a new Shopify application.
3
+
4
+ Example:
5
+ rails generate disco_app:install