shopify-gold 2.0.1.pre → 2.0.2.pre

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: a15b83f137cb729f8570f15df2a8f1359d8d2015200f10593fe8ac8bb87813cd
4
- data.tar.gz: 1f6a1e258075ce400beb19aab823640e6064b6029989b919ddbe2d81add805c4
3
+ metadata.gz: a207a2139e8e1ab1be012353b58500a6ab9f0c6799f6158cd131bfe63a0fc7e0
4
+ data.tar.gz: 16a1d206a15a09286a79ded2239807dcc9c16767fb57ba1f75481515ccac9226
5
5
  SHA512:
6
- metadata.gz: 16f2b30e916670995ad0410cef60fe6178c31657eed28ce911bec83e1ed02b65c4e5109f3782615bc5f85c077a5ba3d603cb8882b154d509ad3b3631ba773bac
7
- data.tar.gz: 88c047df0f6a2f0d55aa81a03fdbcf71254a9d3874c2cf89f093e1254457f3c41f2150c28ec11dd493ef14cf077c80731744306d3c8f3568cb7992c2687f8888
6
+ metadata.gz: 8027b833952d50b72ed0a38d24a8c32307b00e911a67fc2edd24657a64532a50eafa343fa92d8ab7b6d2d9ade2abf5d2f6a4786a810e770afa0caad07a45adb5
7
+ data.tar.gz: b2dc4970350aa2c6466f9256bcd98b66916c7d0d1664998ca83d6aeb57e3dee10565cff178413b88d170e6f398d720f8728243dc151f97e3a81d6b750315b814
data/README.md CHANGED
@@ -25,7 +25,7 @@ Gold is comprised of a few pieces:
25
25
  Add this line to your application's Gemfile:
26
26
 
27
27
  ```ruby
28
- gem 'gold'
28
+ gem "shopify-gold", require: "gold"
29
29
  ```
30
30
 
31
31
  And then execute:
@@ -42,16 +42,54 @@ $ bin/rails gold:install:migrations
42
42
  $ bin/rails db:migrate
43
43
  ```
44
44
 
45
- Finally, you will need to mount the engine in your `config/routes.rb` file:
45
+ Mount the engine in your `config/routes.rb` file:
46
46
 
47
47
  ```ruby
48
- mount Gold::Engine, at: "/"
48
+ mount Gold::Engine, at: "/billing"
49
49
  ```
50
50
 
51
51
  Note that by default, the engine's name is `gold_engine`. If you must change this,
52
52
  you'll need to define a new helper method `gold_engine` and reference your custom
53
53
  `as` param.
54
54
 
55
+ Add module to your `Shop` class:
56
+ `include Gold::Concerns::Gilded`
57
+
58
+ Add the following methods to your `Shop` class:
59
+ `#shopify_domain`, which responds with the *.myshopify.com domain of the shop
60
+ `#shopify_plan_name`, which responds to the plan name of the Shopify store (e.g. "unlimited", "affilaite")
61
+ `#qualifies_for_tier?(_tier)`, return a boolean if the shop should qualify to a tier
62
+ `#with_shopify_session`, provided by the Shopify App gem
63
+
64
+ After shop properties have been updated (say, after a shop/update webhook), call:
65
+ `shop.billing.after_shop_update!`. This tells Gold something has changed about the
66
+ shop, which will run any operations (example affiliate -> paid) that might be relevant.
67
+
68
+ Call the AfterAuthenticateJob inline when a user logs in. This can be setup
69
+ either directly in `shopify_app.rb` initializer, or in your own job.
70
+ `Gold::AfterAuthenticateJob.perform_now(shop_domain: shop_domain)`
71
+
72
+ ## Background tasks
73
+ Gold runs background jobs to queue events under the `gold` queue. For example, if
74
+ you're using Sidekiq, run:
75
+ `bundle exec sidekiq -q gold`
76
+
77
+ ## Adding tiers
78
+ To add tiers to your app, add a `config/tiers.yml` file. Here's an example file:
79
+ ```
80
+ - id: basic
81
+ name: "Basic"
82
+ description: "Shops just gettings started with a few number of custom fields."
83
+ features:
84
+ feature_1: Yes
85
+ featured_2: No
86
+ pricing:
87
+ trial_days: 14
88
+ monthly: "10.00"
89
+ qualifications:
90
+ max_customers: 1000
91
+ ```
92
+
55
93
  ## Configuration
56
94
  Add `gold.rb` within the `initializers` folder of your project. Below are Gold's
57
95
  configuration options:
@@ -85,12 +123,6 @@ Gold.configure do |config|
85
123
  # The URL to a plan comparison page for the app
86
124
  config.plan_comparison_url = "https://heliumdev.com/pricing"
87
125
 
88
- # Login credential's to Gold's backend
89
- config.admin_credentials = {
90
- user: "admin",
91
- password: "password123"
92
- }
93
-
94
126
  # The API version used by Shopify (https://help.shopify.com/en/api/versioning)
95
127
  @shopify_api_version = "2019-04"
96
128
 
@@ -125,6 +157,34 @@ Gold.configure do |config|
125
157
  end
126
158
  ```
127
159
 
160
+ ## Admin interface
161
+ Gold can manage billing for each shop through an admin interface. First, you'll
162
+ want to setup some basic HTTP auth credentials in your Gold config initializer.
163
+ ```
164
+ Gold.configure do |config|
165
+ config.admin_credentials = {
166
+ user: "admin",
167
+ password: "password123"
168
+ }
169
+ end
170
+ ```
171
+
172
+ Mount the engine in routes:
173
+ `mount Gold::AdminEngine, at: '/admin', as: 'gold_admin_engine'`
174
+
175
+ You can inject a partial anywhere in your own admin interface to include Gold's
176
+ admin management by providing an instance of `Billing`:
177
+ `render "gold/admin/billing/overview", billing: @shop.billing`
178
+
179
+ ## Migration
180
+ If you have existing charges that you want to migrate to Gold on a specific plan,
181
+ use the `BillingMigrator.new([Shop], [tier_id], [start_at])` class. Example:
182
+ `Gold::BillingMigrator.new(@shop, "basic", 5.days.ago)`
183
+
184
+ The shop will automatically be pushed through the state machine (new, accepted_terms, etc).
185
+ Note that the `tier_id` must match a tier setup in Gold. If that shop does not
186
+ have a charge that matches the tier's price, a new charge will be requested.
187
+
128
188
  ## Contributing
129
189
 
130
190
  Run tests with:
@@ -142,3 +202,7 @@ $ bundle exec rubocop
142
202
  If you want to see a visual representation of `Gold::Machine`, you can run
143
203
  `bin/rails app:gold:diagram`. You will need to have the Graphviz tool installed,
144
204
  which you can do on Mac via Homebrew with `brew install graphviz`
205
+
206
+ ## Release
207
+ To release gem, run `gem release`, which depends on having `gem-release` installed
208
+ on your system.
@@ -14,6 +14,10 @@ module Gold
14
14
  status: :internal_server_error
15
15
  end
16
16
 
17
+ rescue_from Gold::Exceptions::BillingNotFound do
18
+ redirect_to shopify_app.login_path
19
+ end
20
+
17
21
  # Show the terms of service.
18
22
  def terms
19
23
  @already_accepted = !billing.can_transition_to?(:accepted_terms)
@@ -10,6 +10,8 @@ module Gold
10
10
  # Returns the Gold::Billing instance for the currently logged-in merchant.
11
11
  def billing
12
12
  @billing ||= Billing.find_by!(shop_id: session[:shopify])
13
+ rescue ActiveRecord::RecordNotFound
14
+ raise Gold::Exceptions::BillingNotFound
13
15
  end
14
16
 
15
17
  # `before_action` filter that forces a merchant to deal with
File without changes
@@ -3,7 +3,8 @@
3
3
  </p>
4
4
 
5
5
  <p>
6
- We're sorry, but we couldn't respond to your request. Please try again
7
- in a few minutes. If the problem persists, please reach out to our
6
+ We're sorry, but we couldn't respond to your request. Please
7
+ <a href="<%= shopify_app.logout_path %>" class="Polaris-Link">logout</a>
8
+ and try again in a few minutes. If the problem persists, please reach out to our
8
9
  support and we'll get right on it.
9
10
  </p>
@@ -0,0 +1,5 @@
1
+ module Gold
2
+ module Exceptions
3
+ class BillingNotFound < ActiveRecord::RecordNotFound; end
4
+ end
5
+ end
data/lib/gold/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gold
2
- VERSION = "2.0.1.pre".freeze
2
+ VERSION = "2.0.2.pre".freeze
3
3
  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: 2.0.1.pre
4
+ version: 2.0.2.pre
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: 2019-08-06 00:00:00.000000000 Z
12
+ date: 2019-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -152,19 +152,19 @@ dependencies:
152
152
  - !ruby/object:Gem::Version
153
153
  version: '1.2'
154
154
  - !ruby/object:Gem::Dependency
155
- name: gem-release
155
+ name: shopify_app
156
156
  requirement: !ruby/object:Gem::Requirement
157
157
  requirements:
158
- - - "~>"
158
+ - - ">="
159
159
  - !ruby/object:Gem::Version
160
- version: '2.0'
160
+ version: '0'
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: '2.0'
167
+ version: '0'
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: sqlite3
170
170
  requirement: !ruby/object:Gem::Requirement
@@ -258,6 +258,7 @@ files:
258
258
  - app/views/gold/billing/_inner_head.html.erb
259
259
  - app/views/gold/billing/declined_charge.html.erb
260
260
  - app/views/gold/billing/expired_charge.html.erb
261
+ - app/views/gold/billing/login_error.html.erb
261
262
  - app/views/gold/billing/missing_charge.html.erb
262
263
  - app/views/gold/billing/outstanding_charge.html.erb
263
264
  - app/views/gold/billing/suspended.html.erb
@@ -282,6 +283,7 @@ files:
282
283
  - lib/gold/coverage.rb
283
284
  - lib/gold/diagram.rb
284
285
  - lib/gold/engine.rb
286
+ - lib/gold/exceptions/billing_not_found.rb
285
287
  - lib/gold/exceptions/metadata_missing.rb
286
288
  - lib/gold/outcomes.rb
287
289
  - lib/gold/retries.rb