autodoc_shared_functions
Constructor > jo.pricing.new()
Creates a canonical PriceClass. <br>
Constructor > jo.pricing.new() > Syntax
jo.pricing.new(data, reuseExisting)
Constructor > jo.pricing.new() > Parameters
data : PriceInput|PriceClass <BadgeOptional />
Price input to normalize <br> default:
nil
reuseExisting : boolean <BadgeOptional />
Reuse existing PriceClass if already created <br> default:
false
Constructor > jo.pricing.new() > Return Value
Type : PriceClass
Constructor > jo.pricing.new() > Example
local price = jo.pricing.new({
money = 5,
{ money = 10 },
{ item = "water", quantity = 2 }
})
log(price:getCosts())
-- Expected output:
-- {
-- { money = 15 },
-- { item = "water", quantity = 2, keep = false }
-- }
Constructor > jo.pricing.newGroup()
Creates a canonical PriceGroupClass. <br>
Constructor > jo.pricing.newGroup() > Syntax
jo.pricing.newGroup(data, reuseExisting)
Constructor > jo.pricing.newGroup() > Parameters
data : PriceGroupInput <BadgeOptional />
Price group input to normalize <br> default:
nil
reuseExisting : boolean <BadgeOptional />
Reuse existing PriceGroupClass if already created <br> default:
false
Constructor > jo.pricing.newGroup() > Return Value
Type : PriceGroupClass
Constructor > jo.pricing.newGroup() > Example
local group = jo.pricing.newGroup({
operator = "and",
money = 10,
gold = 2
})
print(group.operator)
-- Expected output: "and"
print(group:count())
-- Expected output: 2
log(group:compact():getCosts())
-- Expected output:
-- {
-- { money = 10 },
-- { gold = 2 }
-- }
JO Functions > jo.pricing.getCosts()
Returns the canonical costs list for a price input. <br>
JO Functions > jo.pricing.getCosts() > Syntax
jo.pricing.getCosts(price)
JO Functions > jo.pricing.getCosts() > Parameters
price : PriceInput
Price input
JO Functions > jo.pricing.getCosts() > Return Value
Type : Cost[]
JO Functions > jo.pricing.isPrice()
Returns true when a value is a PriceClass instance. <br>
JO Functions > jo.pricing.isPrice() > Syntax
jo.pricing.isPrice(value)
JO Functions > jo.pricing.isPrice() > Parameters
value : any
Value to test
JO Functions > jo.pricing.isPrice() > Return Value
Type : boolean
JO Functions > jo.pricing.isPrice() > Example
local price = jo.pricing.new({ money = 10 })
local plainTable = { costs = { { money = 10 } } }
print(jo.pricing.isPrice(price))
-- Expected output: true
print(jo.pricing.isPrice(plainTable))
-- Expected output: false
JO Functions > jo.pricing.isPriceGroup()
Returns true when a value is a PriceGroupClass instance. <br>
JO Functions > jo.pricing.isPriceGroup() > Syntax
jo.pricing.isPriceGroup(value)
JO Functions > jo.pricing.isPriceGroup() > Parameters
value : any
Value to test
JO Functions > jo.pricing.isPriceGroup() > Return Value
Type : boolean
JO Functions > jo.pricing.isPriceGroup() > Example
local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local plainTable = { operator = "or", prices = {} }
print(jo.pricing.isPriceGroup(group))
-- Expected output: true
print(jo.pricing.isPriceGroup(plainTable))
-- Expected output: false
JO Functions > jo.pricing.tax()
Returns the canonical costs list for a price input. <br> Splits a price into tax and remaining prices. <br>
JO Functions > jo.pricing.tax() > Syntax
jo.pricing.tax(price, percentage, roundUpItems)
JO Functions > jo.pricing.tax() > Parameters
price : PriceInput
Price input to split
percentage : number <BadgeOptional />
Tax multiplier applied to the input price <br> default:
0
roundUpItems : boolean <BadgeOptional />
Round item quantities up instead of down <br> default:
false
JO Functions > jo.pricing.tax() > Return Value
Type : PriceClass,PriceClass
JO Functions > jo.pricing.tax() > Example
local price = jo.pricing.new({ money = 10, item = "water", quantity = 3 })
-- With roundUpItems = false, item quantities in the tax are rounded down.
local taxPrice, remainingPrice = jo.pricing.tax(price, 0.5, false)
log(taxPrice:getCosts()) -- Tax PriceClass
-- Expected output:
-- {
-- { money = 5 },
-- { item = "water", quantity = 1, keep = false }
-- }
log(remainingPrice:getCosts()) -- Remaining PriceClass
-- Expected output:
-- {
-- { money = 5 },
-- { item = "water", quantity = 2, keep = false }
-- }
-- With roundUpItems = true, item quantities in the tax are rounded up.
local roundedTaxPrice, roundedRemainingPrice = jo.pricing.tax(price, 0.5, true)
log(roundedTaxPrice:getCosts()) -- Tax PriceClass
-- Expected output:
-- {
-- { money = 5 },
-- { item = "water", quantity = 2, keep = false }
-- }
log(roundedRemainingPrice:getCosts()) -- Remaining PriceClass
-- Expected output:
-- {
-- { money = 5 },
-- { item = "water", quantity = 1, keep = false }
-- }
The first returned PriceClass contains the tax amount.
The second returned PriceClass contains the remaining price after the tax was removed from the input.
PriceClass Methods > PriceClass:add()
Adds a price to the current PriceClass. <br>
PriceClass Methods > PriceClass:add() > Syntax
PriceClass:add(price)
PriceClass Methods > PriceClass:add() > Parameters
price : PriceInput
Price input to add to the current price
PriceClass Methods > PriceClass:add() > Return Value
Type : PriceClass
PriceClass Methods > PriceClass:add() > Example
local price = jo.pricing.new({ money = 10 })
price:add({ money = 5, gold = 2 })
log(price:getCosts())
-- Expected output:
-- {
-- { money = 15 },
-- { gold = 2 }
-- }
PriceClass Methods > PriceClass:clear()
Removes every cost from the current PriceClass. <br>
PriceClass Methods > PriceClass:clear() > Syntax
PriceClass:clear()
PriceClass Methods > PriceClass:clear() > Return Value
Type : PriceClass
PriceClass Methods > PriceClass:clear() > Example
local price = jo.pricing.new({ money = 10, item = "water" })
price:clear()
log(price:getCosts())
-- Expected output: {}
print(price:isFree())
-- Expected output: true
PriceClass Methods > PriceClass:copy()
Creates a new independent copy of the current PriceClass. <br>
PriceClass Methods > PriceClass:copy() > Syntax
PriceClass:copy()
PriceClass Methods > PriceClass:copy() > Return Value
Type : PriceClass
PriceClass Methods > PriceClass:copy() > Example
local price = jo.pricing.new({ money = 10 })
local copy = price:copy()
copy:add({ gold = 2 })
log(price:getCosts())
-- Expected output: { { money = 10 } }
log(copy:getCosts())
-- Expected output: { { money = 10 }, { gold = 2 } }
PriceClass Methods > PriceClass:equals()
Returns true when another price has the same costs. <br>
PriceClass Methods > PriceClass:equals() > Syntax
PriceClass:equals(other)
PriceClass Methods > PriceClass:equals() > Parameters
other : PriceInput
Price input to compare with the current price
PriceClass Methods > PriceClass:equals() > Return Value
Type : boolean
PriceClass Methods > PriceClass:equals() > Example
local price = jo.pricing.new({ money = 10, item = "water" })
print(price:equals({ item = "water", money = 10 }))
-- Expected output: true
print(price:equals("invalid"))
-- Expected output: false
PriceClass Methods > PriceClass:getCosts() > Syntax
PriceClass:getCosts()
PriceClass Methods > PriceClass:getCosts() > Return Value
Type : Cost[]
PriceClass Methods > PriceClass:getGold() > Syntax
PriceClass:getGold()
PriceClass Methods > PriceClass:getGold() > Return Value
Type : number|nil
PriceClass Methods > PriceClass:getGold() > Example
local price = jo.pricing.new({ money = 10, gold = 2 })
local gold = price:getGold()
log(gold)
-- Expected output: 2
PriceClass Methods > PriceClass:getItem()
Returns an ItemCost by item name and keep flag. <br>
PriceClass Methods > PriceClass:getItem() > Syntax
PriceClass:getItem(item, keep)
PriceClass Methods > PriceClass:getItem() > Parameters
item : string
Item name
keep : boolean
Item keep flag -
false: consumed cost,true: required but kept
PriceClass Methods > PriceClass:getItem() > Return Value
Type : ItemCost|nil
PriceClass Methods > PriceClass:getItem() > Example
local price = jo.pricing.new({
{ item = "water", quantity = 2, keep = false },
{ item = "permit", quantity = 1, keep = true }
})
local consumedWater = price:getItem("water", false)
local keptPermit = price:getItem("permit", true)
log(consumedWater)
-- Expected output: { item = "water", quantity = 2, keep = false }
log(keptPermit)
-- Expected output: { item = "permit", quantity = 1, keep = true }
PriceClass Methods > PriceClass:getItems() > Syntax
PriceClass:getItems()
PriceClass Methods > PriceClass:getItems() > Return Value
Type : ItemCost[]
PriceClass Methods > PriceClass:getItems() > Example
local price = jo.pricing.new({ money = 10, item = "water" })
local items = price:getItems()
log(items)
-- Expected output:
-- {
-- { item = "water", quantity = 1, keep = false }
-- }
PriceClass Methods > PriceClass:getMoney() > Syntax
PriceClass:getMoney()
PriceClass Methods > PriceClass:getMoney() > Return Value
Type : number|nil
PriceClass Methods > PriceClass:getMoney() > Example
local price = jo.pricing.new({ money = 10, gold = 2 })
local money = price:getMoney()
log(money)
-- Expected output: 10
PriceClass Methods > PriceClass:getRol() > Syntax
PriceClass:getRol()
PriceClass Methods > PriceClass:getRol() > Return Value
Type : number|nil
PriceClass Methods > PriceClass:getRol() > Example
local price = jo.pricing.new({ rol = 3 })
local rol = price:getRol()
log(rol)
-- Expected output: 3
PriceClass Methods > PriceClass:hasCurrency()
Returns true when a currency cost exists. <br>
PriceClass Methods > PriceClass:hasCurrency() > Syntax
PriceClass:hasCurrency(key)
PriceClass Methods > PriceClass:hasCurrency() > Parameters
key : "money"|"gold"|"rol"
Currency cost key
PriceClass Methods > PriceClass:hasCurrency() > Return Value
Type : boolean
PriceClass Methods > PriceClass:hasCurrency() > Example
local price = jo.pricing.new({ money = 10, item = "water" })
print(price:hasCurrency("money"))
-- Expected output: true
print(price:hasCurrency("gold"))
-- Expected output: false
PriceClass Methods > PriceClass:hasItem()
Returns true when an ItemCost exists for an item name and keep flag. <br>
PriceClass Methods > PriceClass:hasItem() > Syntax
PriceClass:hasItem(item, keep)
PriceClass Methods > PriceClass:hasItem() > Parameters
item : string
Item name
keep : boolean
Item keep flag -
false: consumed cost,true: required but kept
PriceClass Methods > PriceClass:hasItem() > Return Value
Type : boolean
PriceClass Methods > PriceClass:hasItem() > Example
local price = jo.pricing.new({ item = "water", quantity = 2 })
print(price:hasItem("water", false))
-- Expected output: true
print(price:hasItem("water", true))
-- Expected output: false
PriceClass Methods > PriceClass:isCurrencyOnly()
Returns true when the PriceClass contains only currency costs. <br>
PriceClass Methods > PriceClass:isCurrencyOnly() > Syntax
PriceClass:isCurrencyOnly()
PriceClass Methods > PriceClass:isCurrencyOnly() > Return Value
Type : boolean
PriceClass Methods > PriceClass:isCurrencyOnly() > Example
print(jo.pricing.new({ money = 10, gold = 2 }):isCurrencyOnly())
-- Expected output: true
print(jo.pricing.new({ money = 10, item = "water" }):isCurrencyOnly())
-- Expected output: false
PriceClass Methods > PriceClass:isFree()
Returns true when the PriceClass has no payable costs. <br>
PriceClass Methods > PriceClass:isFree() > Syntax
PriceClass:isFree()
PriceClass Methods > PriceClass:isFree() > Return Value
Type : boolean
PriceClass Methods > PriceClass:isFree() > Example
print(jo.pricing.new():isFree())
-- Expected output: true
print(jo.pricing.new({ money = 0 }):isFree())
-- Expected output: true
print(jo.pricing.new({ item = "water" }):isFree())
-- Expected output: false
PriceClass Methods > PriceClass:isItemOnly()
Returns true when the PriceClass contains only item costs. <br>
PriceClass Methods > PriceClass:isItemOnly() > Syntax
PriceClass:isItemOnly()
PriceClass Methods > PriceClass:isItemOnly() > Return Value
Type : boolean
PriceClass Methods > PriceClass:isItemOnly() > Example
print(jo.pricing.new({ item = "water" }):isItemOnly())
-- Expected output: true
print(jo.pricing.new({ money = 10, item = "water" }):isItemOnly())
-- Expected output: false
PriceClass Methods > PriceClass:removeCurrency()
Removes a currency cost from the current PriceClass. <br>
PriceClass Methods > PriceClass:removeCurrency() > Syntax
PriceClass:removeCurrency(key)
PriceClass Methods > PriceClass:removeCurrency() > Parameters
key : "money"|"gold"|"rol"
Currency cost key to remove
PriceClass Methods > PriceClass:removeCurrency() > Return Value
Type : PriceClass
PriceClass Methods > PriceClass:removeCurrency() > Example
local price = jo.pricing.new({ money = 10, gold = 2 })
price:removeCurrency("money")
log(price:getCosts())
-- Expected output: { { gold = 2 } }
PriceClass Methods > PriceClass:removeItem()
Removes an ItemCost from the current PriceClass. <br>
PriceClass Methods > PriceClass:removeItem() > Syntax
PriceClass:removeItem(item, keep)
PriceClass Methods > PriceClass:removeItem() > Parameters
item : string
Item name
keep : boolean
Item keep flag -
false: consumed cost,true: required but kept
PriceClass Methods > PriceClass:removeItem() > Return Value
Type : PriceClass
PriceClass Methods > PriceClass:removeItem() > Example
local price = jo.pricing.new({
{ item = "water", quantity = 2, keep = false },
{ item = "permit", keep = true }
})
price:removeItem("water", false)
log(price:getCosts())
-- Expected output:
-- {
-- { item = "permit", quantity = 1, keep = true }
-- }
PriceGroupClass Methods > PriceGroupClass:clear()
Removes every price from the group. <br>
PriceGroupClass Methods > PriceGroupClass:clear() > Syntax
PriceGroupClass:clear()
PriceGroupClass Methods > PriceGroupClass:clear() > Return Value
Type : PriceGroupClass
PriceGroupClass Methods > PriceGroupClass:clear() > Example
local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
group:clear()
print(group:count())
-- Expected output: 0
print(group:isEmpty())
-- Expected output: true
PriceGroupClass Methods > PriceGroupClass:compact()
Compacts an "and" PriceGroupClass into a new PriceClass. <br>
PriceGroupClass Methods > PriceGroupClass:compact() > Syntax
PriceGroupClass:compact()
PriceGroupClass Methods > PriceGroupClass:compact() > Return Value
Type : PriceClass
PriceGroupClass Methods > PriceGroupClass:compact() > Example
local group = jo.pricing.newGroup({
operator = "and",
prices = {
{ money = 10 },
{ money = 5 },
{ item = "water", quantity = 2, keep = false },
{ item = "water", quantity = 5 },
{ item = "water", quantity = 2, keep = true }
}
})
local price = group:compact()
log(price:getCosts())
-- Expected output:
-- {
-- { money = 15 },
-- { item = "water", quantity = 7, keep = false },
-- { item = "water", quantity = 2, keep = true }
-- }
PriceGroupClass Methods > PriceGroupClass:copy()
Creates a new independent copy of the current PriceGroupClass. <br>
PriceGroupClass Methods > PriceGroupClass:copy() > Syntax
PriceGroupClass:copy()
PriceGroupClass Methods > PriceGroupClass:copy() > Return Value
Type : PriceGroupClass
PriceGroupClass Methods > PriceGroupClass:copy() > Example
local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local copy = group:copy()
copy:insert({ rol = 1 })
print(group:count())
-- Expected output: 2
print(copy:count())
-- Expected output: 3
PriceGroupClass Methods > PriceGroupClass:count()
Returns the number of prices in the group. <br>
PriceGroupClass Methods > PriceGroupClass:count() > Syntax
PriceGroupClass:count()
PriceGroupClass Methods > PriceGroupClass:count() > Return Value
Type : number
PriceGroupClass Methods > PriceGroupClass:count() > Example
local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
print(group:count())
-- Expected output: 2
PriceGroupClass Methods > PriceGroupClass:get()
Returns a PriceClass by index. <br>
PriceGroupClass Methods > PriceGroupClass:get() > Syntax
PriceGroupClass:get(index)
PriceGroupClass Methods > PriceGroupClass:get() > Parameters
index : number
Price index
PriceGroupClass Methods > PriceGroupClass:get() > Return Value
Type : PriceClass|nil
PriceGroupClass Methods > PriceGroupClass:get() > Example
local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local firstPrice = group:get(1)
log(firstPrice:getCosts())
-- Expected output: { { money = 10 } }
PriceGroupClass Methods > PriceGroupClass:getCosts()
Returns the costs of a price by index. <br>
PriceGroupClass Methods > PriceGroupClass:getCosts() > Syntax
PriceGroupClass:getCosts(index)
PriceGroupClass Methods > PriceGroupClass:getCosts() > Parameters
index : number
Price index
PriceGroupClass Methods > PriceGroupClass:getCosts() > Return Value
Type : Cost[]|nil
PriceGroupClass Methods > PriceGroupClass:insert()
Inserts a PriceClass into the group. <br>
PriceGroupClass Methods > PriceGroupClass:insert() > Syntax
PriceGroupClass:insert(price, index)
PriceGroupClass Methods > PriceGroupClass:insert() > Parameters
price : PriceInput
Price input to insert
index : number <BadgeOptional />
Insertion index <br> default: append at the end
PriceGroupClass Methods > PriceGroupClass:insert() > Return Value
Type : PriceGroupClass
PriceGroupClass Methods > PriceGroupClass:insert() > Example
local group = jo.pricing.newGroup({ { money = 10 } })
group:insert({ gold = 2 })
group:insert({ rol = 1 }, 1)
print(group:count())
-- Expected output: 3
log(group:get(1):getCosts())
-- Expected output: { { rol = 1 } }
PriceGroupClass Methods > PriceGroupClass:isEmpty()
Returns true when the group contains no prices. <br>
PriceGroupClass Methods > PriceGroupClass:isEmpty() > Syntax
PriceGroupClass:isEmpty()
PriceGroupClass Methods > PriceGroupClass:isEmpty() > Return Value
Type : boolean
PriceGroupClass Methods > PriceGroupClass:isEmpty() > Example
local group = jo.pricing.newGroup()
print(group:isEmpty())
-- Expected output: true
group:insert({ money = 10 })
print(group:isEmpty())
-- Expected output: false
PriceGroupClass Methods > PriceGroupClass:remove()
Removes a PriceClass from the group by index. <br>
PriceGroupClass Methods > PriceGroupClass:remove() > Syntax
PriceGroupClass:remove(index)
PriceGroupClass Methods > PriceGroupClass:remove() > Parameters
index : number
Price index to remove
PriceGroupClass Methods > PriceGroupClass:remove() > Return Value
Type : PriceClass|nil
PriceGroupClass Methods > PriceGroupClass:remove() > Example
local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
local removed = group:remove(1)
log(removed:getCosts())
-- Expected output: { { money = 10 } }
print(group:count())
-- Expected output: 1
PriceGroupClass Methods > PriceGroupClass:set()
Replaces an existing PriceClass by index. <br>
PriceGroupClass Methods > PriceGroupClass:set() > Syntax
PriceGroupClass:set(index, price)
PriceGroupClass Methods > PriceGroupClass:set() > Parameters
index : number
Existing price index to replace
price : PriceInput
Replacement price input
PriceGroupClass Methods > PriceGroupClass:set() > Return Value
Type : PriceGroupClass
PriceGroupClass Methods > PriceGroupClass:set() > Example
local group = jo.pricing.newGroup({ { money = 10 }, { gold = 2 } })
group:set(2, { item = "water", quantity = 2 })
log(group:get(2):getCosts())
-- Expected output:
-- {
-- { item = "water", quantity = 2, keep = false }
-- }