shopify-gold 4.2.0 → 5.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad7514ffdfb66670043eac39bffbd3f1db861f45c6befd38bb92e570bcd4fd95
4
- data.tar.gz: f03dc8cad6c26749cd70d8357e2019695102d944ddfb4300ce33e55937c5d224
3
+ metadata.gz: d15786e3bd37ff9291bf4f000c3f580373a56dcf5bd8662df743ec4a30ec5c36
4
+ data.tar.gz: 9f838172385fffd62d0397c92db4acb8a8bda60c7aac144bfdaf90883d6ba452
5
5
  SHA512:
6
- metadata.gz: bddd6866e01bc82889115697f3cd3eb5cedf472942640e7c13ed3cc9678feac878179fbd20f027854de47d471dfa65bd548fd8fbb9d489cbede3bb63c81b77f4
7
- data.tar.gz: 3db49c76d9554f994852112ce046040b8a7c2ee09b43c5588d75209b5361ac029e7372cb8db431c59f6fab4e5b9dde49d4449fb51dd0798c7fcecf2297361b3b
6
+ metadata.gz: 9eb7a98aab47e7948e56b3522586ca3023bbf19e9fd3df2c7cac5036bf8986b8abfc963ec9173056999aef245a0879d0cdc7f0f5dc0b62c5145131f97571c556
7
+ data.tar.gz: 3c642760a522e4e1c8cac183f6eb2b7f5e36d8bb2d885bb34de7faf83cd0c237ee6d93d6771328efe742a5619cb44178912529a4b9287fd72d383be442f896b7
@@ -1,4 +1,4 @@
1
- require_dependency "gold/application_controller"
1
+ require "gold/application_controller"
2
2
 
3
3
  module Gold
4
4
  # Inherit from Shopify's authenticated module
@@ -7,7 +7,7 @@ module Gold
7
7
  layout "gold/billing"
8
8
 
9
9
  rescue_from Statesman::TransitionFailedError do |e|
10
- billing = Billing.find_by!(shop_id: session[:shopify])
10
+ billing = Billing.find_by!(shop_id: session[:shop_id])
11
11
  Gold.logger.error("Shop '#{billing.shop.shopify_domain}' failed to " \
12
12
  "transtion '#{e}'")
13
13
  render "gold/billing/transition_error", layout: "gold/billing",
@@ -57,7 +57,7 @@ module Gold
57
57
  case outcome
58
58
  when SameTier, TierApplied
59
59
  cookies.delete(:gold_tier_id)
60
- redirect_to main_app.root_url
60
+ redirect_to Gold.configuration.after_tier_redirect_path
61
61
  when CannotSelectTier
62
62
  flash.now[:error] = "Your shop is not eligible for this plan"
63
63
  render :tier
@@ -98,7 +98,7 @@ module Gold
98
98
  Gold.logger.info("[#{billing.id}] Charge is ready")
99
99
  end
100
100
 
101
- redirect_to main_app.root_url
101
+ redirect_to Gold.configuration.after_tier_redirect_path
102
102
  else
103
103
  raise "Not sure how to handle #{outcome} on outstanding charge"
104
104
  end
@@ -112,7 +112,7 @@ module Gold
112
112
  case outcome
113
113
  when ActiveCharge
114
114
  ApplyTierOp.new(billing).call
115
- outer_redirect_to_main
115
+ outer_redirect(Gold.configuration.after_tier_redirect_path)
116
116
  when DeclinedCharge
117
117
  redirect_to declined_charge_url
118
118
  when ExpiredCharge
@@ -165,14 +165,14 @@ module Gold
165
165
 
166
166
  # If embedded app, redirect directly through the Shopify admin. This can provide
167
167
  # a better experience than the page rendering and JS kicking off a redirect
168
- def outer_redirect_to_main
168
+ def outer_redirect(redirect_path)
169
169
  if ShopifyApp.configuration.embedded_app
170
170
  shopify_domain = billing.shop.shopify_domain
171
171
  api_key = ShopifyApp.configuration.api_key
172
- fullpath = "/admin/apps/#{api_key}#{main_app.root_path}"
172
+ fullpath = "/admin/apps/#{api_key}#{redirect_path}"
173
173
  redirect_to URI::HTTPS.build(host: shopify_domain, path: fullpath).to_s
174
174
  else
175
- redirect_to main_app.root_url
175
+ redirect_to redirect_path
176
176
  end
177
177
  end
178
178
 
@@ -9,7 +9,7 @@ module Gold
9
9
 
10
10
  # Returns the Gold::Billing instance for the currently logged-in merchant.
11
11
  def billing
12
- @billing ||= Billing.find_by!(shop_id: session[:shopify])
12
+ @billing ||= Billing.find_by!(shop_id: session[:shop_id])
13
13
  rescue ActiveRecord::RecordNotFound
14
14
  raise Gold::Exceptions::BillingNotFound
15
15
  end
@@ -1,4 +1,4 @@
1
- require_dependency "statesman"
1
+ require "statesman"
2
2
 
3
3
  module Gold
4
4
  module Concerns
@@ -1,4 +1,4 @@
1
- require_dependency "statesman"
1
+ require "statesman"
2
2
 
3
3
  module Gold
4
4
  # This is the finite state machine specification that governs how shops may
@@ -230,7 +230,8 @@ module Gold
230
230
  apply_free_tier
231
231
  change_tier
232
232
  staff
233
- optional_charge]
233
+ optional_charge
234
+ marked_as_uninstalled]
234
235
 
235
236
  before_transition to: :optional_charge, &require_metadata(:charge_id)
236
237
  guard_transition to: :optional_charge, &ensure_plan_is(:paying?)
@@ -238,7 +239,8 @@ module Gold
238
239
  optional_charge_accepted
239
240
  optional_charge_declined
240
241
  marked_as_uninstalled]
241
- transition from: :optional_charge_declined, to: :billing
242
+ transition from: :optional_charge_declined, to: %i[billing
243
+ marked_as_uninstalled]
242
244
 
243
245
  transition from: :optional_charge_accepted, to: %i[charge_activated
244
246
  marked_as_uninstalled]
@@ -256,13 +258,17 @@ module Gold
256
258
  marked_as_uninstalled]
257
259
 
258
260
  transition from: :delayed_charge_expired, to: %i[delayed_charge
259
- marked_as_delinquent]
261
+ marked_as_delinquent
262
+ marked_as_uninstalled]
260
263
  transition from: :delayed_charge_declined, to: %i[marked_as_delinquent
261
- delayed_charge]
264
+ delayed_charge
265
+ marked_as_uninstalled]
262
266
 
263
267
  guard_transition to: :marked_as_delinquent,
264
268
  &ensure_min_days_in_state(Gold.configuration.days_until_delinquent)
265
- transition from: :marked_as_delinquent, to: :delinquent
269
+ transition from: :marked_as_delinquent, to: %i[delinquent
270
+ marked_as_uninstalled]
271
+
266
272
  transition from: :delinquent, to: %i[marked_as_uninstalled delayed_charge cleanup]
267
273
 
268
274
  guard_transition to: :affiliate, &ensure_plan_is(:affiliate?)
@@ -20,14 +20,16 @@ module Gold
20
20
 
21
21
  # Returns true if this is a development (non-live) shop.
22
22
  def affiliate?
23
- plan == "affiliate"
23
+ plans = %w[affiliate partner_test]
24
+ plans.include?(plan)
24
25
  end
25
26
 
26
27
  # Returns true if this is a shop owned by Shopify staff. This specifically
27
28
  # excludes Shopify Business shops, as we believe those are paid stores that
28
29
  # Shopify employees use for their own businesses.
29
30
  def staff?
30
- plan == "staff"
31
+ plans = %w[plus_partner_sandbox staff]
32
+ plans.include?(plan)
31
33
  end
32
34
 
33
35
  # Returns true if this shop has been frozen by Shopify for non-payment.
@@ -79,11 +79,11 @@ module Gold
79
79
  end
80
80
 
81
81
  def qualifications
82
- parent ? parent.qualifications : @qualifications
82
+ parent ? parent.qualifications.merge(@qualifications) : @qualifications
83
83
  end
84
84
 
85
85
  def features
86
- parent ? parent.features : @features
86
+ parent ? parent.features.merge(@features) : @features
87
87
  end
88
88
 
89
89
  def parent
@@ -13,7 +13,8 @@ module Gold
13
13
  :days_until_cleanup,
14
14
  :shop_domain_attribute,
15
15
  :force_embedded_redirect,
16
- :app_listing_url
16
+ :app_listing_url,
17
+ :after_tier_redirect_path
17
18
 
18
19
  # Callbacks
19
20
  attr_accessor :on_terms,
@@ -72,6 +73,10 @@ module Gold
72
73
  # The URL to follow after a referral code is tracked
73
74
  # (e.g. https://apps.shopify.com/customr)
74
75
  @app_listing_url = "https://apps.shopify.com/"
76
+
77
+ # The redirect path after a tier is applied. Use this path to welcome a
78
+ # merchant if they just installed
79
+ @after_tier_redirect_path = "/"
75
80
  end
76
81
 
77
82
  def shop_class
@@ -1,3 +1,3 @@
1
1
  module Gold
2
- VERSION = "4.2.0".freeze
2
+ VERSION = "5.2.1".freeze
3
3
  end
@@ -66,6 +66,9 @@ namespace :gold do
66
66
  Gold::UninstallOp.new(billing).call
67
67
  rescue ActiveResource::ClientError => e
68
68
  puts "Error for '#{billing.shop.shopify_domain}', #{e}"
69
+ rescue Statesman::GuardFailedError,
70
+ Statesman::TransitionFailedError => e
71
+ puts "Cannot transition: #{e.message}"
69
72
  end
70
73
  end
71
74
  end
@@ -90,8 +93,17 @@ namespace :gold do
90
93
  end
91
94
 
92
95
  billing.shop.with_shopify_session do
93
- Gold::MarkAsDelinquentOp.new(billing).call
94
- puts "Shop '#{billing.shop.shopify_domain}' is delinquent"
96
+ domain = billing.shop.shopify_domain
97
+
98
+ begin
99
+ Gold::MarkAsDelinquentOp.new(billing).call
100
+ puts "Shop '#{domain}' is delinquent"
101
+ rescue ActiveResource::UnauthorizedAccess
102
+ puts "It looks like '#{domain}' uninstalled, running op..."
103
+ Gold::UninstallOp.new(billing).call
104
+ rescue ActiveResource::ClientError => e
105
+ puts "Error for '#{domain}', #{e}"
106
+ end
95
107
  end
96
108
  end
97
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shopify-gold
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 5.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Smith
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-04-07 00:00:00.000000000 Z
12
+ date: 2020-07-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -17,42 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 5.2.0
20
+ version: '6'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 5.2.0
27
+ version: '6'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: sass-rails
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - "~>"
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '5.0'
34
+ version: '0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - "~>"
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '5.0'
41
+ version: '0'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: shopify_app
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '11'
48
+ version: '13'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '11'
55
+ version: '13'
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: statesman
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -73,14 +73,14 @@ dependencies:
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '2.5'
76
+ version: '2.7'
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: '2.5'
83
+ version: '2.7'
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: faker
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -113,16 +113,16 @@ dependencies:
113
113
  name: rubocop
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - "~>"
116
+ - - ">="
117
117
  - !ruby/object:Gem::Version
118
- version: 0.74.0
118
+ version: '0.74'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - "~>"
123
+ - - ">="
124
124
  - !ruby/object:Gem::Version
125
- version: 0.74.0
125
+ version: '0.74'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: rubocop-rails
128
128
  requirement: !ruby/object:Gem::Requirement
@@ -157,14 +157,14 @@ dependencies:
157
157
  requirements:
158
158
  - - "~>"
159
159
  - !ruby/object:Gem::Version
160
- version: 11.3.0
160
+ version: '13'
161
161
  type: :development
162
162
  prerelease: false
163
163
  version_requirements: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - "~>"
166
166
  - !ruby/object:Gem::Version
167
- version: 11.3.0
167
+ version: '13'
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: sqlite3
170
170
  requirement: !ruby/object:Gem::Requirement
@@ -185,14 +185,14 @@ dependencies:
185
185
  requirements:
186
186
  - - "~>"
187
187
  - !ruby/object:Gem::Version
188
- version: 3.4.2
188
+ version: '3'
189
189
  type: :development
190
190
  prerelease: false
191
191
  version_requirements: !ruby/object:Gem::Requirement
192
192
  requirements:
193
193
  - - "~>"
194
194
  - !ruby/object:Gem::Version
195
- version: 3.4.2
195
+ version: '3'
196
196
  description: |
197
197
  Gold is Helium's approach to billing for Shopify apps. It provides a
198
198
  framework to build Rails apps upon.
@@ -317,7 +317,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
317
317
  - !ruby/object:Gem::Version
318
318
  version: '0'
319
319
  requirements: []
320
- rubygems_version: 3.1.2
320
+ rubygems_version: 3.0.3
321
321
  signing_key:
322
322
  specification_version: 4
323
323
  summary: Helium's approach to billing for Shopify apps