Commit Graph

22 Commits (aab86a47cd1e46e9930b8a80e4ed26abad660aa0)

Author SHA1 Message Date
Mike Gerwitz aab86a47cd Initial Eventable conformance test case (#on/#addListener)
These conformance test cases will be an excellent disciplinary tool,
ensuring that any implementation of Eventable conforms strictly to its
specification; this will provide developers guarantees that the
implementation will work as expected polymorphically.
2014-08-10 18:02:50 -04:00
Mike Gerwitz a2deba59ad Evented#on to throw {Error=>ReferenceError} on undefined event id 2014-08-10 14:20:41 -04:00
Mike Gerwitz 914e4eed78 Added Evented#unhookEvent for logic overide 2014-08-10 14:20:41 -04:00
Mike Gerwitz 701a49226c Evented documentation elaborating on Node.js compatibility
Some of these features will be introduced into jsTonic through additional
traits: for example, the magic `error` event that produces exceptions if
unhooked can be implemented using stackable traits or Evented trait
overrides (the former is superior and more generalized/independent).
2014-08-10 14:20:41 -04:00
Mike Gerwitz a5ac05b73d Evented Node.js EventEmitter compatibility guarantees 2014-08-10 14:20:41 -04:00
Mike Gerwitz c8bddfbaeb Eventable and Evented no longer include #hooksEvent
This is introspection, which can be provided elsewhere or by specific
implementations. Together with the documented requirement (in Eventable#on)
that listeners must be notified of automatic un-hooking, and that systems
handling listeners will always be aware of when listeners are
hooked/unhooked, this method should not be necessary.

Including this method in Eventable also introduces incompatibility with
Node.js' Event API, which is undesirable.
2014-08-10 14:20:41 -04:00
Mike Gerwitz 7fa2a296d2 Eventable interface with extensive specification 2014-08-10 14:20:41 -04:00
Mike Gerwitz bac61c3f08 Documented Evented differences from Node.js events 2014-08-10 14:20:41 -04:00
Mike Gerwitz e55288c989 Evented listener metadata now distinct per instance 2014-08-10 14:20:41 -04:00
Mike Gerwitz eeea892967 Exposed Evented#_hooksEvent as public #hooksEvent 2014-08-10 14:20:41 -04:00
Mike Gerwitz 66e3d5b1ef Prohibited duplicate listeners of the same event 2014-08-10 14:20:41 -04:00
Mike Gerwitz 875c43cee4 Added Evented#addListener as #on alias
Consistent with Node.js' event API
2014-08-10 14:20:41 -04:00
Mike Gerwitz 74ccbff716 Consistent terminology in Evented docblocks and tests 2014-08-10 14:20:41 -04:00
Mike Gerwitz a543d3f950 Formal Big O/Theta notation in docblocks for Evented trait
This annotation is my own---there is not currently a system, insofar as I
know, that uses it. I'll be further formalizing things like this as I go,
but the idea is that I wish to provide asymptotic computational complexity
for all algorithms. Usually, these will be in Big O notation, which is
used (for better or for worse) to denote the upper bound of asymptomatic
growth. I will provide as tight of estimates as I can. Where the estimates
between upper and lower bounds differ significantly, I will provide both;
where they converge strongly, I'll use Big Theta notation---denoted by a
`@Theta` annotation---except in the case of constant time, for which I will
simply stick with Big O.
2014-08-10 14:20:41 -04:00
Mike Gerwitz 981d8b923a Evented#removeListener
As a conscious TODO: need to properly handle attaching the same event
listener multiple times (define its behavior), and maybe even provide an API
to configure that behavior in some way.
2014-08-10 14:20:41 -04:00
Mike Gerwitz 7baff379ce Using ES6 features through Traceur to cut down on verbosity
It will take some getting used to (and it's a little sad to see some of the
long-standing conventions of ECMAScript vanish before my eyes), but it's
great thus far.
2014-08-10 14:20:39 -04:00
Mike Gerwitz 2942f153db Evented trait with basic functionality
This provides the core of the trait, with support for event definitions and
hooks.
2014-08-10 14:20:09 -04:00
Mike Gerwitz 0d6a2fc652 util.types added
This spawned from a refactoring for the Eventable conformance test case;
these will be useful elsewhere.
2014-08-10 14:16:02 -04:00
Mike Gerwitz ef4040e13a Now using Traceur
The primary motivation behind this was the concise function syntax, but
other features like block-level scoping, templating, and variable object
keys are quite convenient. I'm sure I'll be using others in this project as
well.

This may raise the question: isn't it odd using something that provides
class support in a library that is intended to augment GNU ease.js, which is
itself a class framework? Well, no, not really: GNU ease.js provides many
more powerful features that ES6/7 do not, which will be showcased
extensively in this library. ease.js will still work well with native
EMCAScript and interop will be adjusted as needed, but ease.js will not
become irrelevant.
2014-08-10 14:16:02 -04:00
Mike Gerwitz 3944d439ec Began test/lib.js for testing patterns 2014-08-10 14:16:02 -04:00
Mike Gerwitz 2e953526e0 Added std.Array.isArray
This provides pre-ES5 compatibility without rudely modifying the prototype
of Array.
2014-08-10 14:16:00 -04:00
Mike Gerwitz 59b4d4bfd2
Boilerplate setup for jstonic 2014-05-02 23:02:56 -04:00