Ruby Isn’t
Just About Rails

Adam Wiggins
Codemash 2009
?
?
Ruby
You can’t sell a platform
You can’t sell a platform

    ...without a killer app.
A programming
language is a platform
is
the
killer
app Ruby
for
Came for Rails,
stayed for Ruby
An explosion of Ruby
projects in the past 2
years
Let’s take a tour!
Rails is:
ORM - ActiveRecord
Web Layer - ActionPack
Templating - ERB
Test Framework - Test::Unit
ORM
  ActiveRecord
class CreatePosts < ActiveRecord::Migration
  create_table :posts do |t|
     t.string :title
     t.text :body
     t.dat...
ORM
  ActiveRecord
  DataMapper
  Sequel
Define schema in the code
instead of the database


http://datamapper.org
class Post
  include DataMapper::Resource

  property   :id,           Serial
  property   :title,        String
  propert...
Access a database with
just hashes - or map
models

http://sequel.rubyforge.org
db = Sequel.connect('mysql://root@localhost/db')

db.create_table :posts do
  primary_key :id
  varchar :title
  text :bod...
Web Layer
   ActionPack
ActionController::Routing::Routes.draw do |map|
   map.resource :posts
end

class PostsController < ApplicationController
...
Web Layer
   ActionPack
   Merb
   Sinatra
The hacker’s framework

“No code is faster than no code”


http://merbivore.org
Merb::Router.prepare do |router|
  resource :posts
end

class Posts < Merb::Controller
  def create
    @post = Post.creat...
use_orm :datamapper
use_test :rspec
use_template_engine :erb
Merb 2.0 == Rails 3.0
Sinatra
The classy
microframework for Ruby
“Exposed simplicity instead of
hidden complexity”

http://sinatra.rubyforge.org
require 'rubygems'
require 'sinatra'
require 'lib/posts'

post '/posts'
 post = Post.create! params
 redirect quot;/posts/...
Test Framework
Unit tests
TDD
Test-Driven Development
BDD
Behavior-Driven
Development

http://behaviour-driven.org
TATFT
Test All The Darn Time
Test Framework
   Test::Unit
class PostTest < Test::Unit::TestCase

  def test_simple_slug
    post = Post.new :title => quot;First Postquot;
    asser...
RSpec
Behavior-Driven
Development


http://rspec.info
describe Post do

  it quot;generates a url slug from the titlequot; do
    post = Post.new :title => quot;First Postquot;...
$ rake spec:doc
Post
- generates a url slug from the title
- drops punctuation from the url slug
Templating Engine
   ERB
<div class=quot;postquot;>
  <h1><%= @post.title %></h1>
  <div class=quot;bodyquot;>
    <%= @post.body %>
  </div>
</div>
Templating Engine
   ERB
   Haml
Haml
Markup haiku



http://haml.hamptoncatlin.com
.post
  %h1= @post.title
  .body= @post.body
Ties it all together

http://rack.rubyforge.org
The End.


http://adam.blog.heroku.com


Adam Wiggins
Codemash 2009
Ruby Isn't Just About Rails
Ruby Isn't Just About Rails
Upcoming SlideShare
Loading in...5
×

Ruby Isn't Just About Rails

31,693

Published on

A whirlwind tour of the Rails-inspired Ruby ecosystem which has been frantically innovating for the past several years.

Published in: Technology
0 Comments
20 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
31,693
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
205
Comments
0
Likes
20
Embeds 0
No embeds

No notes for slide

Ruby Isn't Just About Rails

  1. 1. Ruby Isn’t Just About Rails Adam Wiggins Codemash 2009
  2. 2. ?
  3. 3. ? Ruby
  4. 4. You can’t sell a platform
  5. 5. You can’t sell a platform ...without a killer app.
  6. 6. A programming language is a platform
  7. 7. is the killer app Ruby for
  8. 8. Came for Rails, stayed for Ruby
  9. 9. An explosion of Ruby projects in the past 2 years
  10. 10. Let’s take a tour!
  11. 11. Rails is: ORM - ActiveRecord Web Layer - ActionPack Templating - ERB Test Framework - Test::Unit
  12. 12. ORM ActiveRecord
  13. 13. class CreatePosts < ActiveRecord::Migration create_table :posts do |t| t.string :title t.text :body t.datetime :created_at t.integer :post_id end end $ rake db:migrate class Post < ActiveRecord::Base has_many :comments end Post.find(:first, :conditions => [ quot;title = ?quot;, quot;First postquot; ])
  14. 14. ORM ActiveRecord DataMapper Sequel
  15. 15. Define schema in the code instead of the database http://datamapper.org
  16. 16. class Post include DataMapper::Resource property :id, Serial property :title, String property :body, Text property :created_at, DateTime has n, :comments end DataMapper.auto_upgrade! Post.first(:title => quot;First Postquot;)
  17. 17. Access a database with just hashes - or map models http://sequel.rubyforge.org
  18. 18. db = Sequel.connect('mysql://root@localhost/db') db.create_table :posts do primary_key :id varchar :title text :body datetime :created_at end db[:posts].filter(:title => quot;First Postquot;).first
  19. 19. Web Layer ActionPack
  20. 20. ActionController::Routing::Routes.draw do |map| map.resource :posts end class PostsController < ApplicationController def create @post = Post.create! params redirect_to(@post) end def show @post = Post.find(params[:id]) end end
  21. 21. Web Layer ActionPack Merb Sinatra
  22. 22. The hacker’s framework “No code is faster than no code” http://merbivore.org
  23. 23. Merb::Router.prepare do |router| resource :posts end class Posts < Merb::Controller def create @post = Post.create params redirect(url(:post, @post)) end def show @post = Post.find(params[:id]) display @post end end
  24. 24. use_orm :datamapper use_test :rspec use_template_engine :erb
  25. 25. Merb 2.0 == Rails 3.0
  26. 26. Sinatra The classy microframework for Ruby “Exposed simplicity instead of hidden complexity” http://sinatra.rubyforge.org
  27. 27. require 'rubygems' require 'sinatra' require 'lib/posts' post '/posts' post = Post.create! params redirect quot;/posts/#{post.id}quot; end get '/posts/:id' do @post = Post.find(params[:id]) erb :post end
  28. 28. Test Framework
  29. 29. Unit tests
  30. 30. TDD Test-Driven Development
  31. 31. BDD Behavior-Driven Development http://behaviour-driven.org
  32. 32. TATFT Test All The Darn Time
  33. 33. Test Framework Test::Unit
  34. 34. class PostTest < Test::Unit::TestCase def test_simple_slug post = Post.new :title => quot;First Postquot; assert_equal quot;first_postquot;, post.slug end def test_complex_slug post = Post.new :title => quot;My Post!quot;) assert_equal quot;my_postquot;, post.slug end end
  35. 35. RSpec Behavior-Driven Development http://rspec.info
  36. 36. describe Post do it quot;generates a url slug from the titlequot; do post = Post.new :title => quot;First Postquot; post.slug.should == quot;first_postquot; end it quot;drops punctuation from the url slugquot; do post = Post.new :title => quot;My Post!quot; post.slug.should == quot;my_postquot; end end
  37. 37. $ rake spec:doc Post - generates a url slug from the title - drops punctuation from the url slug
  38. 38. Templating Engine ERB
  39. 39. <div class=quot;postquot;> <h1><%= @post.title %></h1> <div class=quot;bodyquot;> <%= @post.body %> </div> </div>
  40. 40. Templating Engine ERB Haml
  41. 41. Haml Markup haiku http://haml.hamptoncatlin.com
  42. 42. .post %h1= @post.title .body= @post.body
  43. 43. Ties it all together http://rack.rubyforge.org
  44. 44. The End. http://adam.blog.heroku.com Adam Wiggins Codemash 2009
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×