view stripe/src/luan/modules/stripe/Stripe.luan @ 503:92c3d22745b8

make _ENV optional
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 20 May 2015 23:24:46 -0600
parents 56c23aa70045
children ca169567ce07
line wrap: on
line source

java()
local Luan = require "luan:Luan"
local error = Luan.error
local assert_integer = Luan.assert_integer
local Table = require "luan:Table"
local Stripe = require "java:com.stripe.Stripe"
local Customer = require "java:com.stripe.model.Customer"
local Charge = require "java:com.stripe.model.Charge"

local M = {}

M.currency = "usd"

function M.init(api_key)
	Stripe.apiKey = api_key
end


local function customer_table(java_customer)

	local function subscription()
		local list = java_customer.getSubscriptions().getData()
		local size = list.size()
		size <= 1 or error "more than 1 subscription"
		return size == 1 and list.get(0) or nil
	end

	local this = Table.new_property_table()
	local meta = Luan.get_metatable(this)

	meta.get.id = java_customer.getId

	function meta.get.subscription_status()
		local s = subscription()
		return s and s.getStatus()
	end

	function this.cancel_subscription()
		local s = subscription()
		s and s.cancel(nil)
	end

	return this
end


local function charge_table(java_charge)
	local this = Table.new_property_table()
	local meta = Luan.get_metatable(this)

	meta.get.id = java_charge.getId
	meta.get.amount = java_charge.getAmount

	return this
end


function M.create_customer(params)
	local java_customer = Customer.create(params)
	return customer_table(java_customer)
end

function M.retrieve_customer(id)
	local java_customer = Customer.retrieve(id)
	return customer_table(java_customer)
end

function M.create_charge(params)
	params.amount or error "missing parameter 'amount'"
	params.amount = assert_integer(params.amount)
	params.currency = params.currency or M.currency
	local java_charge = Charge.create(params)
	return charge_table(java_charge)
end

return M

-- http://javadox.com/com.stripe/stripe-java/1.2.1/overview-summary.html