tang 0.0.9 → 0.1.0

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -0
  3. data/app/controllers/tang/admin/subscriptions_controller.rb +1 -1
  4. data/app/jobs/tang/import_customers_job.rb +7 -1
  5. data/app/models/tang/invoice.rb +2 -2
  6. data/app/models/tang/subscription.rb +3 -3
  7. data/app/services/tang/create_subscription.rb +4 -1
  8. data/app/services/tang/delete_card.rb +4 -2
  9. data/app/services/tang/fail_invoice.rb +6 -3
  10. data/app/services/tang/save_card.rb +4 -1
  11. data/app/services/tang/update_subscription.rb +1 -1
  12. data/app/views/tang/account/cards/_payment.html.erb +0 -32
  13. data/app/views/tang/admin/subscriptions/_form.html.erb +0 -5
  14. data/app/views/tang/admin/subscriptions/show.html.erb +0 -7
  15. data/lib/css/main.css +31 -0
  16. data/lib/js/index.js +3 -2
  17. data/lib/tang/version.rb +1 -1
  18. data/spec/fixtures/stripe_webhooks/invoice.created.json +1 -2
  19. data/spec/fixtures/stripe_webhooks/invoice.payment_failed.json +172 -0
  20. data/spec/models/tang/card_spec.rb +4 -1
  21. data/spec/models/tang/charge_spec.rb +47 -1
  22. data/spec/tang_app/Gemfile.lock +70 -0
  23. data/spec/tang_app/app/javascript/packs/application.js +2 -1
  24. data/spec/tang_app/app/views/layouts/application.html.erb +1 -0
  25. data/spec/tang_app/log/development.log +342 -0
  26. data/spec/tang_app/log/test.log +52349 -0
  27. data/spec/tang_app/node_modules/fsevents/build/Release/fse.node +0 -0
  28. data/spec/tang_app/package.json +3 -0
  29. data/spec/tang_app/public/packs-test/js/application-0dded7840d00b04c8937.js +653 -0
  30. data/spec/tang_app/public/packs-test/js/application-0dded7840d00b04c8937.js.map +1 -0
  31. data/spec/tang_app/public/packs-test/manifest.json +4 -4
  32. data/spec/tang_app/public/packs/js/application-080539f58098495f5fea.js +873 -0
  33. data/spec/tang_app/public/packs/js/application-080539f58098495f5fea.js.map +1 -0
  34. data/spec/tang_app/public/packs/js/application-63744ba8e1d5132a70a7.js +653 -0
  35. data/spec/tang_app/public/packs/js/application-63744ba8e1d5132a70a7.js.map +1 -0
  36. data/spec/tang_app/public/packs/js/application-6ed6c7d5740861886e33.js +908 -0
  37. data/spec/tang_app/public/packs/js/application-6ed6c7d5740861886e33.js.map +1 -0
  38. data/spec/tang_app/public/packs/js/application-95a81db325472bcd27be.js +873 -0
  39. data/spec/tang_app/public/packs/js/application-95a81db325472bcd27be.js.map +1 -0
  40. data/spec/tang_app/public/packs/js/application-a4d14e60f459eb6278f8.js +873 -0
  41. data/spec/tang_app/public/packs/js/application-a4d14e60f459eb6278f8.js.map +1 -0
  42. data/spec/tang_app/public/packs/js/application-e5d6d1269e6e876bad16.js +654 -0
  43. data/spec/tang_app/public/packs/js/application-e5d6d1269e6e876bad16.js.map +1 -0
  44. data/spec/tang_app/public/packs/manifest.json +4 -4
  45. data/spec/tang_app/tmp/cache/webpacker/last-compilation-digest-development +1 -1
  46. data/spec/tang_app/tmp/cache/webpacker/last-compilation-digest-test +1 -1
  47. metadata +35 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/application-e5d6d1269e6e876bad16.js","sources":["webpack:///webpack/bootstrap","webpack:////Users/craigphares/Code/tang/lib/css/main.css?7cc1","webpack:////Users/craigphares/Code/tang/lib/js/index.js","webpack:///./app/javascript/packs/application.js","webpack:////Users/craigphares/Code/tang/lib/css/main.css","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"],"sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"http://localhost:3000/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./app/javascript/packs/application.js\");\n","var api = require(\"!../../spec/tang_app/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../spec/tang_app/node_modules/css-loader/dist/cjs.js??ref--5-1!../../spec/tang_app/node_modules/postcss-loader/src/index.js??ref--5-2!./main.css\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};","import '../css/main.css'\n\n// Create a Stripe client.\nvar stripe = Stripe(process.env.STRIPE_PUBLISHABLE_KEY);\n\nconst registerElements = () => {\n\n if (!document.getElementById('card-element')) {\n return\n }\n\n // Create an instance of Elements.\n var elements = stripe.elements();\n\n // Custom styling can be passed to options when creating an Element.\n // (Note that this demo uses a wider set of styles than the guide below.)\n var style = {\n base: {\n color: '#32325d',\n fontFamily: '\"Helvetica Neue\", Helvetica, sans-serif',\n fontSmoothing: 'antialiased',\n fontSize: '16px',\n '::placeholder': {\n color: '#aab7c4'\n }\n },\n invalid: {\n color: '#fa755a',\n iconColor: '#fa755a'\n }\n };\n\n // Create an instance of the card Element.\n var card = elements.create('card', {style: style});\n\n // Add an instance of the card Element into the `card-element` <div>.\n card.mount('#card-element');\n // Handle real-time validation errors from the card Element.\n card.on('change', function(event) {\n var displayError = document.getElementById('card-errors');\n if (event.error) {\n displayError.textContent = event.error.message;\n } else {\n displayError.textContent = '';\n }\n });\n\n // Handle form submission.\n var form = document.getElementById('payment-form');\n form.addEventListener('submit', function(event) {\n event.preventDefault();\n\n const name = form.querySelector('#name')\n // const zip = form.querySelector('#zip')\n const additionalData = {\n name: name ? name.value : undefined,\n // address_zip: zip ? zip.value : undefined\n }\n\n stripe.createToken(card, additionalData).then(function(result) {\n if (result.error) {\n // Inform the user if there was an error.\n var errorElement = document.getElementById('card-errors');\n errorElement.textContent = result.error.message;\n } else {\n // Send the token to your server.\n stripeTokenHandler(result.token);\n }\n });\n });\n\n // Submit the form with the token ID.\n function stripeTokenHandler(token) {\n // Insert the token ID into the form so it gets submitted to the server\n var form = document.getElementById('payment-form');\n var hiddenInput = document.createElement('input');\n hiddenInput.setAttribute('type', 'hidden');\n hiddenInput.setAttribute('name', 'stripe_token');\n hiddenInput.setAttribute('value', token.id);\n form.appendChild(hiddenInput);\n\n // Submit the form\n form.submit();\n }\n\n}\n\nexport default registerElements","/* eslint no-console:0 */\n// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n//\n// To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate\n// layout file, like app/views/layouts/application.html.erb\n\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n\nimport registerElements from '@sixoverground/tang'\n\nconsole.log('Hello World from Webpacker 1')\n\nregisterElements()","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../spec/tang_app/node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(true);\n// Module\nexports.push([module.id, \"/**\\n * The CSS shown here will not be introduced in the Quickstart guide, but shows\\n * how you can use CSS to style your Element's container.\\n */\\n .StripeElement {\\n box-sizing: border-box;\\n\\n height: 40px;\\n\\n padding: 10px 12px;\\n\\n border: 1px solid transparent;\\n border-radius: 4px;\\n background-color: white;\\n\\n box-shadow: 0 1px 3px 0 #e6ebf1;\\n transition: box-shadow 150ms ease;\\n}\\n .StripeElement--focus {\\n box-shadow: 0 1px 3px 0 #cfd7df;\\n }\\n .StripeElement--invalid {\\n border-color: #fa755a;\\n }\\n .StripeElement--webkit-autofill {\\n background-color: #fefde5 !important;\\n }\", \"\",{\"version\":3,\"sources\":[\"main.css\"],\"names\":[],\"mappings\":\"AAAA;;;EAGE;CACD;EACC,sBAAsB;;EAEtB,YAAY;;EAEZ,kBAAkB;;EAElB,6BAA6B;EAC7B,kBAAkB;EAClB,uBAAuB;;EAEvB,+BAA+B;EAE/B,iCAAiC;AACnC;CAEE;IACE,+BAA+B;EACjC;CAEA;IACE,qBAAqB;EACvB;CAEA;IACE,oCAAoC;EACtC\",\"file\":\"main.css\",\"sourcesContent\":[\"/**\\n * The CSS shown here will not be introduced in the Quickstart guide, but shows\\n * how you can use CSS to style your Element's container.\\n */\\n .StripeElement {\\n box-sizing: border-box;\\n\\n height: 40px;\\n\\n padding: 10px 12px;\\n\\n border: 1px solid transparent;\\n border-radius: 4px;\\n background-color: white;\\n\\n box-shadow: 0 1px 3px 0 #e6ebf1;\\n -webkit-transition: box-shadow 150ms ease;\\n transition: box-shadow 150ms ease;\\n}\\n \\n .StripeElement--focus {\\n box-shadow: 0 1px 3px 0 #cfd7df;\\n }\\n \\n .StripeElement--invalid {\\n border-color: #fa755a;\\n }\\n \\n .StripeElement--webkit-autofill {\\n background-color: #fefde5 !important;\\n }\"]}]);\n// Exports\nmodule.exports = exports;\n","\"use strict\";\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\n\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && btoa) {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n // tags it will allow on a page\n\n if (!options.singleton && typeof options.singleton !== 'boolean') {\n options.singleton = isOldIE();\n }\n\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n if (Object.prototype.toString.call(newList) !== '[object Array]') {\n return;\n }\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDom[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDom[_index].references === 0) {\n stylesInDom[_index].updater();\n\n stylesInDom.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};"],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvFA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEA;AAEA;;;;;;;;;;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;A","sourceRoot":""}
@@ -1,13 +1,13 @@
1
1
  {
2
- "application.js": "/packs/js/application-41a24b0fc33cf60f1103.js",
3
- "application.js.map": "/packs/js/application-41a24b0fc33cf60f1103.js.map",
2
+ "application.js": "/packs/js/application-63744ba8e1d5132a70a7.js",
3
+ "application.js.map": "/packs/js/application-63744ba8e1d5132a70a7.js.map",
4
4
  "entrypoints": {
5
5
  "application": {
6
6
  "js": [
7
- "/packs/js/application-41a24b0fc33cf60f1103.js"
7
+ "/packs/js/application-63744ba8e1d5132a70a7.js"
8
8
  ],
9
9
  "js.map": [
10
- "/packs/js/application-41a24b0fc33cf60f1103.js.map"
10
+ "/packs/js/application-63744ba8e1d5132a70a7.js.map"
11
11
  ]
12
12
  }
13
13
  }
@@ -1 +1 @@
1
- 556bfa861ae0570b28b085dcb4f6e5390db5c41a
1
+ c60d4c4af98af26167603d323cff603daaf3cb98
@@ -1 +1 @@
1
- 26a31a69eea339c825bf301ace1c28d0ac86e642
1
+ bab4511d02251f785fee7ba05326a52928f13203
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Phares
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-21 00:00:00.000000000 Z
11
+ date: 2020-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -259,6 +259,7 @@ files:
259
259
  - db/migrate/20170701162853_add_stripe_indexes.rb
260
260
  - db/migrate/20170731010913_add_subscription_indexes.rb
261
261
  - db/migrate/20200827001523_add_invoice_pdf_to_invoices.rb
262
+ - lib/css/main.css
262
263
  - lib/generators/tang/install_generator.rb
263
264
  - lib/generators/templates/create_tang.rb
264
265
  - lib/js/index.js
@@ -276,6 +277,7 @@ files:
276
277
  - spec/fixtures/stripe_webhooks/charge.dispute.created.json
277
278
  - spec/fixtures/stripe_webhooks/charge.dispute.updated.json
278
279
  - spec/fixtures/stripe_webhooks/invoice.created.json
280
+ - spec/fixtures/stripe_webhooks/invoice.payment_failed.json
279
281
  - spec/helpers/tang/application_helper_spec.rb
280
282
  - spec/jobs/tang/import_charges_job_spec.rb
281
283
  - spec/jobs/tang/import_customers_job_spec.rb
@@ -302,6 +304,7 @@ files:
302
304
  - spec/spec_helper.rb
303
305
  - spec/support/controller_macros.rb
304
306
  - spec/support/devise.rb
307
+ - spec/tang_app/Gemfile.lock
305
308
  - spec/tang_app/README.md
306
309
  - spec/tang_app/Rakefile
307
310
  - spec/tang_app/app/assets/javascripts/application.js
@@ -16172,23 +16175,37 @@ files:
16172
16175
  - spec/tang_app/public/422.html
16173
16176
  - spec/tang_app/public/500.html
16174
16177
  - spec/tang_app/public/favicon.ico
16178
+ - spec/tang_app/public/packs-test/js/application-0dded7840d00b04c8937.js
16179
+ - spec/tang_app/public/packs-test/js/application-0dded7840d00b04c8937.js.map
16175
16180
  - spec/tang_app/public/packs-test/js/application-44a000ec08eb100852bd.js
16176
16181
  - spec/tang_app/public/packs-test/js/application-44a000ec08eb100852bd.js.map
16177
16182
  - spec/tang_app/public/packs-test/js/application-f9790852250dd873384e.js
16178
16183
  - spec/tang_app/public/packs-test/js/application-f9790852250dd873384e.js.map
16179
16184
  - spec/tang_app/public/packs-test/manifest.json
16185
+ - spec/tang_app/public/packs/js/application-080539f58098495f5fea.js
16186
+ - spec/tang_app/public/packs/js/application-080539f58098495f5fea.js.map
16180
16187
  - spec/tang_app/public/packs/js/application-41a24b0fc33cf60f1103.js
16181
16188
  - spec/tang_app/public/packs/js/application-41a24b0fc33cf60f1103.js.map
16182
16189
  - spec/tang_app/public/packs/js/application-5c68c425a3e0b5990600.js
16183
16190
  - spec/tang_app/public/packs/js/application-5c68c425a3e0b5990600.js.map
16184
16191
  - spec/tang_app/public/packs/js/application-6017292f0fa56e17e3b8.js
16185
16192
  - spec/tang_app/public/packs/js/application-6017292f0fa56e17e3b8.js.map
16193
+ - spec/tang_app/public/packs/js/application-63744ba8e1d5132a70a7.js
16194
+ - spec/tang_app/public/packs/js/application-63744ba8e1d5132a70a7.js.map
16195
+ - spec/tang_app/public/packs/js/application-6ed6c7d5740861886e33.js
16196
+ - spec/tang_app/public/packs/js/application-6ed6c7d5740861886e33.js.map
16186
16197
  - spec/tang_app/public/packs/js/application-906fca6bd771cd8b8692.js
16187
16198
  - spec/tang_app/public/packs/js/application-906fca6bd771cd8b8692.js.map
16199
+ - spec/tang_app/public/packs/js/application-95a81db325472bcd27be.js
16200
+ - spec/tang_app/public/packs/js/application-95a81db325472bcd27be.js.map
16201
+ - spec/tang_app/public/packs/js/application-a4d14e60f459eb6278f8.js
16202
+ - spec/tang_app/public/packs/js/application-a4d14e60f459eb6278f8.js.map
16188
16203
  - spec/tang_app/public/packs/js/application-b5c28aef9f78a04e2100.js
16189
16204
  - spec/tang_app/public/packs/js/application-b5c28aef9f78a04e2100.js.map
16190
16205
  - spec/tang_app/public/packs/js/application-c3c966119f8786956bee.js
16191
16206
  - spec/tang_app/public/packs/js/application-c3c966119f8786956bee.js.map
16207
+ - spec/tang_app/public/packs/js/application-e5d6d1269e6e876bad16.js
16208
+ - spec/tang_app/public/packs/js/application-e5d6d1269e6e876bad16.js.map
16192
16209
  - spec/tang_app/public/packs/js/application-f70c4f0495576f9654fe.js
16193
16210
  - spec/tang_app/public/packs/js/application-f70c4f0495576f9654fe.js.map
16194
16211
  - spec/tang_app/public/packs/manifest.json
@@ -33368,25 +33385,39 @@ test_files:
33368
33385
  - spec/tang_app/public/422.html
33369
33386
  - spec/tang_app/public/500.html
33370
33387
  - spec/tang_app/public/404.html
33388
+ - spec/tang_app/public/packs/js/application-080539f58098495f5fea.js.map
33389
+ - spec/tang_app/public/packs/js/application-63744ba8e1d5132a70a7.js
33371
33390
  - spec/tang_app/public/packs/js/application-41a24b0fc33cf60f1103.js
33391
+ - spec/tang_app/public/packs/js/application-95a81db325472bcd27be.js
33392
+ - spec/tang_app/public/packs/js/application-e5d6d1269e6e876bad16.js
33372
33393
  - spec/tang_app/public/packs/js/application-6017292f0fa56e17e3b8.js
33373
33394
  - spec/tang_app/public/packs/js/application-906fca6bd771cd8b8692.js
33395
+ - spec/tang_app/public/packs/js/application-a4d14e60f459eb6278f8.js.map
33396
+ - spec/tang_app/public/packs/js/application-080539f58098495f5fea.js
33397
+ - spec/tang_app/public/packs/js/application-e5d6d1269e6e876bad16.js.map
33374
33398
  - spec/tang_app/public/packs/js/application-c3c966119f8786956bee.js.map
33375
33399
  - spec/tang_app/public/packs/js/application-906fca6bd771cd8b8692.js.map
33376
33400
  - spec/tang_app/public/packs/js/application-41a24b0fc33cf60f1103.js.map
33401
+ - spec/tang_app/public/packs/js/application-63744ba8e1d5132a70a7.js.map
33377
33402
  - spec/tang_app/public/packs/js/application-f70c4f0495576f9654fe.js.map
33403
+ - spec/tang_app/public/packs/js/application-6ed6c7d5740861886e33.js
33378
33404
  - spec/tang_app/public/packs/js/application-b5c28aef9f78a04e2100.js.map
33379
33405
  - spec/tang_app/public/packs/js/application-5c68c425a3e0b5990600.js
33406
+ - spec/tang_app/public/packs/js/application-6ed6c7d5740861886e33.js.map
33380
33407
  - spec/tang_app/public/packs/js/application-6017292f0fa56e17e3b8.js.map
33408
+ - spec/tang_app/public/packs/js/application-95a81db325472bcd27be.js.map
33381
33409
  - spec/tang_app/public/packs/js/application-f70c4f0495576f9654fe.js
33382
33410
  - spec/tang_app/public/packs/js/application-5c68c425a3e0b5990600.js.map
33383
33411
  - spec/tang_app/public/packs/js/application-c3c966119f8786956bee.js
33384
33412
  - spec/tang_app/public/packs/js/application-b5c28aef9f78a04e2100.js
33413
+ - spec/tang_app/public/packs/js/application-a4d14e60f459eb6278f8.js
33385
33414
  - spec/tang_app/public/packs/manifest.json
33386
33415
  - spec/tang_app/public/packs-test/js/application-44a000ec08eb100852bd.js.map
33387
33416
  - spec/tang_app/public/packs-test/js/application-f9790852250dd873384e.js.map
33417
+ - spec/tang_app/public/packs-test/js/application-0dded7840d00b04c8937.js.map
33388
33418
  - spec/tang_app/public/packs-test/js/application-44a000ec08eb100852bd.js
33389
33419
  - spec/tang_app/public/packs-test/js/application-f9790852250dd873384e.js
33420
+ - spec/tang_app/public/packs-test/js/application-0dded7840d00b04c8937.js
33390
33421
  - spec/tang_app/public/packs-test/manifest.json
33391
33422
  - spec/tang_app/babel.config.js
33392
33423
  - spec/tang_app/package.json
@@ -33396,6 +33427,7 @@ test_files:
33396
33427
  - spec/tang_app/db/migrate/20160928150425_devise_create_users.rb
33397
33428
  - spec/tang_app/log/test.log
33398
33429
  - spec/tang_app/log/development.log
33430
+ - spec/tang_app/Gemfile.lock
33399
33431
  - spec/tang_app/postcss.config.js
33400
33432
  - spec/tang_app/tmp/cache/webpacker/last-compilation-digest-test
33401
33433
  - spec/tang_app/tmp/cache/webpacker/last-compilation-digest-development
@@ -34665,6 +34697,7 @@ test_files:
34665
34697
  - spec/fixtures/stripe_webhooks/invoice.created.json
34666
34698
  - spec/fixtures/stripe_webhooks/charge.dispute.closed.json
34667
34699
  - spec/fixtures/stripe_webhooks/charge.dispute.created.json
34700
+ - spec/fixtures/stripe_webhooks/invoice.payment_failed.json
34668
34701
  - spec/routing/tang/admin/subscriptions_routing_spec.rb
34669
34702
  - spec/routing/tang/admin/customers_routing_spec.rb
34670
34703
  - spec/routing/tang/admin/coupons_routing_spec.rb