# ChangeDispenserController Class #### calculateChange(unitsTendered, price) **unitsTendered:** An array of instances of some kind of MonetaryUnit subclass. You can assert that the units tendered all have the same currency and that the amount tendered is greater than price. **price:** Number. You can assert that the units tendered match the currency for price, which is why price is just a number. **Returns** true if change can succesfully be dispensed, otherwise returns false to issue a refund and cancel the product. # ChangeDispenser Class An instance of ChangeDispenser is programmed to physically know what change it has to dispense and physically how to dispense it. Assume that ChangeDispenser is a thin JavaScript layer over native code. ### Properties For every currency unit available, the JavaScript layer dynamically defines properties that match the class name of the monetary units using Object.defineProperty. It defines the properties as read-only properties using getter methods that return new arrays. The new arrays returned from these properties are not referenced internally. For example, `var availablePennies = someChangeDispenserInstance.UnitedStatesPennyUnit;` would give you an array containing instances of UnitedStatesPennyUnit. ### Methods #### unitsAvailable(currency) Describes the types of monetary units available to dispense. **currency:** A String value for the currency, i.e. "USD". **Returns** an array of objects describing the availablity of monetary units that match the curreny passed in, sorted in descending monetaryValue: [ { propertyName: String (i.e. "UnitedStatesPennyUnit"), unitInfo: { monetaryValue: Number, currency: String, currencySymbol: String } } ] #### dispense(units) Physically dispenses change for all of the monetary unit instances that you pass in. **units:** An array of instances of some kind of MonetaryUnit subclass. **Throws** an error synchronously if any instance does not exist in its Column Properties.