<commit_before>
= Express

Insanely fast (and small) server-side JavaScript web development framework
built on node.js and the V8 JavaScript engine.

* Stay tuned, coming soon :)

== Features (so far)

* Sexy DSL
* Mime helpers
* Nested parameter parsing (user[name]=tj == { user : { name : 'tj' }})
* Full test coverage
* Cookie support
* Non polluting (so you can use it with your fav JavaScript libraries :) )
* Routing
  * string matching
  * regexp with captures
  * param key substitution
  * pre-conditions
  * etc

== Coming Soon

* View templating system
* Jack integration

== Examples

  // GET /user/tj/edit
  
  get('user/:name/:operation', function(){
    param('operation') + 'ing ' + param('name')
  })

  // GET /articles
  
  get('articles', function(){
    'list of articles'
  })

  // GET /articles/12
  
  get(/articles\/(\d+)/, function(){
    'article id ' + captures[1]
  })
  
  // POST /user/:id
  
  post('user/:id', function(){
    User.destroy(params('id')) ? 
      'User deleted' :
        'Failed to delete user'
  })

== License 

(The MIT License)

Copyright (c) 2009 <NAME> <<EMAIL>>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,<commit_msg>header() example<commit_after>
= Express

Insanely fast (and small) server-side JavaScript web development framework
built on node.js and the V8 JavaScript engine.

* Stay tuned, coming soon :)

== Features (so far)

* Sexy DSL
* Mime helpers
* Nested parameter parsing (user[name]=tj == { user : { name : 'tj' }})
* Full test coverage
* Cookie support
* Non polluting (so you can use it with your fav JavaScript libraries :) )
* Routing
  * string matching
  * regexp with captures
  * param key substitution
  * pre-conditions
  * etc

== Coming Soon

* View templating system
* Jack integration

== Examples

  // GET /user/tj/edit
  
  get('user/:name/:operation', function(){
    param('operation') + 'ing ' + param('name')
  })

  // GET /articles
  
  get('articles', function(){
    'list of articles'
  })

  // GET /articles/12
  
  get(/articles\/(\d+)/, function(){
    'article id ' + captures[1]
  })
  
  // POST /user/:id
  
  post('user/:id', function(){
    User.destroy(params('id')) ? 
      'User deleted' :
        'Failed to delete user'
  })
  
== Setting Headers

  get ('foo', function(){
    header('Content-Type', 'text/html')
    '<p>bar</p>'
  })

== License 

(The MIT License)

Copyright (c) 2009 <NAME> <<EMAIL>>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
{'fraction_non_alphanumeric': 0.13125428375599726, 'fraction_numerical': 0.0054832076764907475, 'mean_word_length': 3.337295690936107, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 11, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5776431', 'n_tokens_mistral': 922, 'n_tokens_neox': 879, 'n_words': 316}