If checkout doesnt work well can use the payment intents API
Simple Difference Comparison: https://stripe.com/docs/payments/payment-intents/migration/charges Code Example: https://gist.github.com/westonganger/6ac28553b13a0bc7fe07dcf8d86ce3bd
module I18n | |
class CustomExceptionHandler < ExceptionHandler | |
def call(exception, locale, key, options) | |
if exception.is_a?(MissingTranslation) && key.to_s != 'i18n.plural.rule' | |
raise exception.to_exception | |
else | |
super | |
end | |
end | |
end |
### Adapted from below, custom changes marked with "CUSTOM" | |
### https://github.com/electric-feel/i18n-backend-side_by_side/blob/master/lib/i18n/backend/side_by_side.rb | |
require 'i18n' | |
require 'i18n/core_ext/hash' | |
module I18n | |
module Backend | |
using HashRefinements |
Hash.class_eval do | |
def deep_set(keys_array, val) | |
keys_array[0...-1].inject(self){|result, key| | |
if !result[key].is_a?(Hash) | |
result[key] = {} | |
end | |
result[key] | |
}.send(:[]=, keys_array.last, val) |
// AUTOMATIC IFRAME HEIGHT | |
document.querySelector('iframe#my-iframe').addEventListener('load', function(){ | |
this.style.height = this.contentWindow.document.body.offsetHeight + "px"; | |
this.style.width = '100%'; | |
this.style.maxWidth = '1200px'; | |
}); |
If checkout doesnt work well can use the payment intents API
Simple Difference Comparison: https://stripe.com/docs/payments/payment-intents/migration/charges Code Example: https://gist.github.com/westonganger/6ac28553b13a0bc7fe07dcf8d86ce3bd
/* Note: The html string returned fron this method will not contain any actual remotely referenced JS/CSS just the HTML as in the source */ | |
window.get_html_snapshot = function(hideItems, hideClasses){ | |
hideItems = hideItems || false; | |
hideClasses = hideClasses || ".modal, .modal-backdrop"; | |
var input_types_to_skip = ["button", "submit", "file", "image", "password"]; | |
// First write all input[type=text] field value so they can be seen when HTML is loaded | |
$('input').each(function(){ |
// Links | |
// https://stackoverflow.com/questions/951791/javascript-global-event-mechanism | |
// https://stackoverflow.com/a/49560222/3068360 | |
// https://stackoverflow.com/questions/5328154/catch-all-javascript-errors-and-send-them-to-server | |
window.addEventListener('error', function(event) { | |
// Instead of window.onerror we use addEventListener with capture option set to true to get the most errors | |
// window.onerror = function(message, file, line, col, error){ | |
// https://stackoverflow.com/q/54209739/3068360 | |
module StripePayment | |
### https://stripe.com/docs/payments | |
TEST_PUBLIC_KEY = "pk_test_foo".freeze | |
TEST_SECRET_KEY = "sk_test_bar".freeze | |
def self.create_payment_intent!( | |
api_secret_key:, | |
payment_method_id:, ### we use payment method id for this so we can track billing details | |
amount_in_cents:, |
def create_tempfile(str_data, file_name: nil) | |
file_basename = file_name.to_s.split('.').first || "Example File" | |
file_ext = file_name.to_s.split('.').last || "csv" | |
### Must seperate basename and extension to array for tempfile new syntax | |
### https://ruby-doc.org/stdlib-3.0.2/libdoc/tempfile/rdoc/Tempfile.html#method-c-new | |
tmp_file = Tempfile.new([file_basename, ".#{file_ext}"], binmode: true) | |
tmp_file << str_data |
### CUSTOM I18N EXCEPTION HANDLER | |
### 1. This exception handler enforces that an exception is raised whenever a translation is not found rather than showing "translation missing" to user | |
### 2. YOU CAN USE I18n.t(key, fallback: true) and it will now handle missing translations as follows: | |
### | |
### If a specific key is used ie. 'fisheries.locations.asd' and the translation is not found then it will look for: | |
### - 'common.asd' | |
### | |
module I18n |