shopify_app 13.0.0 → 16.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +5 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +6 -0
  4. data/.github/workflows/build.yml +38 -0
  5. data/.github/workflows/rubocop.yml +22 -0
  6. data/.gitignore +0 -2
  7. data/.rubocop.yml +14 -6
  8. data/CHANGELOG.md +95 -0
  9. data/Gemfile +5 -0
  10. data/Gemfile.lock +252 -0
  11. data/README.md +83 -45
  12. data/Rakefile +1 -0
  13. data/SECURITY.md +59 -0
  14. data/app/assets/images/storage_access.svg +1 -2
  15. data/app/assets/javascripts/shopify_app/storage_access.js +2 -1
  16. data/app/assets/javascripts/shopify_app/top_level_interaction.js +1 -1
  17. data/app/controllers/concerns/shopify_app/authenticated.rb +1 -0
  18. data/app/controllers/concerns/shopify_app/require_known_shop.rb +39 -0
  19. data/app/controllers/shopify_app/authenticated_controller.rb +1 -0
  20. data/app/controllers/shopify_app/callback_controller.rb +77 -15
  21. data/app/controllers/shopify_app/extension_verification_controller.rb +2 -7
  22. data/app/controllers/shopify_app/sessions_controller.rb +24 -7
  23. data/app/controllers/shopify_app/webhooks_controller.rb +6 -5
  24. data/app/views/shopify_app/partials/_button_styles.html.erb +41 -36
  25. data/app/views/shopify_app/partials/_card_styles.html.erb +3 -3
  26. data/app/views/shopify_app/partials/_empty_state_styles.html.erb +28 -59
  27. data/app/views/shopify_app/partials/_form_styles.html.erb +56 -0
  28. data/app/views/shopify_app/partials/_layout_styles.html.erb +16 -1
  29. data/app/views/shopify_app/partials/_typography_styles.html.erb +6 -6
  30. data/app/views/shopify_app/sessions/enable_cookies.html.erb +2 -7
  31. data/app/views/shopify_app/sessions/new.html.erb +38 -110
  32. data/app/views/shopify_app/sessions/request_storage_access.html.erb +1 -1
  33. data/app/views/shopify_app/sessions/top_level_interaction.html.erb +21 -22
  34. data/config/locales/fi.yml +1 -1
  35. data/config/locales/nl.yml +7 -7
  36. data/config/locales/th.yml +4 -4
  37. data/config/routes.rb +1 -0
  38. data/docs/Quickstart.md +7 -17
  39. data/docs/Releasing.md +16 -14
  40. data/karma.conf.js +1 -1
  41. data/lib/generators/shopify_app/add_after_authenticate_job/add_after_authenticate_job_generator.rb +5 -3
  42. data/lib/generators/shopify_app/add_after_authenticate_job/templates/after_authenticate_job.rb +1 -0
  43. data/lib/generators/shopify_app/add_marketing_activity_extension/add_marketing_activity_extension_generator.rb +2 -1
  44. data/lib/generators/shopify_app/add_marketing_activity_extension/templates/marketing_activities_controller.rb +4 -4
  45. data/lib/generators/shopify_app/add_webhook/add_webhook_generator.rb +5 -4
  46. data/lib/generators/shopify_app/add_webhook/templates/{webhook_job.rb → webhook_job.rb.tt} +5 -0
  47. data/lib/generators/shopify_app/app_proxy_controller/app_proxy_controller_generator.rb +4 -3
  48. data/lib/generators/shopify_app/app_proxy_controller/templates/app_proxy_controller.rb +3 -3
  49. data/lib/generators/shopify_app/app_proxy_controller/templates/app_proxy_route.rb +10 -9
  50. data/lib/generators/shopify_app/authenticated_controller/authenticated_controller_generator.rb +1 -1
  51. data/lib/generators/shopify_app/controllers/controllers_generator.rb +2 -1
  52. data/lib/generators/shopify_app/home_controller/home_controller_generator.rb +22 -3
  53. data/lib/generators/shopify_app/home_controller/templates/index.html.erb +67 -17
  54. data/lib/generators/shopify_app/home_controller/templates/unauthenticated_home_controller.rb +10 -0
  55. data/lib/generators/shopify_app/install/install_generator.rb +11 -10
  56. data/lib/generators/shopify_app/install/templates/embedded_app.html.erb +1 -1
  57. data/lib/generators/shopify_app/install/templates/flash_messages.js +0 -2
  58. data/lib/generators/shopify_app/install/templates/omniauth.rb +2 -1
  59. data/lib/generators/shopify_app/install/templates/{shopify_app.rb → shopify_app.rb.tt} +4 -3
  60. data/lib/generators/shopify_app/install/templates/user_agent.rb +2 -1
  61. data/lib/generators/shopify_app/products_controller/products_controller_generator.rb +19 -0
  62. data/lib/generators/shopify_app/products_controller/templates/products_controller.rb +8 -0
  63. data/lib/generators/shopify_app/routes/routes_generator.rb +1 -0
  64. data/lib/generators/shopify_app/routes/templates/routes.rb +10 -9
  65. data/lib/generators/shopify_app/shop_model/shop_model_generator.rb +12 -7
  66. data/lib/generators/shopify_app/shop_model/templates/shop.rb +1 -0
  67. data/lib/generators/shopify_app/shopify_app_generator.rb +4 -3
  68. data/lib/generators/shopify_app/user_model/templates/user.rb +1 -0
  69. data/lib/generators/shopify_app/user_model/user_model_generator.rb +12 -7
  70. data/lib/generators/shopify_app/views/views_generator.rb +2 -1
  71. data/lib/shopify_app/configuration.rb +15 -8
  72. data/lib/shopify_app/controller_concerns/app_proxy_verification.rb +3 -3
  73. data/lib/shopify_app/controller_concerns/csrf_protection.rb +15 -0
  74. data/lib/shopify_app/controller_concerns/embedded_app.rb +3 -2
  75. data/lib/shopify_app/controller_concerns/itp.rb +2 -0
  76. data/lib/shopify_app/controller_concerns/localization.rb +1 -0
  77. data/lib/shopify_app/controller_concerns/login_protection.rb +85 -17
  78. data/lib/shopify_app/controller_concerns/payload_verification.rb +24 -0
  79. data/lib/shopify_app/controller_concerns/webhook_verification.rb +3 -18
  80. data/lib/shopify_app/engine.rb +26 -0
  81. data/lib/shopify_app/jobs/scripttags_manager_job.rb +1 -1
  82. data/lib/shopify_app/jobs/webhooks_manager_job.rb +1 -1
  83. data/lib/shopify_app/managers/scripttags_manager.rb +4 -3
  84. data/lib/shopify_app/managers/webhooks_manager.rb +4 -3
  85. data/lib/shopify_app/middleware/jwt_middleware.rb +42 -0
  86. data/lib/shopify_app/middleware/same_site_cookie_middleware.rb +2 -1
  87. data/lib/shopify_app/session/in_memory_session_store.rb +7 -3
  88. data/lib/shopify_app/session/in_memory_shop_session_store.rb +10 -0
  89. data/lib/shopify_app/session/in_memory_user_session_store.rb +10 -0
  90. data/lib/shopify_app/session/jwt.rb +63 -0
  91. data/lib/shopify_app/session/null_user_session_store.rb +22 -0
  92. data/lib/shopify_app/session/session_repository.rb +13 -16
  93. data/lib/shopify_app/session/session_storage.rb +1 -0
  94. data/lib/shopify_app/session/shop_session_storage.rb +21 -9
  95. data/lib/shopify_app/session/user_session_storage.rb +19 -8
  96. data/lib/shopify_app/test_helpers/all.rb +2 -0
  97. data/lib/shopify_app/test_helpers/webhook_verification_helper.rb +17 -0
  98. data/lib/shopify_app/utils.rb +6 -5
  99. data/lib/shopify_app/version.rb +2 -1
  100. data/lib/shopify_app.rb +12 -5
  101. data/package.json +7 -8
  102. data/shopify_app.gemspec +12 -7
  103. data/yarn.lock +2098 -2115
  104. metadata +56 -12
  105. data/.travis.yml +0 -27
  106. data/package-lock.json +0 -7245
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4e2d37f9112725500d1a9f36fe76b743e8981920eea4838024cafd6a71cb5eb
4
- data.tar.gz: 3c52a0ee9a7f40433ad01b82bda3a0c6d30dd9bb45c319f1d457a0bd13c30fc0
3
+ metadata.gz: cb021068958e3d20cb00ac2e038b2b51b475a70fe586756b426b4fe9f36ee214
4
+ data.tar.gz: 1263b5be44c7a8db83e4620130e00e191d30e12f541edc93861cf2383c132be1
5
5
  SHA512:
6
- metadata.gz: 19a445a22b25b01f860a84128551234313bc44e7acd1583ec90bc96f59d65a8fac208feb1d5a6899453935dd19458196c5253605d85e3ac346be2fa405a50b4c
7
- data.tar.gz: 526354098526753ade6d30a346ffa75b2280707638b66dba61c89b34a771e72dd4c23cfae8bda319de58a7a373e7c05d233a13a4f2f8325c7754cda1ed58d835
6
+ metadata.gz: 0105ac8d2e7efe5b523ed8ab9d3e968ab9613215b000fb99c6f9515b2379428da7b291c3a2c0b6e9640440d9f2754474a3c11a62b3de2f9dbbdd4d02003af12e
7
+ data.tar.gz: 320fd2f2cf36367bffc54edf546169cc13d9be9ee3b02a3fdd02e1df9333529cfe323378e303872284567ed7f6642399dfbbc5ad46ba29a15ebc012184d25035
@@ -12,3 +12,8 @@ Authentication Issues
12
12
  A great deal of the issues surrounding this repo are around authenticating (installing) the generated app with Shopify.
13
13
 
14
14
  If you are experiencing issues with your app authenticating/installing the best way to get help fast is to create a repo with the minimal amount of code to demonstrate the issue and a clearly documented set of steps you took to arrive there. This will help us solve your problem quicker since we won't need to spend any time figuring out how to reproduce the bug. Please also include your operating system and browser.
15
+
16
+ Security
17
+ --------
18
+
19
+ Please be certain to redact any private information from your logs or code snippets such as Api Keys, Api Secrets, and any authentication tokens such as shop_tokens.
@@ -0,0 +1,6 @@
1
+ Before submitting the PR, please consider if any of the following are needed:
2
+
3
+ - [ ] Update `CHANGELOG.md` if the changes would impact users
4
+ - [ ] Update `README.md`, if appropriate.
5
+ - [ ] Update any relevant pages in `docs/`, if necessary
6
+ - [ ] For security fixes, the [Disclosure Policy](https://github.com/Shopify/shopify_app/blob/master/SECURITY.md#disclosure-policy) must be followed.
@@ -0,0 +1,38 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+
6
+ jobs:
7
+ build:
8
+ runs-on: macos-latest # prevents intermittent Chrome Headless error unlike ubuntu
9
+ name: Ruby ${{ matrix.version }}
10
+ strategy:
11
+ matrix:
12
+ version: [2.5, 2.6, 2.7]
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Cache node modules
17
+ uses: actions/cache@v2
18
+ with:
19
+ # npm cache files are stored in `~/.npm` on Linux/macOS
20
+ path: ~/.npm
21
+ key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
22
+ - name: Set up Ruby ${{ matrix.version }}
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.version }}
26
+ bundler-cache: true
27
+ - name: Set up Node
28
+ uses: actions/setup-node@v2-beta
29
+ with:
30
+ node-version: '12'
31
+ - name: Install Dependencies
32
+ run: |
33
+ yarn
34
+ - name: Run Tests
35
+ run: |
36
+ yarn test
37
+ bundle exec rake test
38
+
@@ -0,0 +1,22 @@
1
+ name: RuboCop
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - uses: actions/checkout@v2
11
+ - name: Set up Ruby 2.7
12
+ uses: ruby/setup-ruby@v1
13
+ with:
14
+ ruby-version: 2.7
15
+ bundler-cache: true
16
+ - name: Install gems
17
+ run: |
18
+ bundle config path vendor/bundle
19
+ bundle config set without 'default development test'
20
+ bundle install --jobs 4 --retry 3
21
+ - name: Run RuboCop
22
+ run: bundle exec rubocop --parallel
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  *.gem
2
2
  .bundle
3
- Gemfile.lock
4
3
  pkg/*
5
4
  .DS_Store
6
5
  .yardoc
@@ -13,4 +12,3 @@ test/tmp/*
13
12
  /test/dummy/tmp/*
14
13
  /node_modules/
15
14
  .byebug_history
16
-
data/.rubocop.yml CHANGED
@@ -1,10 +1,18 @@
1
- inherit_from:
2
- - https://shopify.github.io/ruby-style-guide/rubocop.yml
1
+ inherit_gem:
2
+ rubocop-shopify: rubocop.yml
3
3
 
4
- LineLength:
4
+ AllCops:
5
+ TargetRubyVersion: 2.7
5
6
  Exclude:
6
- - test/**/*
7
+ - 'test/tmp/**/*'
8
+ - 'vendor/bundle/**/*'
7
9
 
8
- Metrics/ClassLength:
10
+ Style/MethodCallWithArgsParentheses:
9
11
  Exclude:
10
- - test/**/*
12
+ - '**/Gemfile'
13
+ - 'test/**/*'
14
+
15
+ Style/ClassAndModuleChildren:
16
+ Exclude:
17
+ - 'test/**/*'
18
+
data/CHANGELOG.md CHANGED
@@ -1,3 +1,98 @@
1
+ 16.0.0
2
+ ------
3
+ * Update all `html.erb` and `css` files to correspond with updated store admin design language [#1102](https://github.com/Shopify/shopify_app/pull/1102)
4
+
5
+ 15.0.1
6
+ ------
7
+ * Allow JWT session token `sub` field to be parsed as a string [#1103](https://github.com/Shopify/shopify_app/pull/1103)
8
+
9
+ 15.0.0
10
+ ------
11
+ * Change `X-Shopify-API-Request-Failure-Unauthorized` HTTP header value from boolean to string
12
+
13
+ 14.4.4
14
+ ------
15
+ * Patch to not log params in ShopifyApp jobs [#1086](https://github.com/Shopify/shopify_app/pull/1086)
16
+
17
+ 14.4.3
18
+ ------
19
+ * Fix to ensure post authenticate jobs are run after callback requests [#1079](https://github.com/Shopify/shopify_app/pull/1079)
20
+
21
+ 14.4.2
22
+ ------
23
+ * Add debug logs in sessions controller
24
+
25
+ 14.4.1
26
+ ------
27
+ * Add debug logs for investigating authentication issues
28
+
29
+ 14.4.0
30
+ ------
31
+ * Replace script tags for ITP screens with data attributes
32
+
33
+ 14.3.0
34
+ ------
35
+ * Create user session if one does not exist but was expected
36
+
37
+ 14.2.0
38
+ ------
39
+ * Revert "Replace redirect calls to use App Bridge redirect functionality"
40
+
41
+ 14.1.0
42
+ ------
43
+ * Replace redirect calls to use App Bridge redirect functionality
44
+
45
+ 14.0.0
46
+ ------
47
+ * Ruby 2.4 is no longer supported by this gem
48
+ * Bump gemspec ruby dependency to 2.5
49
+ * (Beta) Add `--with-session-token` flag to the Shopify App generator to create an app that is compatible with App Bridge Authentication
50
+
51
+ 13.5.0
52
+ ------
53
+ * Add `signal_access_token_required` helper method for apps to indicate access token has expired and that a new one is required
54
+
55
+ 13.4.1
56
+ ------
57
+ * Fix the version checks for the dependency on `shopify_api` to allow all of v9.X
58
+
59
+ 13.4.0
60
+ ------
61
+ * Skip CSRF protection if a valid signed JWT token is present as we trust Shopify to be the only source that can sign it securely. [#994](https://github.com/Shopify/shopify_app/pull/994)
62
+
63
+ 13.3.0
64
+ ------
65
+ * Added Payload Verification module [#992](https://github.com/Shopify/shopify_app/pull/992)
66
+ * Add concern to check for valid shop domains in the unauthenticated controller
67
+
68
+ 13.2.0
69
+ ------
70
+ * Get current shop domain from JWT header
71
+ * Validate that the omniauth data matches the JWT data
72
+ * Persist the token information to the session store
73
+
74
+ 13.1.1
75
+ ------
76
+ * Update browser_sniffer to 1.2.2
77
+
78
+ 13.1.0
79
+ ------
80
+ * Adds the shop URL as a parameter when redirecting after the callback
81
+ * Bump minimum Ruby version to 2.4
82
+ * Bug fixes
83
+
84
+ 13.0.1
85
+ ------
86
+ * Small addition to WebhookJob to return if the shop is nil #952
87
+ * Added Rubocop to the Repo #948
88
+ * Added a WebhookVerification test helper #950
89
+ * Fix for deprecation warning while loading session storage at startup
90
+ * Changes that will allow future JWT authentication
91
+
92
+ 13.0.1
93
+ ------
94
+ * fix for deprecation warning while loading session storage at startup
95
+
1
96
  13.0.0
2
97
  ------
3
98
  + #887 Added concurrent user and shop session support (online/offline)
data/Gemfile CHANGED
@@ -1,6 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  source "https://rubygems.org"
2
3
 
3
4
  # Specify your gem's dependencies in shopify_app.gemspec
4
5
  gemspec
5
6
 
6
7
  gem 'rails-controller-testing', group: :test
8
+
9
+ group :rubocop do
10
+ gem 'rubocop-shopify', require: false
11
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,252 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ shopify_app (16.0.0)
5
+ browser_sniffer (~> 1.2.2)
6
+ jwt (~> 2.2.1)
7
+ omniauth-shopify-oauth2 (~> 2.2.2)
8
+ rails (> 5.2.1)
9
+ redirect_safely (~> 1.0)
10
+ shopify_api (~> 9.1)
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ actioncable (6.0.3.3)
16
+ actionpack (= 6.0.3.3)
17
+ nio4r (~> 2.0)
18
+ websocket-driver (>= 0.6.1)
19
+ actionmailbox (6.0.3.3)
20
+ actionpack (= 6.0.3.3)
21
+ activejob (= 6.0.3.3)
22
+ activerecord (= 6.0.3.3)
23
+ activestorage (= 6.0.3.3)
24
+ activesupport (= 6.0.3.3)
25
+ mail (>= 2.7.1)
26
+ actionmailer (6.0.3.3)
27
+ actionpack (= 6.0.3.3)
28
+ actionview (= 6.0.3.3)
29
+ activejob (= 6.0.3.3)
30
+ mail (~> 2.5, >= 2.5.4)
31
+ rails-dom-testing (~> 2.0)
32
+ actionpack (6.0.3.3)
33
+ actionview (= 6.0.3.3)
34
+ activesupport (= 6.0.3.3)
35
+ rack (~> 2.0, >= 2.0.8)
36
+ rack-test (>= 0.6.3)
37
+ rails-dom-testing (~> 2.0)
38
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
39
+ actiontext (6.0.3.3)
40
+ actionpack (= 6.0.3.3)
41
+ activerecord (= 6.0.3.3)
42
+ activestorage (= 6.0.3.3)
43
+ activesupport (= 6.0.3.3)
44
+ nokogiri (>= 1.8.5)
45
+ actionview (6.0.3.3)
46
+ activesupport (= 6.0.3.3)
47
+ builder (~> 3.1)
48
+ erubi (~> 1.4)
49
+ rails-dom-testing (~> 2.0)
50
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
51
+ activejob (6.0.3.3)
52
+ activesupport (= 6.0.3.3)
53
+ globalid (>= 0.3.6)
54
+ activemodel (6.0.3.3)
55
+ activesupport (= 6.0.3.3)
56
+ activemodel-serializers-xml (1.0.2)
57
+ activemodel (> 5.x)
58
+ activesupport (> 5.x)
59
+ builder (~> 3.1)
60
+ activerecord (6.0.3.3)
61
+ activemodel (= 6.0.3.3)
62
+ activesupport (= 6.0.3.3)
63
+ activeresource (5.1.1)
64
+ activemodel (>= 5.0, < 7)
65
+ activemodel-serializers-xml (~> 1.0)
66
+ activesupport (>= 5.0, < 7)
67
+ activestorage (6.0.3.3)
68
+ actionpack (= 6.0.3.3)
69
+ activejob (= 6.0.3.3)
70
+ activerecord (= 6.0.3.3)
71
+ marcel (~> 0.3.1)
72
+ activesupport (6.0.3.3)
73
+ concurrent-ruby (~> 1.0, >= 1.0.2)
74
+ i18n (>= 0.7, < 2)
75
+ minitest (~> 5.1)
76
+ tzinfo (~> 1.1)
77
+ zeitwerk (~> 2.2, >= 2.2.2)
78
+ addressable (2.7.0)
79
+ public_suffix (>= 2.0.2, < 5.0)
80
+ ast (2.4.1)
81
+ binding_of_caller (0.8.0)
82
+ debug_inspector (>= 0.0.1)
83
+ browser_sniffer (1.2.2)
84
+ builder (3.2.4)
85
+ byebug (11.1.3)
86
+ coderay (1.1.3)
87
+ concurrent-ruby (1.1.7)
88
+ crack (0.4.4)
89
+ crass (1.0.6)
90
+ debug_inspector (0.0.3)
91
+ erubi (1.9.0)
92
+ faraday (1.1.0)
93
+ multipart-post (>= 1.2, < 3)
94
+ ruby2_keywords
95
+ globalid (0.4.2)
96
+ activesupport (>= 4.2.0)
97
+ graphql (1.11.6)
98
+ graphql-client (0.16.0)
99
+ activesupport (>= 3.0)
100
+ graphql (~> 1.8)
101
+ hashdiff (1.0.1)
102
+ hashie (4.1.0)
103
+ i18n (1.8.5)
104
+ concurrent-ruby (~> 1.0)
105
+ jwt (2.2.2)
106
+ loofah (2.7.0)
107
+ crass (~> 1.0.2)
108
+ nokogiri (>= 1.5.9)
109
+ mail (2.7.1)
110
+ mini_mime (>= 0.1.1)
111
+ marcel (0.3.3)
112
+ mimemagic (~> 0.3.2)
113
+ method_source (0.9.2)
114
+ mimemagic (0.3.5)
115
+ mini_mime (1.0.2)
116
+ mini_portile2 (2.4.0)
117
+ minitest (5.14.2)
118
+ mocha (1.11.2)
119
+ multi_json (1.15.0)
120
+ multi_xml (0.6.0)
121
+ multipart-post (2.1.1)
122
+ nio4r (2.5.4)
123
+ nokogiri (1.10.10)
124
+ mini_portile2 (~> 2.4.0)
125
+ oauth2 (1.4.4)
126
+ faraday (>= 0.8, < 2.0)
127
+ jwt (>= 1.0, < 3.0)
128
+ multi_json (~> 1.3)
129
+ multi_xml (~> 0.5)
130
+ rack (>= 1.2, < 3)
131
+ omniauth (1.9.1)
132
+ hashie (>= 3.4.6)
133
+ rack (>= 1.6.2, < 3)
134
+ omniauth-oauth2 (1.5.0)
135
+ oauth2 (~> 1.1)
136
+ omniauth (~> 1.2)
137
+ omniauth-shopify-oauth2 (2.2.3)
138
+ activesupport
139
+ omniauth-oauth2 (~> 1.5.0)
140
+ parallel (1.20.1)
141
+ parser (2.7.2.0)
142
+ ast (~> 2.4.1)
143
+ pry (0.12.2)
144
+ coderay (~> 1.1.0)
145
+ method_source (~> 0.9.0)
146
+ pry-nav (0.3.0)
147
+ pry (>= 0.9.10, < 0.13.0)
148
+ pry-stack_explorer (0.4.9.3)
149
+ binding_of_caller (>= 0.7)
150
+ pry (>= 0.9.11)
151
+ public_suffix (4.0.6)
152
+ rack (2.2.3)
153
+ rack-test (1.1.0)
154
+ rack (>= 1.0, < 3)
155
+ rails (6.0.3.3)
156
+ actioncable (= 6.0.3.3)
157
+ actionmailbox (= 6.0.3.3)
158
+ actionmailer (= 6.0.3.3)
159
+ actionpack (= 6.0.3.3)
160
+ actiontext (= 6.0.3.3)
161
+ actionview (= 6.0.3.3)
162
+ activejob (= 6.0.3.3)
163
+ activemodel (= 6.0.3.3)
164
+ activerecord (= 6.0.3.3)
165
+ activestorage (= 6.0.3.3)
166
+ activesupport (= 6.0.3.3)
167
+ bundler (>= 1.3.0)
168
+ railties (= 6.0.3.3)
169
+ sprockets-rails (>= 2.0.0)
170
+ rails-controller-testing (1.0.5)
171
+ actionpack (>= 5.0.1.rc1)
172
+ actionview (>= 5.0.1.rc1)
173
+ activesupport (>= 5.0.1.rc1)
174
+ rails-dom-testing (2.0.3)
175
+ activesupport (>= 4.2.0)
176
+ nokogiri (>= 1.6)
177
+ rails-html-sanitizer (1.3.0)
178
+ loofah (~> 2.3)
179
+ railties (6.0.3.3)
180
+ actionpack (= 6.0.3.3)
181
+ activesupport (= 6.0.3.3)
182
+ method_source
183
+ rake (>= 0.8.7)
184
+ thor (>= 0.20.3, < 2.0)
185
+ rainbow (3.0.0)
186
+ rake (13.0.1)
187
+ rb-readline (0.5.5)
188
+ redirect_safely (1.0.0)
189
+ activemodel
190
+ regexp_parser (2.0.0)
191
+ rexml (3.2.4)
192
+ rubocop (1.5.2)
193
+ parallel (~> 1.10)
194
+ parser (>= 2.7.1.5)
195
+ rainbow (>= 2.2.2, < 4.0)
196
+ regexp_parser (>= 1.8, < 3.0)
197
+ rexml
198
+ rubocop-ast (>= 1.2.0, < 2.0)
199
+ ruby-progressbar (~> 1.7)
200
+ unicode-display_width (>= 1.4.0, < 2.0)
201
+ rubocop-ast (1.3.0)
202
+ parser (>= 2.7.1.5)
203
+ rubocop-shopify (1.0.7)
204
+ rubocop (~> 1.4)
205
+ ruby-progressbar (1.10.1)
206
+ ruby2_keywords (0.0.2)
207
+ shopify_api (9.2.0)
208
+ activeresource (>= 4.1.0, < 6.0.0)
209
+ graphql-client
210
+ rack
211
+ sprockets (4.0.2)
212
+ concurrent-ruby (~> 1.0)
213
+ rack (> 1, < 3)
214
+ sprockets-rails (3.2.2)
215
+ actionpack (>= 4.0)
216
+ activesupport (>= 4.0)
217
+ sprockets (>= 3.0.0)
218
+ sqlite3 (1.4.2)
219
+ thor (1.0.1)
220
+ thread_safe (0.3.6)
221
+ tzinfo (1.2.7)
222
+ thread_safe (~> 0.1)
223
+ unicode-display_width (1.7.0)
224
+ webmock (3.9.1)
225
+ addressable (>= 2.3.6)
226
+ crack (>= 0.3.2)
227
+ hashdiff (>= 0.4.0, < 2.0.0)
228
+ websocket-driver (0.7.3)
229
+ websocket-extensions (>= 0.1.0)
230
+ websocket-extensions (0.1.5)
231
+ zeitwerk (2.4.0)
232
+
233
+ PLATFORMS
234
+ ruby
235
+
236
+ DEPENDENCIES
237
+ byebug
238
+ minitest
239
+ mocha
240
+ pry
241
+ pry-nav
242
+ pry-stack_explorer
243
+ rails-controller-testing
244
+ rake
245
+ rb-readline
246
+ rubocop-shopify
247
+ shopify_app!
248
+ sqlite3 (~> 1.4)
249
+ webmock
250
+
251
+ BUNDLED WITH
252
+ 2.1.4