End to-End CoffeeScript
Upcoming SlideShare
Loading in...5

End to-End CoffeeScript



Talk at RailsConf 2011 by Trevor Burnham about running CoffeeScript code on both the front and back ends of a Rails 3.1 app.

Talk at RailsConf 2011 by Trevor Burnham about running CoffeeScript code on both the front and back ends of a Rails 3.1 app.



Total Views
Views on SlideShare
Embed Views



2 Embeds 2

http://www.slideshare.net 1
http://a0.twimg.com 1



Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

End to-End CoffeeScript End to-End CoffeeScript Presentation Transcript

  • End-to-End CoffeeScript CoffeeScript
    • Presented by Trevor Burnham
    • at RailsConf/BohConf 2011
  • Part I CoffeeScript!?!? CoffeeScript!?!?
  • What is CoffeeScript?
  • Do you have to use it?
  • But seriously...
  • Things I’ll cover today:
    • A brief primer on the CoffeeScript language
    • How it works with the Rails 3.1 asset pipeline
    • Running the same JS/CS code on both the client and the server
  • And things I won’t:
    • The CoffeeScript language in depth (that would take a whole book... available at http://coffeescript-book.com )
    • Sprockets 2 ( #= require foo )
    • jQuery UJS ( $.rails )
  • CoffeeScript crash course
    • “ Dash rocket” instead of function
    • Semantic whitespace instead of {}
    • Implicit parentheses, implicit var scoping
  • Awesome goodies for Rubyists
    • Postfix if/unless
    • Implicit return s
    • String interpolations
  • Things that feel weird to Rubyists
    • Parentheses are not optional on functions with no arguments
    • It’s just JavaScript™
  • Things that feel weird to JavaScripters
    • CoffeeScript’s of is JavaScript’s in
    • CoffeeScript’s in is Python’s in
    • CoffeeScript’s == is JavaScript’s ===
  • Tradeoffs
    • Debugging (will get better, but currently kind of a pain)
    • Changing versions (though it’s been pretty stable for the last 5 months)
    • Less documentation (but there is a book from PragProg...)
  • Even so!
    • After only a week of using CoffeeScript, I felt more productive than I ever had in JavaScript.
    • The community is awesome.
    • Learning CoffeeScript might make you think more deeply about JavaScript.
  • Part II CoffeeScript in Rails 3.1 CoffeeScript in Rails 3.1
  • Let’s make a Rails app!
    • rails new EndToEnd
    • cd EndToEnd
    • rails generate controller User signup
    • Clone the repo if you want to follow along... http://github.com/TrevorBurnham/EndToEnd )
  • JavaScripts are assets
    • New in Rails 3.1, generate controller gives us a CoffeeScript file automatically:
  • Compound extensions
    • .html.erb & .html.haml -> HTML
    • .css.scss & .css.sass -> CSS
    • .js.coffee -> JavaScript
    • Want to use a different format? Just rename! application.js -> application.js.coffee
  • Compound extensions
    • Stylesheets and JavaScripts are automatically concatenated by Sprockets 2, even in development:
    • All the CSS and JS is loaded on every page, so it’s still up to you to isolate controller-specific functionality.
  • Building a sign-up box
  • Adding JS validations
  • Great, but...
    • Client-side validations are just there to provide a friendlier user experience. What really matters are server-side validations.
    • Traditionally, we’d do this by using ActiveRecord, repeating much of the work we just did...
    • But there’s another way!
  • Server-side JavaScript! (And CoffeeScript)
    • If you’ve got coffee-script in your Gemfile, then you’ve already got ExecJS: https://github.com/sstephenson/execjs
    • It uses the best available JS environment on your system. Use therubyracer (or therubyracer-heroku ) for maximum portability.
  • No need to rewrite the same validation code!
    • ExecJS lets us turn our CoffeeScript validation script into a Ruby object:
  • A small taste of what’s to come what’s to come
    • Future plugins will make the server-side JS process smoother in Rails
    • With jsdom, you can do practically anything that you could do with client-side JS (including manipulating HTML with jQuery!)
    • Validation, templating... anything you’re duplicating can be done as end-to-end JS.
  • How can you become a CoffeeScript ninja?
    • Official site, great overview: http://coffeescript.org
    • Nice screencast: http://peepcode.com/products/coffeescript
    • Totally unbiased book recommendation: http://coffeescript-book.com
  • Thanks
    • Questions? [email_address]