disco_app 0.9.3

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 (291) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +37 -0
  3. data/app/assets/images/disco_app/icon.svg +1 -0
  4. data/app/assets/images/disco_app/icons.svg +0 -0
  5. data/app/assets/javascripts/disco_app/components/custom/filterable_shop_list.js.jsx +61 -0
  6. data/app/assets/javascripts/disco_app/components/custom/inline-radio-options.es6.jsx +59 -0
  7. data/app/assets/javascripts/disco_app/components/custom/rules-editor.es6.jsx +417 -0
  8. data/app/assets/javascripts/disco_app/components/custom/shop_filter_query.js.jsx +13 -0
  9. data/app/assets/javascripts/disco_app/components/custom/shop_filter_tab.js.jsx +34 -0
  10. data/app/assets/javascripts/disco_app/components/custom/shop_filter_tabs.js.jsx +21 -0
  11. data/app/assets/javascripts/disco_app/components/custom/shop_list.js.jsx +142 -0
  12. data/app/assets/javascripts/disco_app/components/custom/shop_row.js.jsx +43 -0
  13. data/app/assets/javascripts/disco_app/components/custom/shopify_admin_link.js.jsx +29 -0
  14. data/app/assets/javascripts/disco_app/components/ui-kit/cards/card-section.es6.jsx +30 -0
  15. data/app/assets/javascripts/disco_app/components/ui-kit/cards/card.es6.jsx +9 -0
  16. data/app/assets/javascripts/disco_app/components/ui-kit/cards/cart-section-title.es6.jsx +7 -0
  17. data/app/assets/javascripts/disco_app/components/ui-kit/forms/base_form.es6.jsx +72 -0
  18. data/app/assets/javascripts/disco_app/components/ui-kit/forms/base_input.es6.jsx +20 -0
  19. data/app/assets/javascripts/disco_app/components/ui-kit/forms/button.es6.jsx +13 -0
  20. data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-radio.es6.jsx +30 -0
  21. data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-select.es6.jsx +39 -0
  22. data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-text.es6.jsx +59 -0
  23. data/app/assets/javascripts/disco_app/components/ui-kit/forms/input-textarea.es6.jsx +48 -0
  24. data/app/assets/javascripts/disco_app/components/ui-kit/icons/icon-chevron.es6.jsx +33 -0
  25. data/app/assets/javascripts/disco_app/components/ui-kit/icons/next-icon.es6.jsx +18 -0
  26. data/app/assets/javascripts/disco_app/components/ui-kit/input_select.es6.jsx +21 -0
  27. data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-annotated-section.es6.jsx +29 -0
  28. data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-empty-state.es6.jsx +35 -0
  29. data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-footer-help.es6.jsx +13 -0
  30. data/app/assets/javascripts/disco_app/components/ui-kit/ui-layout/ui-page-actions.es6.jsx +39 -0
  31. data/app/assets/javascripts/disco_app/components.js +2 -0
  32. data/app/assets/javascripts/disco_app/disco_app.js +9 -0
  33. data/app/assets/javascripts/disco_app/frame.js +152 -0
  34. data/app/assets/javascripts/disco_app/shopify-turbolinks.js +7 -0
  35. data/app/assets/javascripts/disco_app/ui-kit.js +1 -0
  36. data/app/assets/stylesheets/disco_app/admin/_header.scss +75 -0
  37. data/app/assets/stylesheets/disco_app/admin/_layout.scss +32 -0
  38. data/app/assets/stylesheets/disco_app/admin/_nav.scss +184 -0
  39. data/app/assets/stylesheets/disco_app/admin.scss +11 -0
  40. data/app/assets/stylesheets/disco_app/disco_app.scss +19 -0
  41. data/app/assets/stylesheets/disco_app/frame/_buttons.scss +54 -0
  42. data/app/assets/stylesheets/disco_app/frame/_forms.scss +26 -0
  43. data/app/assets/stylesheets/disco_app/frame/_layout.scss +77 -0
  44. data/app/assets/stylesheets/disco_app/frame/_type.scss +25 -0
  45. data/app/assets/stylesheets/disco_app/frame.scss +10 -0
  46. data/app/assets/stylesheets/disco_app/mixins/_flexbox.scss +400 -0
  47. data/app/assets/stylesheets/disco_app/ui-kit/_ui-empty-state.scss +121 -0
  48. data/app/assets/stylesheets/disco_app/ui-kit/_ui-footer-help.scss +28 -0
  49. data/app/assets/stylesheets/disco_app/ui-kit/_ui-icons.scss +28 -0
  50. data/app/assets/stylesheets/disco_app/ui-kit/_ui-kit.scss +5113 -0
  51. data/app/assets/stylesheets/disco_app/ui-kit/_ui-layout.scss +10 -0
  52. data/app/assets/stylesheets/disco_app/ui-kit/_ui-page-actions.scss +21 -0
  53. data/app/assets/stylesheets/disco_app/ui-kit/_ui-tabs.scss +75 -0
  54. data/app/assets/stylesheets/disco_app/ui-kit/_ui-type.scss +13 -0
  55. data/app/controllers/disco_app/admin/app_settings_controller.rb +3 -0
  56. data/app/controllers/disco_app/admin/application_controller.rb +3 -0
  57. data/app/controllers/disco_app/admin/concerns/app_settings_controller.rb +24 -0
  58. data/app/controllers/disco_app/admin/concerns/authenticated_controller.rb +20 -0
  59. data/app/controllers/disco_app/admin/concerns/plans_controller.rb +54 -0
  60. data/app/controllers/disco_app/admin/concerns/shops_controller.rb +7 -0
  61. data/app/controllers/disco_app/admin/concerns/subscriptions_controller.rb +29 -0
  62. data/app/controllers/disco_app/admin/plans_controller.rb +3 -0
  63. data/app/controllers/disco_app/admin/resources/shops_controller.rb +3 -0
  64. data/app/controllers/disco_app/admin/shops_controller.rb +3 -0
  65. data/app/controllers/disco_app/admin/subscriptions_controller.rb +3 -0
  66. data/app/controllers/disco_app/charges_controller.rb +47 -0
  67. data/app/controllers/disco_app/concerns/app_proxy_controller.rb +40 -0
  68. data/app/controllers/disco_app/concerns/authenticated_controller.rb +56 -0
  69. data/app/controllers/disco_app/concerns/carrier_request_controller.rb +21 -0
  70. data/app/controllers/disco_app/frame_controller.rb +9 -0
  71. data/app/controllers/disco_app/install_controller.rb +27 -0
  72. data/app/controllers/disco_app/subscriptions_controller.rb +32 -0
  73. data/app/controllers/disco_app/webhooks_controller.rb +46 -0
  74. data/app/controllers/sessions_controller.rb +28 -0
  75. data/app/helpers/disco_app/application_helper.rb +50 -0
  76. data/app/jobs/disco_app/app_installed_job.rb +3 -0
  77. data/app/jobs/disco_app/app_uninstalled_job.rb +3 -0
  78. data/app/jobs/disco_app/concerns/app_installed_job.rb +39 -0
  79. data/app/jobs/disco_app/concerns/app_uninstalled_job.rb +20 -0
  80. data/app/jobs/disco_app/concerns/shop_update_job.rb +13 -0
  81. data/app/jobs/disco_app/concerns/subscription_changed_job.rb +7 -0
  82. data/app/jobs/disco_app/concerns/synchronise_carrier_service_job.rb +52 -0
  83. data/app/jobs/disco_app/concerns/synchronise_webhooks_job.rb +61 -0
  84. data/app/jobs/disco_app/shop_job.rb +27 -0
  85. data/app/jobs/disco_app/shop_update_job.rb +3 -0
  86. data/app/jobs/disco_app/subscription_changed_job.rb +3 -0
  87. data/app/jobs/disco_app/synchronise_carrier_service_job.rb +3 -0
  88. data/app/jobs/disco_app/synchronise_webhooks_job.rb +3 -0
  89. data/app/models/disco_app/app_settings.rb +3 -0
  90. data/app/models/disco_app/application_charge.rb +18 -0
  91. data/app/models/disco_app/concerns/app_settings.rb +7 -0
  92. data/app/models/disco_app/concerns/plan.rb +26 -0
  93. data/app/models/disco_app/concerns/plan_code.rb +15 -0
  94. data/app/models/disco_app/concerns/shop.rb +63 -0
  95. data/app/models/disco_app/concerns/subscription.rb +60 -0
  96. data/app/models/disco_app/concerns/synchronises.rb +39 -0
  97. data/app/models/disco_app/plan.rb +3 -0
  98. data/app/models/disco_app/plan_code.rb +3 -0
  99. data/app/models/disco_app/recurring_application_charge.rb +18 -0
  100. data/app/models/disco_app/session_storage.rb +18 -0
  101. data/app/models/disco_app/shop.rb +3 -0
  102. data/app/models/disco_app/subscription.rb +3 -0
  103. data/app/resources/disco_app/admin/resources/concerns/shop_resource.rb +100 -0
  104. data/app/resources/disco_app/admin/resources/shop_resource.rb +4 -0
  105. data/app/services/disco_app/carrier_request_service.rb +15 -0
  106. data/app/services/disco_app/charges_service.rb +81 -0
  107. data/app/services/disco_app/proxy_service.rb +17 -0
  108. data/app/services/disco_app/subscription_service.rb +46 -0
  109. data/app/services/disco_app/webhook_service.rb +30 -0
  110. data/app/views/disco_app/admin/app_settings/edit.html.erb +5 -0
  111. data/app/views/disco_app/admin/plans/_form.html.erb +72 -0
  112. data/app/views/disco_app/admin/plans/_plan_code_fields.html.erb +15 -0
  113. data/app/views/disco_app/admin/plans/edit.html.erb +7 -0
  114. data/app/views/disco_app/admin/plans/index.html.erb +43 -0
  115. data/app/views/disco_app/admin/plans/new.html.erb +7 -0
  116. data/app/views/disco_app/admin/shops/index.html.erb +13 -0
  117. data/app/views/disco_app/admin/subscriptions/edit.html.erb +33 -0
  118. data/app/views/disco_app/charges/activate.html.erb +1 -0
  119. data/app/views/disco_app/charges/create.html.erb +1 -0
  120. data/app/views/disco_app/charges/new.html.erb +12 -0
  121. data/app/views/disco_app/frame/frame.html.erb +36 -0
  122. data/app/views/disco_app/install/installing.html.erb +7 -0
  123. data/app/views/disco_app/install/uninstalling.html.erb +1 -0
  124. data/app/views/disco_app/proxy_errors/404.html.erb +1 -0
  125. data/app/views/disco_app/shared/_card.html.erb +14 -0
  126. data/app/views/disco_app/shared/_icons.html.erb +3 -0
  127. data/app/views/disco_app/shared/_section.html.erb +17 -0
  128. data/app/views/disco_app/subscriptions/new.html.erb +25 -0
  129. data/app/views/layouts/admin/_nav_items.erb +20 -0
  130. data/app/views/layouts/admin.html.erb +67 -0
  131. data/app/views/layouts/application.html.erb +18 -0
  132. data/app/views/layouts/embedded_app.html.erb +43 -0
  133. data/app/views/layouts/embedded_app_modal.html.erb +28 -0
  134. data/app/views/sessions/new.html.erb +26 -0
  135. data/config/routes.rb +48 -0
  136. data/db/migrate/20150525000000_create_shops_if_not_existent.rb +15 -0
  137. data/db/migrate/20150525162112_add_status_to_shops.rb +5 -0
  138. data/db/migrate/20150525171422_add_meta_to_shops.rb +11 -0
  139. data/db/migrate/20150629210346_add_charge_status_to_shop.rb +5 -0
  140. data/db/migrate/20150814214025_add_more_meta_to_shops.rb +15 -0
  141. data/db/migrate/20151017231302_create_disco_app_plans.rb +13 -0
  142. data/db/migrate/20151017232027_create_disco_app_subscriptions.rb +15 -0
  143. data/db/migrate/20151017234409_move_shop_to_disco_app_engine.rb +5 -0
  144. data/db/migrate/20160112233706_create_disco_app_sessions.rb +12 -0
  145. data/db/migrate/20160113194418_add_shop_id_to_disco_app_sessions.rb +6 -0
  146. data/db/migrate/20160223111044_create_disco_app_settings.rb +8 -0
  147. data/db/migrate/20160301223215_update_plans.rb +22 -0
  148. data/db/migrate/20160301224558_update_subscriptions.rb +13 -0
  149. data/db/migrate/20160302104816_create_disco_app_recurring_application_charges.rb +14 -0
  150. data/db/migrate/20160302105259_create_disco_app_application_charges.rb +14 -0
  151. data/db/migrate/20160302134728_drop_charge_status_from_shops.rb +5 -0
  152. data/db/migrate/20160302142941_add_shopify_attributes_to_charges.rb +8 -0
  153. data/db/migrate/20160331093148_create_disco_app_plan_codes.rb +14 -0
  154. data/db/migrate/20160401044420_add_status_to_plan_codes.rb +5 -0
  155. data/db/migrate/20160401045551_add_amount_and_plan_code_to_disco_app_subscriptions.rb +7 -0
  156. data/db/migrate/20160425205211_add_source_to_disco_app_subscriptions.rb +5 -0
  157. data/db/migrate/20160426033520_add_trial_period_days_to_disco_app_subscriptions.rb +5 -0
  158. data/db/migrate/20160513140727_add_name_to_disco_app_shops.rb +5 -0
  159. data/db/migrate/20160521135510_move_shop_to_synchronises.rb +61 -0
  160. data/lib/disco_app/configuration.rb +39 -0
  161. data/lib/disco_app/constants.rb +4 -0
  162. data/lib/disco_app/engine.rb +26 -0
  163. data/lib/disco_app/session.rb +14 -0
  164. data/lib/disco_app/support/file_fixtures.rb +23 -0
  165. data/lib/disco_app/test_help.rb +11 -0
  166. data/lib/disco_app/version.rb +3 -0
  167. data/lib/disco_app.rb +7 -0
  168. data/lib/generators/disco_app/USAGE +5 -0
  169. data/lib/generators/disco_app/disco_app_generator.rb +236 -0
  170. data/lib/generators/disco_app/templates/assets/javascripts/application.js +17 -0
  171. data/lib/generators/disco_app/templates/assets/javascripts/components.js +3 -0
  172. data/lib/generators/disco_app/templates/assets/stylesheets/application.scss +5 -0
  173. data/lib/generators/disco_app/templates/config/database.yml.tt +20 -0
  174. data/lib/generators/disco_app/templates/config/newrelic.yml +26 -0
  175. data/lib/generators/disco_app/templates/config/puma.rb +15 -0
  176. data/lib/generators/disco_app/templates/controllers/home_controller.rb +7 -0
  177. data/lib/generators/disco_app/templates/initializers/disco_app.rb +19 -0
  178. data/lib/generators/disco_app/templates/initializers/rollbar.rb +12 -0
  179. data/lib/generators/disco_app/templates/initializers/session_store.rb +2 -0
  180. data/lib/generators/disco_app/templates/initializers/shopify_app.rb +7 -0
  181. data/lib/generators/disco_app/templates/initializers/shopify_session_repository.rb +7 -0
  182. data/lib/generators/disco_app/templates/root/CHECKS +4 -0
  183. data/lib/generators/disco_app/templates/root/Procfile +2 -0
  184. data/lib/generators/disco_app/templates/views/home/index.html.erb +2 -0
  185. data/lib/tasks/carrier_service.rake +10 -0
  186. data/lib/tasks/database.rake +8 -0
  187. data/lib/tasks/sessions.rake +9 -0
  188. data/lib/tasks/shops.rake +10 -0
  189. data/lib/tasks/start.rake +3 -0
  190. data/lib/tasks/webhooks.rake +10 -0
  191. data/test/controllers/disco_app/admin/shops_controller_test.rb +54 -0
  192. data/test/controllers/disco_app/charges_controller_test.rb +99 -0
  193. data/test/controllers/disco_app/install_controller_test.rb +50 -0
  194. data/test/controllers/disco_app/subscriptions_controller_test.rb +68 -0
  195. data/test/controllers/disco_app/webhooks_controller_test.rb +58 -0
  196. data/test/controllers/home_controller_test.rb +92 -0
  197. data/test/controllers/proxy_controller_test.rb +42 -0
  198. data/test/disco_app_test.rb +7 -0
  199. data/test/dummy/Rakefile +6 -0
  200. data/test/dummy/app/assets/javascripts/application.js +17 -0
  201. data/test/dummy/app/assets/stylesheets/application.scss +5 -0
  202. data/test/dummy/app/controllers/application_controller.rb +6 -0
  203. data/test/dummy/app/controllers/disco_app/admin/shops_controller.rb +8 -0
  204. data/test/dummy/app/controllers/home_controller.rb +7 -0
  205. data/test/dummy/app/controllers/proxy_controller.rb +8 -0
  206. data/test/dummy/app/helpers/application_helper.rb +2 -0
  207. data/test/dummy/app/jobs/disco_app/app_installed_job.rb +16 -0
  208. data/test/dummy/app/jobs/disco_app/app_uninstalled_job.rb +11 -0
  209. data/test/dummy/app/jobs/products_create_job.rb +7 -0
  210. data/test/dummy/app/jobs/products_delete_job.rb +7 -0
  211. data/test/dummy/app/jobs/products_update_job.rb +7 -0
  212. data/test/dummy/app/models/disco_app/shop.rb +15 -0
  213. data/test/dummy/app/models/product.rb +6 -0
  214. data/test/dummy/app/views/home/index.html.erb +2 -0
  215. data/test/dummy/bin/bundle +3 -0
  216. data/test/dummy/bin/rails +4 -0
  217. data/test/dummy/bin/rake +4 -0
  218. data/test/dummy/bin/setup +29 -0
  219. data/test/dummy/config/application.rb +38 -0
  220. data/test/dummy/config/boot.rb +5 -0
  221. data/test/dummy/config/database.codeship.yml +23 -0
  222. data/test/dummy/config/database.gitlab-ci.yml +24 -0
  223. data/test/dummy/config/database.yml +20 -0
  224. data/test/dummy/config/environment.rb +5 -0
  225. data/test/dummy/config/environments/development.rb +41 -0
  226. data/test/dummy/config/environments/production.rb +85 -0
  227. data/test/dummy/config/environments/test.rb +42 -0
  228. data/test/dummy/config/initializers/assets.rb +11 -0
  229. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  230. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  231. data/test/dummy/config/initializers/disco_app.rb +19 -0
  232. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  233. data/test/dummy/config/initializers/inflections.rb +16 -0
  234. data/test/dummy/config/initializers/mime_types.rb +4 -0
  235. data/test/dummy/config/initializers/omniauth.rb +9 -0
  236. data/test/dummy/config/initializers/session_store.rb +2 -0
  237. data/test/dummy/config/initializers/shopify_app.rb +7 -0
  238. data/test/dummy/config/initializers/shopify_session_repository.rb +7 -0
  239. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  240. data/test/dummy/config/locales/en.yml +23 -0
  241. data/test/dummy/config/routes.rb +10 -0
  242. data/test/dummy/config/secrets.yml +22 -0
  243. data/test/dummy/config.ru +4 -0
  244. data/test/dummy/db/migrate/20160307182229_create_products.rb +11 -0
  245. data/test/dummy/db/schema.rb +126 -0
  246. data/test/dummy/public/404.html +67 -0
  247. data/test/dummy/public/422.html +67 -0
  248. data/test/dummy/public/500.html +66 -0
  249. data/test/dummy/public/favicon.ico +0 -0
  250. data/test/fixtures/api/widget_store/charges/activate_application_charge_request.json +16 -0
  251. data/test/fixtures/api/widget_store/charges/activate_application_charge_response.json +1 -0
  252. data/test/fixtures/api/widget_store/charges/activate_recurring_application_charge_request.json +20 -0
  253. data/test/fixtures/api/widget_store/charges/activate_recurring_application_charge_response.json +1 -0
  254. data/test/fixtures/api/widget_store/charges/create_application_charge_request.json +9 -0
  255. data/test/fixtures/api/widget_store/charges/create_application_charge_response.json +16 -0
  256. data/test/fixtures/api/widget_store/charges/create_recurring_application_charge_request.json +9 -0
  257. data/test/fixtures/api/widget_store/charges/create_recurring_application_charge_response.json +20 -0
  258. data/test/fixtures/api/widget_store/charges/create_second_recurring_application_charge_request.json +9 -0
  259. data/test/fixtures/api/widget_store/charges/create_second_recurring_application_charge_response.json +20 -0
  260. data/test/fixtures/api/widget_store/charges/get_accepted_application_charge_response.json +16 -0
  261. data/test/fixtures/api/widget_store/charges/get_accepted_recurring_application_charge_response.json +20 -0
  262. data/test/fixtures/api/widget_store/charges/get_declined_application_charge_response.json +16 -0
  263. data/test/fixtures/api/widget_store/charges/get_declined_recurring_application_charge_response.json +20 -0
  264. data/test/fixtures/api/widget_store/charges/get_pending_application_charge_response.json +16 -0
  265. data/test/fixtures/api/widget_store/charges/get_pending_recurring_application_charge_response.json +20 -0
  266. data/test/fixtures/api/widget_store/shop.json +46 -0
  267. data/test/fixtures/api/widget_store/webhooks.json +1 -0
  268. data/test/fixtures/disco_app/application_charges.yml +11 -0
  269. data/test/fixtures/disco_app/plan_codes.yml +13 -0
  270. data/test/fixtures/disco_app/plans.yml +37 -0
  271. data/test/fixtures/disco_app/recurring_application_charges.yml +11 -0
  272. data/test/fixtures/disco_app/shops.yml +10 -0
  273. data/test/fixtures/disco_app/subscriptions.yml +22 -0
  274. data/test/fixtures/products.yml +4 -0
  275. data/test/fixtures/webhooks/app_uninstalled.json +46 -0
  276. data/test/fixtures/webhooks/product_created.json +167 -0
  277. data/test/fixtures/webhooks/product_deleted.json +3 -0
  278. data/test/fixtures/webhooks/product_updated.json +167 -0
  279. data/test/integration/synchronises_test.rb +55 -0
  280. data/test/jobs/disco_app/app_installed_job_test.rb +55 -0
  281. data/test/jobs/disco_app/app_uninstalled_job_test.rb +30 -0
  282. data/test/models/disco_app/plan_test.rb +5 -0
  283. data/test/models/disco_app/session_test.rb +31 -0
  284. data/test/models/disco_app/shop_test.rb +27 -0
  285. data/test/models/disco_app/subscription_test.rb +19 -0
  286. data/test/services/disco_app/charges_service_test.rb +112 -0
  287. data/test/services/disco_app/subscription_service_test.rb +60 -0
  288. data/test/support/test_file_fixtures.rb +29 -0
  289. data/test/support/test_shopify_api.rb +16 -0
  290. data/test/test_helper.rb +55 -0
  291. metadata +727 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= yield(:title) %></title>
5
+ <%= stylesheet_link_tag 'disco_app/admin', media: 'all', 'data-turbolinks-track' => true %>
6
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
7
+
8
+ <%= csrf_meta_tags %>
9
+ </head>
10
+ <body class="next-ui">
11
+
12
+ <div class="nav-drawer">
13
+ <div class="next-nav next-nav--is-expanded">
14
+ <div class="next-nav__panel next-nav__panel--primary">
15
+ <header role="banner" class="next-nav__logo next-nav__logo--shopify">
16
+ <h1>
17
+ <a href="/admin">
18
+ <span role="img" class="ui-inline-svg">
19
+ <svg class="next-nav__svg-logo" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0" y="0" viewBox="0 0 609 177" xml:space="preserve" enable-background="new 0 0 609 177"><style type="text/css">
20
+ .st0{fill:#231F20;}
21
+ .st1{fill:#FBAF41;}
22
+ .st2{fill:#8676D5;}
23
+ .st3{fill:#9CCC6B;}
24
+ .st4{fill:#FBCC6B;}
25
+ .st5{fill:#9CCCD5;}
26
+ .st6{fill:#FFFFFF;}
27
+ </style><path id="XMLID_36_" class="st0" d="M80.9 176l-37.2-21.5L6.4 133V90 47l37.2-21.5L80.9 4l37.2 21.5L155.4 47v43 43l-37.2 21.5L80.9 176z"/><polygon id="XMLID_13_" class="st1" points="16 52.5 16 127.5 145.9 127.5 "/><polygon id="XMLID_12_" class="st2" points="16 127.5 145.9 127.5 145.9 52.5 "/><polygon id="XMLID_11_" class="st3" points="145.9 127.5 80.9 15.1 16 127.5 "/><polygon id="XMLID_10_" class="st4" points="48.5 71.3 16 127.5 145.9 127.5 "/><polygon id="XMLID_9_" class="st5" points="16 127.5 145.9 127.5 113.4 71.3 "/><polygon id="XMLID_8_" class="st6" points="80.9 90 16 127.5 80.9 165 145.9 127.5 "/><g id="XMLID_17_"><path id="XMLID_27_" class="st6" d="M205.4 125.4V55h27.7c22 0 37.3 14 37.3 35.1 0 21.3-15.3 35.2-37.2 35.2H205.4zM255.2 90.2c0-12.3-7.6-21.9-21.9-21.9h-12.9v44h12.8C247.1 112.2 255.2 102.2 255.2 90.2z"/><path id="XMLID_25_" class="st6" d="M286.4 125.4V55h15v70.3H286.4z"/><path id="XMLID_23_" class="st6" d="M315.7 115.5l8.2-11.7c5 5.2 12.7 9.6 22.4 9.6 8.3 0 12.2-3.7 12.2-7.8 0-12.2-40.5-3.7-40.5-30.2 0-11.7 10.1-21.4 26.7-21.4 11.2 0 20.5 3.4 27.4 9.8L363.8 75c-5.7-5.3-13.3-7.7-20.5-7.7 -6.3 0-9.9 2.7-9.9 7 0 11.1 40.4 3.6 40.4 29.8 0 12.9-9.3 22.6-28.2 22.6C332.1 126.7 322.4 122.1 315.7 115.5z"/><path id="XMLID_21_" class="st6" d="M385.8 90.3c0-21.7 16.3-36.4 37.5-36.4 15.4 0 24.4 8.3 29.3 17.2l-12.9 6.3c-3-5.7-9.3-10.2-16.5-10.2 -12.9 0-22.1 9.8-22.1 23.1 0 13.3 9.3 23.1 22.1 23.1 7.2 0 13.5-4.5 16.5-10.2l12.9 6.2c-5 8.8-13.9 17.3-29.3 17.3C402.1 126.7 385.8 111.9 385.8 90.3z"/><path id="XMLID_18_" class="st6" d="M463.5 90.3c0-21.2 15.5-36.4 36.8-36.4 21.2 0 36.7 15.2 36.7 36.4 0 21.2-15.5 36.4-36.7 36.4C479 126.7 463.5 111.5 463.5 90.3zM521.6 90.3c0-13.2-8.3-23.1-21.3-23.1 -13.1 0-21.4 9.9-21.4 23.1 0 13.1 8.3 23.1 21.4 23.1C513.2 113.4 521.6 103.3 521.6 90.3z"/></g></svg>
28
+ </span>
29
+ </a>
30
+ </h1>
31
+ </header>
32
+ <nav role="navigation">
33
+ <ol class="next-nav__list next-nav__list--primary">
34
+ <%= render 'layouts/admin/nav_items' %>
35
+ </ol>
36
+ </nav>
37
+ </div>
38
+ </div>
39
+ </div>
40
+
41
+ <main id="content" role="main">
42
+ <div class="header-row">
43
+ <header class="header">
44
+ <h1 class="header__main">
45
+ <svg class="next-icon next-icon--size-20 next-icon--header">
46
+ <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#next-collections"></use>
47
+ </svg>
48
+ <% if content_for?(:breadcrumb) %>
49
+ <span class="breadcrumb">
50
+ <a href="<%= yield(:breadcrumb_url) %>"><%= yield(:breadcrumb) %></a>
51
+ /
52
+ </span>
53
+ <% end %>
54
+ <span>
55
+ <%= yield(:title) %>
56
+ </span>
57
+ </h1>
58
+ </header>
59
+ </div>
60
+
61
+ <div class="page">
62
+ <%= yield %>
63
+ </div>
64
+ </main>
65
+
66
+ </body>
67
+ </html>
@@ -0,0 +1,18 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= yield(:title) %></title>
5
+
6
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
7
+
8
+ <%= csrf_meta_tags %>
9
+
10
+ <%= yield :extra_head %>
11
+ </head>
12
+ <body>
13
+
14
+ <%= yield %>
15
+
16
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
17
+ </body>
18
+ </html>
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= yield(:title) %></title>
5
+
6
+ <script src="//cdn.shopify.com/s/assets/external/app.js?<%= Time.now.strftime('%Y%m%d%H') %>"></script>
7
+ <script type="text/javascript">
8
+ // Initialise the Shopify App.
9
+ ShopifyApp.init({
10
+ "apiKey": "<%= ShopifyApp.configuration.api_key %>",
11
+ "shopOrigin": "<%= "https://#{ @shop_session.url }" if @shop_session %>",
12
+ "debug": <%= Rails.env.development? ? 'true' : 'false' %>
13
+ });
14
+ </script>
15
+
16
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
17
+
18
+ <%= csrf_meta_tags %>
19
+
20
+ <%= yield :extra_head %>
21
+ </head>
22
+ <body>
23
+ <script type="text/javascript">
24
+ ShopifyApp.Bar.initialize({
25
+ title: "<%= yield(:title) %>",
26
+ icon: "<%= image_url("disco_app/icon.svg") %>",
27
+ buttons: <%= content_for?(:buttons) ? content_for(:buttons) : '{}' %>
28
+ });
29
+ </script>
30
+
31
+ <%= yield %>
32
+
33
+ <% flash.each do |key, message| %>
34
+ <script type="text/javascript">
35
+ ShopifyApp.flash<%= (key == 'error') ? 'Error' : 'Notice' %>('<%= message %>');
36
+ </script>
37
+ <% end %>
38
+
39
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true, 'data-turbolinks-eval' => false %>
40
+
41
+ <%= render 'disco_app/shared/icons' %>
42
+ </body>
43
+ </html>
@@ -0,0 +1,28 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= yield(:title) %></title>
5
+ <script src="//cdn.shopify.com/s/assets/external/app.js?<%= Time.now.strftime('%Y%m%d%H') %>"></script>
6
+ <script type="text/javascript">
7
+ // Initialise the Shopify App.
8
+ ShopifyApp.init({
9
+ "apiKey": "<%= ShopifyApp.configuration.api_key %>",
10
+ "shopOrigin": "<%= "https://#{ @shop_session.url }" if @shop_session %>",
11
+ "debug": <%= Rails.env.development? ? 'true' : 'false' %>,
12
+ "forceRedirect": false
13
+ });
14
+ </script>
15
+
16
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
17
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
18
+
19
+ <%= csrf_meta_tags %>
20
+
21
+ <%= yield :extra_head %>
22
+ </head>
23
+ <body>
24
+
25
+ <%= yield %>
26
+
27
+ </body>
28
+ </html>
@@ -0,0 +1,26 @@
1
+ <% provide(:title, 'Install') %>
2
+
3
+ <%= form_tag shopify_app.login_path do %>
4
+ <div class="modal-dialog">
5
+ <div class="modal-content">
6
+ <div class="modal-body">
7
+
8
+ <% flash.each do |message_type, message| %>
9
+ <div class="alert alert-<%= message_type %>"><%= message %></div>
10
+ <% end %>
11
+
12
+ <div class="form-group">
13
+ <div class="input-group">
14
+ <div class="input-group-addon">http://</div>
15
+ <input type="text" class="form-control" id="shop" name="shop" placeholder="your-store" autocomplete="off" autofocus="on" />
16
+ <div class="input-group-addon">.myshopify.com</div>
17
+ </div>
18
+ </div>
19
+
20
+ </div>
21
+ <div class="modal-footer">
22
+ <button type="submit" class="btn btn-primary">Install</button>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ <% end %>
data/config/routes.rb ADDED
@@ -0,0 +1,48 @@
1
+ DiscoApp::Engine.routes.draw do
2
+
3
+ get 'ref', to: '/sessions#referral'
4
+
5
+ controller :webhooks do
6
+ post 'webhooks' => :process_webhook, as: :webhooks
7
+ end
8
+
9
+ resources :subscriptions, only: [:new, :create] do
10
+ resources :charges, only: [:new, :create] do
11
+ member do
12
+ get 'activate'
13
+ end
14
+ end
15
+ end
16
+
17
+ controller :install do
18
+ get 'install' => :install, as: :install
19
+ get 'installing' => :installing, as: :installing
20
+ get 'uninstalling' => :uninstalling, as: :uninstalling
21
+ end
22
+
23
+ controller 'admin' do
24
+ get 'admin', to: redirect('/admin/shops')
25
+ get 'admin/shops' => 'admin/shops#index'
26
+ end
27
+
28
+ namespace :admin do
29
+ resources :shops, only: [:index, :edit, :update] do
30
+ resources :subscriptions, only: [:edit, :update]
31
+ end
32
+ resources :plans
33
+ resource :app_settings, only: [:edit, :update]
34
+
35
+ # JSON-API resources for admins.
36
+ namespace :resources do
37
+ jsonapi_resources :shops
38
+ end
39
+ end
40
+
41
+ # Make the embedded app frame emulator available in development.
42
+ if Rails.env.development?
43
+ controller :frame do
44
+ get 'frame' => :frame, as: :frame
45
+ end
46
+ end
47
+
48
+ end
@@ -0,0 +1,15 @@
1
+ class CreateShopsIfNotExistent < ActiveRecord::Migration
2
+
3
+ def change
4
+ unless table_exists? :shops or table_exists? :disco_app_shops
5
+ create_table :shops do |t|
6
+ t.string :shopify_domain, null: false
7
+ t.string :shopify_token, null: false
8
+ t.timestamps null: false
9
+ end
10
+
11
+ add_index :shops, :shopify_domain, unique: true
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,5 @@
1
+ class AddStatusToShops < ActiveRecord::Migration
2
+ def change
3
+ add_column :shops, :status, :integer, default: 0
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ class AddMetaToShops < ActiveRecord::Migration
2
+ def change
3
+ add_column :shops, :email, :string
4
+ add_column :shops, :country_name, :string
5
+ add_column :shops, :currency, :string
6
+ add_column :shops, :money_format, :string
7
+ add_column :shops, :money_with_currency_format, :string
8
+ add_column :shops, :domain, :string
9
+ add_column :shops, :plan_name, :string
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ class AddChargeStatusToShop < ActiveRecord::Migration
2
+ def change
3
+ add_column :shops, :charge_status, :integer, default: 6
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ class AddMoreMetaToShops < ActiveRecord::Migration
2
+ def change
3
+ add_column :shops, :plan_display_name, :string
4
+ add_column :shops, :latitude, :decimal
5
+ add_column :shops, :longitude, :decimal
6
+ add_column :shops, :customer_email, :string
7
+ add_column :shops, :password_enabled, :boolean
8
+ add_column :shops, :phone, :string
9
+ add_column :shops, :primary_locale, :string
10
+ add_column :shops, :ships_to_countries, :string
11
+ add_column :shops, :timezone, :string
12
+ add_column :shops, :iana_timezone, :string
13
+ add_column :shops, :has_storefront, :boolean
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ class CreateDiscoAppPlans < ActiveRecord::Migration
2
+ def change
3
+ create_table :disco_app_plans do |t|
4
+ t.integer :status
5
+ t.string :name
6
+ t.integer :charge_type
7
+ t.decimal :default_price
8
+ t.integer :default_trial_days
9
+
10
+ t.timestamps null: false
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ class CreateDiscoAppSubscriptions < ActiveRecord::Migration
2
+ def change
3
+ create_table :disco_app_subscriptions do |t|
4
+ t.belongs_to :shop, index: true
5
+ t.belongs_to :plan, index: true
6
+ t.integer :status
7
+ t.string :name
8
+ t.integer :charge_type
9
+ t.decimal :price
10
+ t.integer :trial_days
11
+
12
+ t.timestamps null: false
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class MoveShopToDiscoAppEngine < ActiveRecord::Migration
2
+ def change
3
+ rename_table :shops, :disco_app_shops
4
+ end
5
+ end
@@ -0,0 +1,12 @@
1
+ class CreateDiscoAppSessions < ActiveRecord::Migration
2
+ def change
3
+ create_table :disco_app_sessions do |t|
4
+ t.string :session_id, null: false
5
+ t.text :data
6
+ t.timestamps null: false
7
+ end
8
+
9
+ add_index :disco_app_sessions, :session_id, :unique => true
10
+ add_index :disco_app_sessions, :updated_at
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ class AddShopIdToDiscoAppSessions < ActiveRecord::Migration
2
+ def change
3
+ add_column :disco_app_sessions, :shop_id, :integer, null: true
4
+ add_foreign_key :disco_app_sessions, :disco_app_shops, column: :shop_id, on_delete: :cascade
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ class CreateDiscoAppSettings < ActiveRecord::Migration
2
+ def change
3
+ create_table :disco_app_app_settings do |t|
4
+
5
+ t.timestamps null: false
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,22 @@
1
+ class UpdatePlans < ActiveRecord::Migration
2
+ def change
3
+ remove_column :disco_app_plans, :default_price, :decimal
4
+ rename_column :disco_app_plans, :default_trial_days, :trial_period_days
5
+ rename_column :disco_app_plans, :charge_type, :plan_type
6
+ add_column :disco_app_plans, :amount, :integer, default: 0
7
+ add_column :disco_app_plans, :currency, :string, default: 'USD'
8
+ add_column :disco_app_plans, :interval, :integer, default: 0
9
+ add_column :disco_app_plans, :interval_count, :integer, default: 1
10
+
11
+ reversible do |direction|
12
+ direction.up do
13
+ change_column :disco_app_plans, :plan_type, :integer, default: 0
14
+ change_column :disco_app_plans, :status, :integer, default: 0
15
+ end
16
+ direction.down do
17
+ change_column :disco_app_plans, :plan_type, :integer
18
+ change_column :disco_app_plans, :status, :integer
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ class UpdateSubscriptions < ActiveRecord::Migration
2
+ def change
3
+ remove_column :disco_app_subscriptions, :name, :string
4
+ remove_column :disco_app_subscriptions, :price, :decimal
5
+ remove_column :disco_app_subscriptions, :trial_days, :integer
6
+
7
+ rename_column :disco_app_subscriptions, :charge_type, :subscription_type
8
+
9
+ add_column :disco_app_subscriptions, :trial_start_at, :datetime, null: true
10
+ add_column :disco_app_subscriptions, :trial_end_at, :datetime, null: true
11
+ add_column :disco_app_subscriptions, :cancelled_at, :datetime, null: true
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ class CreateDiscoAppRecurringApplicationCharges < ActiveRecord::Migration
2
+ def change
3
+ create_table :disco_app_recurring_application_charges do |t|
4
+ t.integer :shop_id, limit: 8
5
+ t.integer :subscription_id, limit: 8
6
+ t.integer :status, default: 0
7
+
8
+ t.timestamps null: false
9
+ end
10
+
11
+ add_foreign_key :disco_app_recurring_application_charges, :disco_app_shops, column: :shop_id
12
+ add_foreign_key :disco_app_recurring_application_charges, :disco_app_subscriptions, column: :subscription_id
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ class CreateDiscoAppApplicationCharges < ActiveRecord::Migration
2
+ def change
3
+ create_table :disco_app_application_charges do |t|
4
+ t.integer :shop_id, limit: 8
5
+ t.integer :subscription_id, limit: 8
6
+ t.integer :status, default: 0
7
+
8
+ t.timestamps null: false
9
+ end
10
+
11
+ add_foreign_key :disco_app_application_charges, :disco_app_shops, column: :shop_id
12
+ add_foreign_key :disco_app_application_charges, :disco_app_subscriptions, column: :subscription_id
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class DropChargeStatusFromShops < ActiveRecord::Migration
2
+ def change
3
+ remove_column :disco_app_shops, :charge_status, :integer, default: 0
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ class AddShopifyAttributesToCharges < ActiveRecord::Migration
2
+ def change
3
+ add_column :disco_app_application_charges, :shopify_id, :integer, limit: 8, null: true
4
+ add_column :disco_app_recurring_application_charges, :shopify_id, :integer, limit: 8, null: true
5
+ add_column :disco_app_application_charges, :confirmation_url, :string, null: true
6
+ add_column :disco_app_recurring_application_charges, :confirmation_url, :string, null: true
7
+ end
8
+ end
@@ -0,0 +1,14 @@
1
+ class CreateDiscoAppPlanCodes < ActiveRecord::Migration
2
+ def change
3
+ create_table :disco_app_plan_codes do |t|
4
+ t.integer :plan_id, limit: 8
5
+ t.string :code
6
+ t.integer :trial_period_days
7
+ t.integer :amount
8
+
9
+ t.timestamps null: false
10
+ end
11
+
12
+ add_foreign_key :disco_app_plan_codes, :disco_app_plans, column: :plan_id
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class AddStatusToPlanCodes < ActiveRecord::Migration
2
+ def change
3
+ add_column :disco_app_plan_codes, :status, :integer, default: 0
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddAmountAndPlanCodeToDiscoAppSubscriptions < ActiveRecord::Migration
2
+ def change
3
+ add_column :disco_app_subscriptions, :amount, :integer, default: 0
4
+ add_column :disco_app_subscriptions, :plan_code_id, :integer, limit: 8
5
+ add_foreign_key :disco_app_subscriptions, :disco_app_plan_codes, column: :plan_code_id
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddSourceToDiscoAppSubscriptions < ActiveRecord::Migration
2
+ def change
3
+ add_column :disco_app_subscriptions, :source, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddTrialPeriodDaysToDiscoAppSubscriptions < ActiveRecord::Migration
2
+ def change
3
+ add_column :disco_app_subscriptions, :trial_period_days, :integer
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddNameToDiscoAppShops < ActiveRecord::Migration
2
+ def change
3
+ add_column :disco_app_shops, :name, :string
4
+ end
5
+ end
@@ -0,0 +1,61 @@
1
+ class MoveShopToSynchronises < ActiveRecord::Migration
2
+
3
+ class DiscoApp::Shop < ActiveRecord::Base
4
+ end
5
+
6
+ ATTRIBUTES_TO_MIGRATE = [
7
+ :email, :country_name, :currency, :money_format,
8
+ :money_with_currency_format, :plan_display_name,
9
+ :latitude, :longitude, :customer_email, :password_enabled, :phone,
10
+ :primary_locale, :ships_to_countries, :timezone, :iana_timezone,
11
+ :has_storefront
12
+ ]
13
+
14
+ def up
15
+ add_column :disco_app_shops, :data, :jsonb, default: {}
16
+
17
+ DiscoApp::Shop.find_each do |shop|
18
+ data = shop.data
19
+ ATTRIBUTES_TO_MIGRATE.each do |attribute|
20
+ data[attribute.to_s] = shop.send(attribute)
21
+ end
22
+ shop.update(data: data)
23
+ end
24
+
25
+ ATTRIBUTES_TO_MIGRATE.each do |attribute|
26
+ remove_column :disco_app_shops, attribute
27
+ end
28
+ end
29
+
30
+ def down
31
+ ATTRIBUTES_TO_MIGRATE.each do |attribute|
32
+ add_column :disco_app_shops, attribute, attribute_column_type(attribute)
33
+ end
34
+
35
+ DiscoApp::Shop.find_each do |shop|
36
+ shop.update(Hash[ATTRIBUTES_TO_MIGRATE.map do |attribute|
37
+ [attribute, shop.data[attribute.to_s]]
38
+ end])
39
+ end
40
+
41
+ remove_column :disco_app_shops, :data
42
+ end
43
+
44
+ private
45
+
46
+ def attribute_column_type(attribute)
47
+ case attribute
48
+ when :password_enabled
49
+ :boolean
50
+ when :has_storefront
51
+ :boolean
52
+ when :latitude
53
+ :decimal
54
+ when :longitude
55
+ :decimal
56
+ else
57
+ :string
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,39 @@
1
+ module DiscoApp
2
+
3
+ class Configuration
4
+
5
+ # Required configuration.
6
+ attr_accessor :app_name
7
+
8
+ # Set the below if using an application proxy.
9
+ attr_accessor :app_proxy_prefix
10
+
11
+ # Set the below to create real Shopify charges.
12
+ attr_accessor :real_charges
13
+ alias_method :real_charges?, :real_charges
14
+
15
+ # Optional configuration, usually useful for development environments.
16
+ attr_accessor :skip_proxy_verification
17
+ alias_method :skip_proxy_verification?, :skip_proxy_verification
18
+ attr_accessor :skip_webhook_verification
19
+ alias_method :skip_webhook_verification?, :skip_webhook_verification
20
+ attr_accessor :skip_carrier_request_verification
21
+ alias_method :skip_carrier_request_verification?, :skip_carrier_request_verification
22
+ attr_accessor :skip_oauth
23
+ alias_method :skip_oauth?, :skip_oauth
24
+
25
+ end
26
+
27
+ def self.configuration
28
+ @configuration ||= Configuration.new
29
+ end
30
+
31
+ def self.configuration=(config)
32
+ @configuration = config
33
+ end
34
+
35
+ def self.configure
36
+ yield configuration
37
+ end
38
+
39
+ end
@@ -0,0 +1,4 @@
1
+ module DiscoApp
2
+ SOURCE_COOKIE_KEY = '_disco_app_source'
3
+ CODE_COOKIE_KEY = '_disco_app_code'
4
+ end
@@ -0,0 +1,26 @@
1
+ require 'shopify_app'
2
+ require 'jquery-rails'
3
+ require 'turbolinks'
4
+ require 'activerecord/session_store'
5
+ require 'disco_app/session'
6
+ require 'jsonapi-resources'
7
+ require 'react-rails'
8
+
9
+ module DiscoApp
10
+ class Engine < ::Rails::Engine
11
+
12
+ isolate_namespace DiscoApp
13
+ engine_name 'disco_app'
14
+
15
+ # Ensure DiscoApp helpers are available throughout application.
16
+ config.to_prepare do
17
+ ApplicationController.helper(DiscoApp::ApplicationHelper)
18
+ end
19
+
20
+ # Ensure our frame assets are included for precompilation.
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)
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,14 @@
1
+ module DiscoApp
2
+ class Session < ActiveRecord::SessionStore::Session
3
+
4
+ before_save :set_shop_id!
5
+
6
+ private
7
+
8
+ def set_shop_id!
9
+ return false unless loaded?
10
+ write_attribute(:shop_id, data[:shopify] || data['shopify'])
11
+ end
12
+
13
+ end
14
+ end