public
Description: Conformance checking of JSON values against ECMAScript 4.0 types
Homepage:
Clone URL: git://github.com/osteele/jcon.git
osteele (author)
Thu Apr 17 19:20:44 -0700 2008
commit  58bc5234ba4449f10c0348b566dd9c5456a73787
tree    e2ab550c57c0712d106ca0a033ec0a48840b25b2
parent  a14de4ebef3481682cdfd06dbdfc98e9d4e78f0f
jcon /
name age message
file .gitignore Loading commit data...
file LICENSE
file README
file Rakefile
file TODO
directory lib/
directory spec/
README
= JCon -- JavaScript Type Conformance Checking

JCON (the "JavaScript Conformance" gem), is a companion to JSON.  It
tests JSON values against ECMAScript 4.0-style type definitions
(PDF[http://www.ecmascript.org/es4/spec/overview.pdf]), such as
<code>string?</code>, <code>(int, boolean)</code>, or <code>[string, (int, boolean), {x:double, y:double}?]</code>.

JCON also defines an RSpec matcher, <code>conforms_to_js</code>.

Use JCON together with the {JavaScript
Fu Rails plugin}[http://osteele.com/archives/2008/04/javascript-fu-rails-plugin] to test the argument values in 
generated JavaScript function calls.


== Install

  gem install rcon

== Usage

  type = JCON::parse "[string, int]"
  type.contains?(['a', 1]) # => true
  type.contains?(['a', 'b']) # => false
  type.contains?(['a', 1, 2]) # => true
  
  type = JCON::parse "type S = (string, int); {a: [S], b: int}"
  type.contains?({:a => [1, 'b'], :b => 2}) # => true

== RSpec Matcher

  [1, 'xyzzy'].should conform_to_js('[int, string]')
  [1, 2, 'xyzzy'].should_not conform_to_js('[int, string]')
  {:x => 1}.should conform_to_js('{x: int}')

Use this with the {JavaScript Fu Rails plugin}[http://osteele.com/archives/2008/04/javascript-fu-rails-plugin] to test 
JSON arguments:

  '<script>fn("id", {x:1, y:2}, true)</script>'.should call_js('fn') do |args|
    args[0].should conform_to_js('string')
    args[1].should conform_to_js('{x:int, y:int}')
    args[2].should conform_to_js('boolean')
    # or:
    args.should conform_to_js('[string, {x:int, y:int}, boolean]')
  end

== License

Copyright 2008 by {Oliver Steele}[http://workingwithrails.com/person/12359-oliver-steele].  All rights reserved.  
Released under the MIT License.