An object-driven programming framework, that uses behaviour-driven objects for building use cases.
OBJY Objects:
- are plain JavaScript objects
- have dynamic origins
- have behaviour
- and more...
Node
npm install objy
Browser
<script src="https://cdn.jsdelivr.net/npm/objy/dist/browser.js">
Programming on OBJY is done in two simple steps:
- Define an object family (a bucket of objects)
- Build and handle objects and tell them what to do.
// 1. Define Object Family
OBJY.define({
name: "object", // singular constructor name
pluralName: "objects" // plural constructor name
})
// 2. Use objects
OBJY.object({
expired: false,
expiration_date: {
date: "12/31/2022",
action: () => {
obj.setProperty('expired', true).update();
}
},
maintenance: {
interval: "1PY",
action: () => {
console.log('annually maintenence');
}
}
})
Objects are handled using an OBJY wrapper: OBJY.object().
// Create an object (onCreate handlers will trigger)
var myObj = OBJY.object({
name: "Hello"
}).add();
// Update an object (onChange handlers will trigger)
myObj.name = "Hello World";
// or use the built-in methods:
myObj.addProperty('color', 'blue');
// Delete an object (onDelete handlers will trigger)
myObj.remove();
Events can either have a date or an interval. OBJY takes care of running the associated action.
OBJY.object({
...
expiration_date: {
date: "12/31/2022",
action: () => {
obj.setProperty('expired', true).update();
}
},
maintenance: {
interval: "1PY",
action: () => {
console.log('annually maintenence');
}
}
})
Use onCreate, onChange or onDelete to capture these events and OBJY runs a custom action.
OBJY.object({
...
onDelete: {
quit: {
action: () => {
console.log('Im now gone...')
}}
}
})
// first object
OBJY.object({
_id: 123,
type: "yogurt"
})
// second object that inherits from first object
// inherit from one or more other objects using their id
OBJY.object({
...
inherits: [123],
// type: "yogurt" and all other props are present here
})
Every object you create lives inside the OBJY instance. For accessing and working with all your objects, OBJY offers the following built-in query API:
// Query all active objects
OBJY.objects({json query}).get(objects => {
console.log(objects) // an array containing the matched objects
})
OBJY.define({
...
// Attach your own storage (can be anything that supports crud)
storage: OBJY.customStorage({
add: () => {},
getById: () => {},
...
}),
// Customize, how actions are executed
processor: OBJY.customProcessor({
execute: (action) => {},
...
}),
// Observe events yourself
observer: OBJY.customObserver({
run: () => {}
})
})