disco_app 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1755c833438d9a42cdbc39e3016a20bb83f3110e472282daf58cc9c5fe56f86d
4
- data.tar.gz: b2f041535874d1e8ecd4996d8ead0ebab4d6b6e5ac86e3087263fede8fec71c3
3
+ metadata.gz: a29063430cb2904c29bf74567496355a5f70d5e4e5d942d8f9ad8341ee99f935
4
+ data.tar.gz: c1ad2a5cf842f792213ef025f948057132bfdede2c78945d965edc925ad3f62f
5
5
  SHA512:
6
- metadata.gz: 348c5d1933877e55d664eb17afcf73ff3121c705447afe78ce1460ac0a35709a506538c9020dc6d6c644ddb2a7a4a3d1af77178905c869f06acf7e6cd0d6cda4
7
- data.tar.gz: 62b3d647d57a6f5ab9860e23940f052251c953de3ea86a9f1f43e4776aad5834fda7cc90f1a90f917f1e37634b5b1c79d3310e49f45cbc99146eef777ec7eb65
6
+ metadata.gz: 6dd9ac41a62be53b26c1ab0d7aa30d0078a1adbc0ae7cb5342567bca85764da13eba2b6a3cb5dbcfc4867dd8ea7e433811eaa9131549d85a43b2d75fe7a09a89
7
+ data.tar.gz: 2c06d93aaae37aa4d52b39ae35727e0ebf1bfd9c86f252bbd9bb910e61088c74aaba02037675b8da29beb50b4a8f485ba8f54ac9f0a508c88cb1b2cc05fcb8bc
@@ -1,41 +1,3 @@
1
- module DiscoApp
2
- class AppInstalledJob < DiscoApp::ShopJob
3
-
4
- before_enqueue { @shop.awaiting_install! }
5
- before_perform { @shop.installing! }
6
- after_perform { @shop.installed! }
7
-
8
- def perform(domain)
9
-
10
- # Install webhooks.
11
- (base_webhook_topics + webhook_topics).each do |topic|
12
- ShopifyAPI::Webhook.create(topic: topic, address: webhooks_url, format: 'json')
13
- end
14
-
15
- # Perform initial update of shop information.
16
- DiscoApp::ShopUpdateJob.perform_now(domain)
17
-
18
- end
19
-
20
- protected
21
-
22
- # Return a list of additional webhook topics to listen for.
23
- # This method should be overridden in the application.
24
- def webhook_topics
25
- []
26
- end
27
-
28
- private
29
-
30
- # Return a list of webhook topics that will always be set up for the application.
31
- def base_webhook_topics
32
- [:'app/uninstalled', :'shop/update']
33
- end
34
-
35
- # Return the absolute URL to the webhooks endpoint.
36
- def webhooks_url
37
- DiscoApp::Engine.routes.url_helpers.webhooks_url
38
- end
39
-
40
- end
1
+ class DiscoApp::AppInstalledJob < DiscoApp::ShopJob
2
+ include DiscoApp::Concerns::AppInstalledJob
41
3
  end
@@ -0,0 +1,46 @@
1
+ module DiscoApp::Concerns::AppInstalledJob
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ before_enqueue { @shop.awaiting_install! }
6
+ before_perform { @shop.installing! }
7
+ after_perform { @shop.installed! }
8
+ end
9
+
10
+ # Perform application installation.
11
+ #
12
+ # - Install webhooks, using a list generated from the base_webhook_topics and
13
+ # webhook_topics methods.
14
+ # - Perform initial update of shop information.
15
+ #
16
+ def perform(domain)
17
+ (base_webhook_topics + webhook_topics).each do |topic|
18
+ ShopifyAPI::Webhook.create(topic: topic, address: webhooks_url, format: 'json')
19
+ end
20
+
21
+ DiscoApp::ShopUpdateJob.perform_now(domain)
22
+ end
23
+
24
+ protected
25
+
26
+ # Return a list of additional webhook topics to listen for. This method
27
+ # can be overridden in the application to provide a list of app-specific
28
+ # webhooks that should be created during installation.
29
+ def webhook_topics
30
+ []
31
+ end
32
+
33
+ private
34
+
35
+ # Return a list of webhook topics that will always be set up for the
36
+ # # application.
37
+ def base_webhook_topics
38
+ [:'app/uninstalled', :'shop/update']
39
+ end
40
+
41
+ # Return the absolute URL to the webhooks endpoint.
42
+ def webhooks_url
43
+ DiscoApp::Engine.routes.url_helpers.webhooks_url
44
+ end
45
+
46
+ end
@@ -2,15 +2,16 @@ module DiscoApp::Concerns::AppUninstalledJob
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  included do
5
-
6
5
  before_enqueue { @shop.awaiting_uninstall! }
7
6
  before_perform { @shop.uninstalling! }
8
7
  after_perform { @shop.uninstalled! }
9
-
10
8
  end
11
9
 
10
+ # Perform application uninstallation.
11
+ #
12
+ # - Mark charge status as "cancelled" unless charges have been waived.
13
+ #
12
14
  def perform(domain, shop_data)
13
- # Mark the shop's charge status as "cancelled" unless charges have been waived.
14
15
  unless @shop.charge_waived?
15
16
  @shop.charge_cancelled!
16
17
  end
@@ -0,0 +1,16 @@
1
+ module DiscoApp::Concerns::ShopUpdateJob
2
+ extend ActiveSupport::Concern
3
+
4
+ # Perform an update of the current shop's information.
5
+ def perform(shopify_domain, shop_data = nil)
6
+ # If we weren't provided with shop data (eg from a webhook), fetch it.
7
+ shop_data ||= ActiveSupport::JSON::decode(ShopifyAPI::Shop.current.to_json)
8
+
9
+ # Ensure we can access shop data through symbols.
10
+ shop_data = HashWithIndifferentAccess.new(shop_data)
11
+
12
+ # Update model attributes present in both our model and the data hash.
13
+ @shop.update_attributes(shop_data.except(:id, :created_at).slice(*DiscoApp::Shop.column_names))
14
+ end
15
+
16
+ end
@@ -1,29 +1,27 @@
1
- # The base class for all jobs that should be performed in the context of a particular Shop's API session. The first
2
- # argument to any job inheriting from this class must be the domain of the relevant store, so that the appropriate
1
+ # The base class for all jobs that should be performed in the context of a
2
+ # particular Shop's API session. The first argument to any job inheriting from
3
+ # this class must be the domain of the relevant store, so that the appropriate
3
4
  # Shop model can be fetched and the temporary API session created.
5
+ class DiscoApp::ShopJob < ActiveJob::Base
4
6
 
5
- module DiscoApp
6
- class ShopJob < ActiveJob::Base
7
+ queue_as :default
7
8
 
8
- queue_as :default
9
+ before_perform { |job| find_shop(job) }
10
+ before_enqueue { |job| find_shop(job) }
9
11
 
10
- before_perform { |job| find_shop(job) }
11
- before_enqueue { |job| find_shop(job) }
12
+ around_enqueue { |job, block| shop_context(job, block) }
13
+ around_perform { |job, block| shop_context(job, block) }
12
14
 
13
- around_enqueue { |job, block| shop_context(job, block) }
14
- around_perform { |job, block| shop_context(job, block) }
15
+ private
15
16
 
16
- private
17
+ def find_shop(job)
18
+ @shop ||= DiscoApp::Shop.find_by!(shopify_domain: job.arguments.first)
19
+ end
17
20
 
18
- def find_shop(job)
19
- @shop ||= Shop.find_by!(shopify_domain: job.arguments.first)
20
- end
21
+ def shop_context(job, block)
22
+ @shop.temp {
23
+ block.call(job.arguments)
24
+ }
25
+ end
21
26
 
22
- def shop_context(job, block)
23
- @shop.temp {
24
- block.call(job.arguments)
25
- }
26
- end
27
-
28
- end
29
27
  end
@@ -1,16 +1,3 @@
1
- module DiscoApp
2
- class ShopUpdateJob < DiscoApp::ShopJob
3
-
4
- def perform(domain, shop_data = nil)
5
- # If we weren't provided with shop data (eg from a webhook), fetch it.
6
- shop_data ||= ActiveSupport::JSON::decode(ShopifyAPI::Shop.current.to_json)
7
-
8
- # Ensure we can access shop data through symbols.
9
- shop_data = HashWithIndifferentAccess.new(shop_data)
10
-
11
- # Update model attributes present in both our model and the data hash.
12
- @shop.update_attributes(shop_data.except(:id, :created_at).slice(*DiscoApp::Shop.column_names))
13
- end
14
-
15
- end
1
+ class DiscoApp::ShopUpdateJob < DiscoApp::ShopJob
2
+ include DiscoApp::Concerns::ShopUpdateJob
16
3
  end
@@ -1,3 +1,3 @@
1
1
  module DiscoApp
2
- VERSION = "0.6.0"
2
+ VERSION = "0.6.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: disco_app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Ballard
@@ -262,7 +262,9 @@ files:
262
262
  - app/helpers/disco_app/application_helper.rb
263
263
  - app/jobs/disco_app/app_installed_job.rb
264
264
  - app/jobs/disco_app/app_uninstalled_job.rb
265
+ - app/jobs/disco_app/concerns/app_installed_job.rb
265
266
  - app/jobs/disco_app/concerns/app_uninstalled_job.rb
267
+ - app/jobs/disco_app/concerns/shop_update_job.rb
266
268
  - app/jobs/disco_app/shop_job.rb
267
269
  - app/jobs/disco_app/shop_update_job.rb
268
270
  - app/models/disco_app/concerns/plan.rb