1.8.3 • Published 8 years ago

zerkel v1.8.3

Weekly downloads
69
License
-
Repository
-
Last release
8 years ago

#zerkel An adzerk-based query-ish language.

###Language Zerkel provides primitive integer and string literals, identifiers, sets, and a selection of boolean operators:

operator/typecommentexamples
integerssyntax42, -7
stringssyntax"foo", "C:\\\\Windows\\System32", "^(foo|bar)\s+"
variablessyntaxcount, _foo_bar, $location.postalCode
.property accessor$location.postalCode, foo.bar.baz
[, ]set construction[42, "foo"]
(, )expression groupingx < 100 AND (y < 50 OR z < 10)
=foo = 42
<>not equalfoo <> "bar"
=~regex matchfoo =~ "^(some|regular|expression).*$"
!~not regex matchfoo !~ "^(some|regular|expression).*$"
>foo > 42
<foo < 42
>=foo >= 42
<=foo <= 42
ANDfoo = 42 AND bar < 100
ORfoo = 42 OR bar < 100
NOTNOT (bar =~ "^foo")
LIKEwildcard matchfoo LIKE "ba*"
CONTAINSset membership / substring["foo", "bar"] CONTAINS "foo", "foobar" CONTAINS "foo"

Thus, queries may be written like:

count > 43 and (user = "bob" or user = "alice")
keywords contains "awesome"

All operators are available in upper and lowercase forms.

###Demo

Check out the live Zerkel scratchpad demo app and try some zerkel queries in your browser.

###Usage Queries can executed in coffeescript/javascript using the zerkel module, like so:

zerkel = require 'zerkel'

query = 'count > 43 and (user = "bob" or user = "alice")'
matchFn = zerkel.compile query
matchFn {count: 50, user: 'bob'} # true
matchFn {count: 12, user: 'alice'} # false
matchFn {count: 50, user: 'George Michael'} # terribly, unfortunately, false

You can also access properties on passed in objects, like so:

zerkel = require 'zerkel'

query = 'user.location = "open field west of a white house"'
matchFn = zerkel.compile query
matchFn {user: {name: 'bob', location: 'open field west of a white house'}} # true
matchFn {user: {name: 'alice', location: 'middle earth'}} # false

###Gzip Set the parser.MIN_GZIP_SIZE to a number, and if the length of the compiled JavaScript is greater than that it will be gzipped and base64 encoded, with GZ: prepended. The zerkel#makePredicate function will unzip automatically as necessary.

parser = require 'zerkel-parser'

parser.MIN_GZIP_SIZE = 50
parser.parse 'foo = 42'              # _helpers['getIn'](_env, 'foo')==42'
parser.parse '[42, 43] contains foo' # GZ:H4sIAAAAAAAAA9OINjHSMTGOVVODMvQy81JSK/zTNOIzUnMKUouKo9XTU0s889RjNeJT88p0FNTT8vPVNTUV7GwVDDQBm8CsuD8AAAA=

###Status Build Status

###License Apache 2.0

1.8.3

8 years ago

1.8.2

8 years ago

1.8.1

8 years ago

1.8.0

8 years ago

1.7.0

8 years ago

1.6.0

9 years ago

1.5.0

9 years ago

1.4.5

9 years ago

1.4.4

9 years ago

1.4.3

10 years ago

1.4.2

10 years ago

1.4.1

10 years ago

1.4.0

10 years ago

1.3.0

10 years ago

1.2.0

10 years ago

1.1.0

11 years ago

1.0.0

11 years ago