kopi.js
Version:
API for ordering Singaporean Coffee
163 lines (138 loc) • 4 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.Kopi = factory());
}(this, function () { 'use strict';
var kopi = {
parse: function parse(name){
name = name.trim().toLowerCase();
// defaults
var coffee = 0,
condensed_milk = 0, // sweetened
evaporated_milk = 0, // unsweetened
sugar = 0,
water = 0,
state = 'warm';
if (/^kopi/.test(name)){
// 1. TYPES
sugar = 1;
// Kopi C
if (/^kopi\s(c|si|see)\b/.test(name)){
evaporated_milk = .2;
water = .4;
coffee = .4;
}
// Kopi O
else if (/^kopi\soh?\b/.test(name)){
water = .5;
coffee = .5;
}
// Kopi
else {
condensed_milk = .2;
water = .4;
coffee = .4;
}
// 2. STATE
if (/\b(peng|bing)\b/.test(name)){
state = 'iced';
} else if (/\bpua sio\b/.test(name)){
state = 'lukewarm';
}
// 3. EXPRESSIONS
// po = more water, less coffee
if (/\bpoh?\b/.test(name)){
water += .1;
coffee -= .1;
}
// gau = more coffee, less water
else if (/\b(g|k)a(u|o)\b/.test(name)){
water -= .1;
coffee += .1;
}
// di lo = no water, more coffee
else if (/\bdi\slo\b/.test(name)){
coffee += water;
water = 0;
}
// kosong = no sugar
if (/\bkosong\b/.test(name)){
if (condensed_milk){
throw new Error('Invalid Kopi. Condensed milk contains sugar.');
}
sugar = 0;
}
// gah dai = sweeter
else if (/\b(ga|ka)h?\s(d|t)ai\b/.test(name)){
if (condensed_milk > 0){
condensed_milk += .1;
water -= .05;
coffee -= .05;
} else if (evaporated_milk > 0){
evaporated_milk += .1;
water -= .05;
coffee -= .05;
}
sugar = 1.5;
}
// siu dai = less sweet
else if (/\b(siu|siew|xiu)\s(t|d)ai\b/.test(name)){
sugar = .5;
}
} else if (/^water$/.test(name)){
water = 1;
}
return {
water: water,
coffee: coffee,
sugar: sugar,
condensed_milk: condensed_milk,
evaporated_milk: evaporated_milk,
state: state
};
},
stringify: function stringify(ingredients){
if ( ingredients === void 0 ) ingredients = {};
var condensed_milk = ingredients.condensed_milk;
var evaporated_milk = ingredients.evaporated_milk;
var state = ingredients.state;
var sugar = ingredients.sugar;
var coffee = ingredients.coffee;
var water = ingredients.water;
var coffeeText = '',
stateText = '',
milkText = '',
sweetnessText = '';
if (evaporated_milk > 0){
milkText = ' C';
} else if (condensed_milk <= 0){ // No milk
milkText = ' O';
}
if (state == 'iced'){
stateText = ' Peng';
} else if (state == 'lukewarm'){
stateText = ' Pua Sio';
}
if (coffee > water){
if (water == 0){
coffeeText = ' Di Lo';
} else if (condensed_milk > water){
sweetnessText = ' Gah Dai';
} else {
coffeeText = ' Gao';
}
} else if (coffee < water){
coffeeText = ' Po';
}
if (sugar == 0 && condensed_milk <= 0){
sweetnessText = ' Kosong';
} else if (sugar < 1){
sweetnessText = ' Siew Dai';
} else if (sugar > 1){
sweetnessText = ' Gah Dai';
}
return ("Kopi" + milkText + stateText + coffeeText + sweetnessText);
}
};
return kopi;
}));