View best_sellers.rb
#!/bin/ruby
require 'shopify_api'
# This is an example script for the course "Mastering Shopify Apps"
# available at http://gavinballard.com/msa/. You're free to use and
# modify this script as desired.
# Define authentication parameters. You should update these with the
# authentication details for your own shop and private application.
SHOPIFY_SHOP='mastering-apps.myshopify.com'
View cartjs-dom-binding.html
<!--
This is some example markup for using the DOM Binding feature of CartJS (http://cartjs.org).
It's a direct copy of the second live example code on the front page of the documentation site.
-->
<!-- Add to cart form, using Data API -->
<form data-cart-submit="data-cart-submit">
<label>Select a Product</label>
<select name="id">
<option value="716986707">Coat</option>
View shopify_carrierservice_request.py
import hashlib, base64, hmac, json, settings
def shopify_carrierservice_request(f):
"""
A decorator thats checks and validates a CarrierService request from Shopify.
"""
def _hmac_is_valid(body, secret, hmac_to_verify):
hash = hmac.new(body, secret, hashlib.sha256)
hmac_calculated = base64.b64encode(hash.digest())
View post-checkout.rb
#!/usr/bin/env/ruby
require 'yaml'
# Get the "type" of checkout from the arguments Git passes to us.
# Possible values for this are "0" for a file-only checkout (which we dont' care about)
# or "1" for a full branch checkout (which we do).
checkout_type = ARGV[2]
if checkout_type == "1"
View post-checkout
#!/usr/bin/env ruby
require 'yaml'
# Get the "type" of checkout from the arguments Git passes to us.
# Possible values for this are "0" for a file-only checkout (which we dont' care about)
# or "1" for a full branch checkout (which we do).
checkout_type = ARGV[2]
if checkout_type == "1"
View settings.html
<fieldset>
<legend>Appearance and Fonts</legend>
<h3>
Background
</h3>
<table>
<tr>
<th>
<label for="background_style">Background Style</label>
</th>
View respond.js
/*! Respond.js: min/max-width media query polyfill. Remote proxy (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */
(function(win, doc, undefined) {
// Add a modified version of selectivizr.js here. Could remove the methods
// that fetch remote stylesheets (as Respond.js would be doing that for us
// via the proxy method), but expose the code that parses and applies
// patches as a public method - something like Selectivizr.parseStyleSheets().
var docElem = doc.documentElement,
proxyURL = doc.getElementById("respond-proxy").href,
View proxy_request_verification.py
import hashlib, base64, hmac
def get_proxy_signature(query_dict, secret):
"""
Calculate the signature of the given query dict as per Shopify's documentation for proxy requests.
See: http://docs.shopify.com/api/tutorials/application-proxies#security
"""
# Sort and combine query parameters into a single string.
View shopify_webhook.py
import hashlib, base64, hmac, json, settings
def shopify_webhook(f):
"""
A decorator thats checks and validates a Shopify Webhook request.
"""
def _hmac_is_valid(body, secret, hmac_to_verify):
hash = hmac.new(body, secret, hashlib.sha256)
hmac_calculated = base64.b64encode(hash.digest())
View gist:3212413
Ajax.Request.addMethods({
/**
* Add the values given in the argument hash to an existing Ajax.Request.
* This method operates by extending the existing 'parameters' property
* on the request, then re-encoding that hash and either updating the
* generated URL (for GET requests) or simply setting the 'postBody'
* option on the request (for POST and other requests).
*
* @param parameters A hash of new parameters to extend the request with.