disco_app 0.10.4 → 0.10.5

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: 67c1382ade46bd8b42313b42c9909b4be0fe58413a16ffe7a648a790ef586013
4
- data.tar.gz: b22447a345d05be4698c2853e3cbe9495a45e8562802ca173a8cbe657953675f
3
+ metadata.gz: d2699aebc167db360768aa4fa911174c22af550d15d9d3193d7748ce6a4dddf3
4
+ data.tar.gz: d11b08a1f24ffb3a64d306f03dd84132297c20ea9c51ba86c73f5f5450b4fa33
5
5
  SHA512:
6
- metadata.gz: c06b73bcd5bef5ef52e56958ecaaabf57c94c58019eda073410d7626da493e4c782880ce8cc87b1ded926a34faf25e053949af8298809d69de9f33aad2acc81e
7
- data.tar.gz: 80349c2dceb7d75b80034b017606503f041838658a080c8884b88256996b14364daebe948e8e06da7c4e333ed4ecf744c2f09b267291d8dc44a7695588567081
6
+ metadata.gz: 79865fb4cb2da60159930b27830937634e40f10749866fafc27a5fd47af56fcb4343a199d93416df7edd398441b860e0531831a14d167078b8468729ad10e382
7
+ data.tar.gz: 9edcce2afda59c4a59d850d9018b84ac645941dc1d330bc1ff1075b22c7c0324d9fdd249ae4b7ea9452b959d3f8c1cfb36d3b311c5f63e6b196e7395c395d24c
@@ -73,6 +73,12 @@ module DiscoApp::Concerns::Shop
73
73
  end
74
74
  end
75
75
 
76
+ # Return the shop's configured locale as a symbol. If none exists for some
77
+ # reason, 'en' is returned.
78
+ def locale
79
+ (data['primary_locale'] || 'en').to_sym
80
+ end
81
+
76
82
  end
77
83
 
78
84
  end
@@ -10,13 +10,17 @@ module DiscoApp::Concerns::Synchronises
10
10
  true
11
11
  end
12
12
 
13
+ def synchronise_by(shop, data)
14
+ { id: data[:id] }
15
+ end
16
+
13
17
  def synchronise(shop, data)
14
18
  data = data.with_indifferent_access
15
19
 
16
20
  return unless should_synchronise?(shop, data)
17
21
 
18
22
  begin
19
- instance = self.find_or_create_by!(id: data[:id]) do |instance|
23
+ instance = self.find_or_create_by!(self.synchronise_by(shop, data)) do |instance|
20
24
  instance.shop = shop
21
25
  instance.data = data
22
26
  end
@@ -2,6 +2,21 @@
2
2
  <meta http-equiv="refresh" content="5">
3
3
  <% end %>
4
4
 
5
- <p>
6
- Installing, please wait...
7
- </p>
5
+ <div class="ui-empty-state">
6
+ <section class="ui-empty-state__section">
7
+ <div class="ui-empty-state__subsection">
8
+ <h1 class="ui-empty-state__title">Installing <%= DiscoApp.configuration.app_name %></h1>
9
+ <h2 class="ui-empty-state__subtitle">Please wait...</h2>
10
+ </div>
11
+ </section>
12
+ </div>
13
+
14
+ <div class="ui-footer-help">
15
+ <div class="ui-footer-help__content">
16
+ <div>
17
+ <p>
18
+ Stuck on this page? <a href="mailto:help@discolabs.com?subject=<%= DiscoApp.configuration.app_name %> not installing for <%= @shop.shopify_domain %>!">Email us</a>.
19
+ </p>
20
+ </div>
21
+ </div>
22
+ </div>
@@ -1,3 +1,3 @@
1
1
  module DiscoApp
2
- VERSION = '0.10.4'
2
+ VERSION = '0.10.5'
3
3
  end
@@ -0,0 +1,7 @@
1
+ class CartsUpdateJob < DiscoApp::ShopJob
2
+
3
+ def perform(shop, cart_data)
4
+ Cart.synchronise(@shop, cart_data)
5
+ end
6
+
7
+ end
@@ -0,0 +1,24 @@
1
+ class Cart < ActiveRecord::Base
2
+ include DiscoApp::Concerns::Synchronises
3
+
4
+ belongs_to :shop, class_name: 'DiscoApp::Shop'
5
+
6
+ SHOPIFY_API_CLASS = ShopifyAPI::Cart
7
+
8
+ before_save :set_token
9
+
10
+ def self.synchronise_by(shop, data)
11
+ { token: data['token'] }
12
+ end
13
+
14
+ def total_price
15
+ data['line_items'].map { |line_item| line_item['line_price'].to_f }.sum
16
+ end
17
+
18
+ private
19
+
20
+ def set_token
21
+ self.token = data['token']
22
+ end
23
+
24
+ end
@@ -6,7 +6,7 @@ DiscoApp.configure do |config|
6
6
 
7
7
  # Set a list of webhook topics to listen for.
8
8
  # See https://help.shopify.com/api/reference/webhook.
9
- config.webhook_topics = [:'orders/create', :'orders/paid']
9
+ config.webhook_topics = [:'orders/create', :'orders/paid', :'carts/create', :'carts/update']
10
10
 
11
11
  # Set the below if using an application proxy.
12
12
  config.app_proxy_prefix = ENV['SHOPIFY_APP_PROXY_PREFIX']
@@ -0,0 +1,13 @@
1
+ class CreateCarts < ActiveRecord::Migration
2
+ def change
3
+ create_table :carts do |t|
4
+ t.integer :shop_id, limit: 8
5
+ t.string :token
6
+ t.jsonb :data
7
+
8
+ t.timestamps null: false
9
+ end
10
+ add_foreign_key :carts, :disco_app_shops, column: :shop_id
11
+ add_index :carts, :token, unique: true
12
+ end
13
+ end
@@ -11,11 +11,21 @@
11
11
  #
12
12
  # It's strongly recommended that you check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(version: 20160530160739) do
14
+ ActiveRecord::Schema.define(version: 20161105054746) do
15
15
 
16
16
  # These are extensions that must be enabled in order to support this database
17
17
  enable_extension "plpgsql"
18
18
 
19
+ create_table "carts", force: :cascade do |t|
20
+ t.integer "shop_id", limit: 8
21
+ t.string "token"
22
+ t.jsonb "data"
23
+ t.datetime "created_at", null: false
24
+ t.datetime "updated_at", null: false
25
+ end
26
+
27
+ add_index "carts", ["token"], name: "index_carts_on_token", unique: true, using: :btree
28
+
19
29
  create_table "disco_app_app_settings", force: :cascade do |t|
20
30
  t.datetime "created_at", null: false
21
31
  t.datetime "updated_at", null: false
@@ -128,6 +138,7 @@ ActiveRecord::Schema.define(version: 20160530160739) do
128
138
  t.string "background_color", default: "#FFFFFF"
129
139
  end
130
140
 
141
+ add_foreign_key "carts", "disco_app_shops", column: "shop_id"
131
142
  add_foreign_key "disco_app_application_charges", "disco_app_shops", column: "shop_id"
132
143
  add_foreign_key "disco_app_application_charges", "disco_app_subscriptions", column: "subscription_id"
133
144
  add_foreign_key "disco_app_plan_codes", "disco_app_plans", column: "plan_id"
@@ -0,0 +1,5 @@
1
+ cart:
2
+ id: 632910393
3
+ shop: widget_store
4
+ token: efa1e7d02cfc60cf3ddadbed770ef1b6
5
+ data: {}
@@ -7,4 +7,4 @@ widget_store_dev:
7
7
  shopify_domain: widgets-dev.myshopify.com
8
8
  shopify_token: 00000000000000000000000000000000
9
9
  status: 3
10
- data: '{ "country_name": "Australia" }'
10
+ data: '{ "country_name": "Sweden", "primary_locale": "sv" }'
@@ -0,0 +1,28 @@
1
+ {
2
+ "created_at": "2016-11-05T04:34:40.353Z",
3
+ "updated_at": "2016-11-05T05:36:58.908Z",
4
+ "id": "efa1e7d02cfc60cf3ddadbed770ef1b6",
5
+ "token": "efa1e7d02cfc60cf3ddadbed770ef1b6",
6
+ "line_items": [
7
+ {
8
+ "id": 27132991496,
9
+ "properties": null,
10
+ "quantity": 2,
11
+ "variant_id": 27132991496,
12
+ "key": "27132991496:bf1f8c0342f4b55df844abfcc8536c49",
13
+ "title": "Douglas - Black/White - XS",
14
+ "price": "1600.00",
15
+ "original_price": "1600.00",
16
+ "discounted_price": "1600.00",
17
+ "line_price": "3200.00",
18
+ "original_line_price": "3200.00",
19
+ "total_discount": "0.00",
20
+ "discounts": [],
21
+ "sku": "300 60 041-XS",
22
+ "grams": 0,
23
+ "vendor": "Uniforms for the Dedicated",
24
+ "product_id": 8194697800,
25
+ "gift_card": false
26
+ }
27
+ ]
28
+ }
@@ -32,11 +32,18 @@ class SynchronisesTest < ActionDispatch::IntegrationTest
32
32
  assert_equal 'IPod Nano - 8GB', @product.data['title']
33
33
  end
34
34
 
35
- test 'existing product is deleted when product deleted webhook is receieved' do
35
+ test 'existing product is deleted when product deleted webhook is received' do
36
36
  post_webhook('product_deleted', :'products/delete')
37
37
  assert_equal 0, Product.count
38
38
  end
39
39
 
40
+ test 'cart with token for id is updated when cart updated webhook is received' do
41
+ post_webhook('cart_updated', :'carts/update')
42
+
43
+ # Assert the cart data was correctly updated
44
+ assert_equal 3200.0, carts(:cart).total_price
45
+ end
46
+
40
47
  private
41
48
 
42
49
  def webhooks_url
@@ -32,4 +32,12 @@ class DiscoApp::ShopTest < ActiveSupport::TestCase
32
32
  assert_equal 'UTC', disco_app_shops(:widget_store_dev).time_zone.name
33
33
  end
34
34
 
35
+ test 'locale helper returns correct locale when defined on shop model' do
36
+ assert_equal :sv, disco_app_shops(:widget_store_dev).locale
37
+ end
38
+
39
+ test 'locale helper returns correct en locale when no known locale defined' do
40
+ assert_equal :en, disco_app_shops(:widget_store).locale
41
+ end
42
+
35
43
  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.10.4
4
+ version: 0.10.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gavin Ballard
@@ -582,11 +582,13 @@ files:
582
582
  - test/dummy/app/controllers/home_controller.rb
583
583
  - test/dummy/app/controllers/proxy_controller.rb
584
584
  - test/dummy/app/helpers/application_helper.rb
585
+ - test/dummy/app/jobs/carts_update_job.rb
585
586
  - test/dummy/app/jobs/disco_app/app_installed_job.rb
586
587
  - test/dummy/app/jobs/disco_app/app_uninstalled_job.rb
587
588
  - test/dummy/app/jobs/products_create_job.rb
588
589
  - test/dummy/app/jobs/products_delete_job.rb
589
590
  - test/dummy/app/jobs/products_update_job.rb
591
+ - test/dummy/app/models/cart.rb
590
592
  - test/dummy/app/models/disco_app/shop.rb
591
593
  - test/dummy/app/models/js_configuration.rb
592
594
  - test/dummy/app/models/product.rb
@@ -628,6 +630,7 @@ files:
628
630
  - test/dummy/config/secrets.yml
629
631
  - test/dummy/db/migrate/20160307182229_create_products.rb
630
632
  - test/dummy/db/migrate/20160530160739_create_asset_models.rb
633
+ - test/dummy/db/migrate/20161105054746_create_carts.rb
631
634
  - test/dummy/db/schema.rb
632
635
  - test/dummy/public/404.html
633
636
  - test/dummy/public/422.html
@@ -677,6 +680,7 @@ files:
677
680
  - test/fixtures/api/widget_store/webhooks.json
678
681
  - test/fixtures/assets/test.js
679
682
  - test/fixtures/assets/test.min.js
683
+ - test/fixtures/carts.yml
680
684
  - test/fixtures/disco_app/application_charges.yml
681
685
  - test/fixtures/disco_app/plan_codes.yml
682
686
  - test/fixtures/disco_app/plans.yml
@@ -687,6 +691,7 @@ files:
687
691
  - test/fixtures/liquid/model.liquid
688
692
  - test/fixtures/products.yml
689
693
  - test/fixtures/webhooks/app_uninstalled.json
694
+ - test/fixtures/webhooks/cart_updated.json
690
695
  - test/fixtures/webhooks/product_created.json
691
696
  - test/fixtures/webhooks/product_deleted.json
692
697
  - test/fixtures/webhooks/product_updated.json
@@ -750,6 +755,7 @@ test_files:
750
755
  - test/dummy/app/jobs/disco_app/app_installed_job.rb
751
756
  - test/dummy/app/jobs/disco_app/app_uninstalled_job.rb
752
757
  - test/dummy/app/jobs/products_delete_job.rb
758
+ - test/dummy/app/jobs/carts_update_job.rb
753
759
  - test/dummy/app/controllers/home_controller.rb
754
760
  - test/dummy/app/controllers/disco_app/admin/shops_controller.rb
755
761
  - test/dummy/app/controllers/carrier_request_controller.rb
@@ -760,12 +766,14 @@ test_files:
760
766
  - test/dummy/app/models/product.rb
761
767
  - test/dummy/app/models/widget_configuration.rb
762
768
  - test/dummy/app/models/js_configuration.rb
769
+ - test/dummy/app/models/cart.rb
763
770
  - test/dummy/app/views/assets/script_tag.js.erb
764
771
  - test/dummy/app/views/assets/widget.scss.erb
765
772
  - test/dummy/app/views/assets/test.js.erb
766
773
  - test/dummy/app/views/assets/widget.js.erb
767
774
  - test/dummy/app/views/snippets/widget.liquid.erb
768
775
  - test/dummy/app/views/home/index.html.erb
776
+ - test/dummy/db/migrate/20161105054746_create_carts.rb
769
777
  - test/dummy/db/migrate/20160530160739_create_asset_models.rb
770
778
  - test/dummy/db/migrate/20160307182229_create_products.rb
771
779
  - test/dummy/db/schema.rb
@@ -846,6 +854,8 @@ test_files:
846
854
  - test/fixtures/disco_app/subscriptions.yml
847
855
  - test/fixtures/disco_app/plans.yml
848
856
  - test/fixtures/disco_app/recurring_application_charges.yml
857
+ - test/fixtures/carts.yml
858
+ - test/fixtures/webhooks/cart_updated.json
849
859
  - test/fixtures/webhooks/app_uninstalled.json
850
860
  - test/fixtures/webhooks/product_updated.json
851
861
  - test/fixtures/webhooks/product_created.json