SlideShare a Scribd company logo
Rails Bootcamp


Philly.rb     PhillyTechWeek
Mat Schaffer
 mat@mashion.net
   @matschaffer
  matschaffer.com
PTW Rails Bootcamp
• Chapter 1: Overview and Installation
• Chapter 2: Data and Views
• Chapter 3: User Stories and Testing
• Chapter 4: Hack time
Chapter 1: Overview

• Why Rails?
• Rails overview
• Dealing with Data
• Live Console and Testing
Why Rails?
Rails Overview
• Developed for BaseCamp by 37 signals
• DSL for web applications
Controller
Controller
Controller




Model
Controller




Model
Controller




Model                View
Controller




Model                View
Convention over
 Configuration
GET /comments

CommentsController#index

 views/comments/index.html.erb
GET /comments/4

CommentsController#show

views/comments/show.html.erb
GET /comments/4.js

CommentsController#show

views/comments/show.js.erb
Data
More Convention over
   Configuration
Super simple
•C   reate


•R   etreive


•U   pdate


•D   elete
Comment.create(:author => "mat")




INSERT INTO comments
(author) VALUES('mat');
Comment.find_by_author("mat")




SELECT * FROM comments
WHERE author = 'mat';
c = Comment.find(1)
c.update_attribute(:author, "mat")




SELECT * FROM comments WHERE id = 1;
UPDATE comments SET author = 'mat' WHERE
id = 1;
c = Comment.find(1)
c.destroy




SELECT * FROM comments WHERE id = 1;
DELETE FROM comments WHERE id = 1;
more data hotness


• Schema management
• Works the same across databases
rails console


• Try out code live
• Inspect your data using code
testing


• Built into rails
• Strong testing culture built into ruby
services

github.com
heroku.com
engineyard.com
RailsHotline.com
Installation
• Mac needs XCode first
  http://developer.apple.com/xcode/


• Linux or Mac, use RVM bootstrap
  http://bit.ly/unixrails


• Windows
  http://railsinstaller.org


• Ubuntu on VirtualBox is fun too
Test your install
rails new kickballapp
cd kickballapp
bundle
rails server
(open a browser to http://localhost:3000)
PTW Rails Bootcamp
Our project:
A League Manager
Chapter 2:

  Data

  Views
Data
class Team


• name
• (id, created_at, updated_at)
class Location

• name
• address
• (id, created_at, updated_at)
class Game
• starts_at
• ends_at
• location
• home_team
• away_team
• (id, created_at, updated_at)
class Game
• starts_at
• ends_at                  class Location
• location
• home_team
• away_team
• (id, created_at, updated_at)
class Game
• starts_at
• ends_at                  class Location
• location
• home_team                       class Team
• away_team
• (id, created_at, updated_at)
CODE!
http://bit.ly/railsbc-code
Database Migrations

• live in db/migrate
• ordered
• Abstracted SQL column types
• includes id and timestamps by default
MORE CODE!
RESTful Routes

• GET /locations (show all locations)
• GET /locations/3 (show one location)
• POST /locations (make a location)
• PUT /locations/3 (update one location)
Can also be nested


• GET /locations/3/games (show games for
  one location)
‘public’ folder

• For all static files
• Rails looks here first
• Offers caching options
Views
ERB

• Like JSP/ASP/PHP but in ruby
• lots of helper functions for forms, etc.
• layout → view → partials
VIEW CODE!
ActiveRecord
        Associations

• 1 to 1 (belongs_to - has_one)
• 1 to many (belongs_to - has_many)
• many to many (has_many :through)
Other points


• Controllers
Chapter 3:

User Stories

  Testing
User Stories
(pivotal tracker)
In order to [value]

As a [actor]

I want [feature]
Players feature?
In order to know who is on a team

As a league manager

I want to see a list of players on
the team page
Feature: Player listings
  In order to know who is on a team
  As a league manager
  I want to see a list of players on the team page

  Scenario: listing on a team page
    Given I am on the teams page
    When I follow "Ballshevicks"
    Then I should see "Trotter"
Cucumber
Feature: Player listings
  In order to know who is on a team
  As a league manager
  I want to see a list of players on the team page

  Scenario: listing on a team page
    Given I am on the teams page
    When I follow "Ballshevicks"
    Then I should see "Trotter"
User Stories
as Integration Tests
Setting up Cucumber
1. Add `group :development, :test` to Gemfile
2. Add ‘cucumber-rails’, ‘capybara’ and
   ‘database_cleaner’ in that group
3. Run `bundle`
4. Run `rails generate cucumber:install`
5. `$EDITOR features/players.feature`
undefined local variable or method `node' for
  #<Capybara::Driver::RackTest::Node:...>
               (NameError)

    • Comment out line 18 in features/
      support/env.rb


    • cucumber-rails 0.4.0 fixes this, but it’s still in
      beta
CODE
(setting it up)
Running a scenario


1. Put `@wip` above the scenario
2. Run `rake cucumber:wip`
CODE
(running it)
Debugging

`Then show me the page`
requires ‘launchy’ gem

`Then debug` (debugger;1)
requires ‘ruby-debug’ or ‘ruby-debug19’
CODE
(debugging it)
Building data
`$EDITOR features/support/fixtures.rb`

Before do
  Team.create(:name => "Ballshevicks")
end
• Any features/support/*.rb gets loaded

• `Before` gets run before each Scenario
Other Data Options


• Load test/fixtures/*.yml
• Use the ‘fabrication’ object factory gem
CODE
(giving it data)
Defining Steps
          When I follow "Show" in the row with "Ballshevicks"




When /^I follow "([^"]*)" in the row with "([^"]*)"$/ do |link, text|

  When %Q|I follow "#{link}" within "tr:contains('#{text}')"|

end
               features/step_definitions/table_steps.rb
Defining Steps
          When I follow "Show" in the row with "Ballshevicks"



 Regular Expression


When /^I follow "([^"]*)" in the row with "([^"]*)"$/ do |link, text|

  When %Q|I follow "#{link}" within "tr:contains('#{text}')"|

end
               features/step_definitions/table_steps.rb
Defining Steps
          When I follow "Show" in the row with "Ballshevicks"



 Regular Expression
                             Capturing groups

When /^I follow "([^"]*)" in the row with "([^"]*)"$/ do |link, text|

  When %Q|I follow "#{link}" within "tr:contains('#{text}')"|

end
               features/step_definitions/table_steps.rb
Defining Steps
          When I follow "Show" in the row with "Ballshevicks"



 Regular Expression
                             Capturing groups

When /^I follow "([^"]*)" in the row with "([^"]*)"$/ do |link, text|

  When %Q|I follow "#{link}" within "tr:contains('#{text}')"|

end
               features/step_definitions/table_steps.rb

               Definition in ruby code
web_steps.rb
Given I am on the (rake routes) page
When I press “button” / follow “link”
When I fill in “field” with “value”
When I select “option” from “field”
When I check “field”
Then I should see “text” (within “section”)
CODE
(assigning teams?)
Unit testing
Use for direct testing of

• Models (test/unit/*.rb)
• Helpers (test/unit/helpers/*.rb)
• Controllers (test/functional/*.rb)
Example:
          Player#last_name
class PlayerTest < ActiveSupport::TestCase
  test "parses out last name" do
    trotter = Player.new(:name => "Trotter Cashion")
    assert_equal "Cashion", trotter.last_name
  end
end


               (Test First! At least try.)
CODE
(run and fix it)
Chapter 4:


  Do it!

More Related Content

KEY
UPenn on Rails pt 2
PDF
Intro to Rails
KEY
Wider than rails
PDF
Mini Rails Framework
PDF
Rails 4.0
PDF
Ansible roles done right
PDF
Stackup New Languages Talk: Ember is for Everybody
PDF
Building an API with Django and Django REST Framework
UPenn on Rails pt 2
Intro to Rails
Wider than rails
Mini Rails Framework
Rails 4.0
Ansible roles done right
Stackup New Languages Talk: Ember is for Everybody
Building an API with Django and Django REST Framework

What's hot (20)

KEY
PDF
Building web framework with Rack
PDF
Generators
PDF
OpenERP and Perl
PDF
A tour of Ansible
PPTX
Puppet camp chicago-automated_testing2
PDF
AnsibleFest 2014 - Role Tips and Tricks
PDF
Getting started with Ansible
PDF
Taking Apache Camel For A Ride
PDF
V2 and beyond
PDF
Go Web Development
PDF
Django REST Framework
PDF
Web development automatisation for fun and profit (Artem Daniliants)
PDF
More tips n tricks
PPTX
Using WordPress as your application stack
ODP
Aura Project for PHP
PDF
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
PDF
Power of Puppet 4
PDF
Ansible leveraging 2.0
PDF
Spring into rails
Building web framework with Rack
Generators
OpenERP and Perl
A tour of Ansible
Puppet camp chicago-automated_testing2
AnsibleFest 2014 - Role Tips and Tricks
Getting started with Ansible
Taking Apache Camel For A Ride
V2 and beyond
Go Web Development
Django REST Framework
Web development automatisation for fun and profit (Artem Daniliants)
More tips n tricks
Using WordPress as your application stack
Aura Project for PHP
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Power of Puppet 4
Ansible leveraging 2.0
Spring into rails
Ad

Viewers also liked (11)

PDF
Ruby on the Phone
KEY
Node.js
KEY
wwc start-launched
KEY
2011 02-08 cucumber
PDF
chef loves windows
ODP
Sfd2012Hanoi Nguyễn Hà Dương - Introduction to Node.js
PPTX
Hands On Intro to Node.js
PDF
Knockout vs. angular
PPT
Hadoop a Natural Choice for Data Intensive Log Processing
PPTX
JS Frameworks - Angular Vs Backbone
PDF
Introduction to AngularJS
Ruby on the Phone
Node.js
wwc start-launched
2011 02-08 cucumber
chef loves windows
Sfd2012Hanoi Nguyễn Hà Dương - Introduction to Node.js
Hands On Intro to Node.js
Knockout vs. angular
Hadoop a Natural Choice for Data Intensive Log Processing
JS Frameworks - Angular Vs Backbone
Introduction to AngularJS
Ad

Similar to PTW Rails Bootcamp (20)

KEY
UPenn on Rails pt 1
KEY
UPenn on Rails intro
PDF
Lecture #5 Introduction to rails
PDF
Introduction to Rails by Evgeniy Hinyuk
PPTX
Intro to Ruby on Rails
PDF
RubyOnRails-Cheatsheet-BlaineKendall
PDF
RubyOnRails-Cheatsheet-BlaineKendall
PDF
Rails - getting started
PDF
Ruby on Rails 3.1: Let's bring the fun back into web programing
PPTX
Learning to code for startup mvp session 3
PDF
Introduction to Rails - presented by Arman Ortega
PDF
Agile Web Development With Rails Third Edition Third Ruby Sam
PDF
Migrating Legacy Rails Apps to Rails 3
PDF
Ruby on Rails Presentation
PPTX
Ruby On Rails Intro
PDF
Rails 3 : Cool New Things
PDF
Ruby on Rails - Introduction
PPTX
12 Introduction to Rails
PDF
Learning Rails 3 Rails from the Outside In 1st Edition Simon St. Laurent
PPTX
Code for Startup MVP (Ruby on Rails) Session 2
UPenn on Rails pt 1
UPenn on Rails intro
Lecture #5 Introduction to rails
Introduction to Rails by Evgeniy Hinyuk
Intro to Ruby on Rails
RubyOnRails-Cheatsheet-BlaineKendall
RubyOnRails-Cheatsheet-BlaineKendall
Rails - getting started
Ruby on Rails 3.1: Let's bring the fun back into web programing
Learning to code for startup mvp session 3
Introduction to Rails - presented by Arman Ortega
Agile Web Development With Rails Third Edition Third Ruby Sam
Migrating Legacy Rails Apps to Rails 3
Ruby on Rails Presentation
Ruby On Rails Intro
Rails 3 : Cool New Things
Ruby on Rails - Introduction
12 Introduction to Rails
Learning Rails 3 Rails from the Outside In 1st Edition Simon St. Laurent
Code for Startup MVP (Ruby on Rails) Session 2

PTW Rails Bootcamp

Editor's Notes