PTW Rails Bootcamp

  • 526 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
526
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
6
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • What are you interested/concerned about?\n- jobs\n- community involvement\n- notoriety\n- easy\n- fun\n
  • - Cake PHP, Symphony?\n- Spring Roo, MVC?\n- Django?\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Or no database. Use sqlite to get even your designers up and running quickly.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. Rails BootcampPhilly.rb PhillyTechWeek
  • 2. Mat Schaffer mat@mashion.net @matschaffer matschaffer.com
  • 3. • Chapter 1: Overview and Installation• Chapter 2: Data and Views• Chapter 3: User Stories and Testing• Chapter 4: Hack time
  • 4. Chapter 1: Overview• Why Rails?• Rails overview• Dealing with Data• Live Console and Testing
  • 5. Why Rails?
  • 6. Rails Overview
  • 7. • Developed for BaseCamp by 37 signals• DSL for web applications
  • 8. Controller
  • 9. Controller
  • 10. ControllerModel
  • 11. ControllerModel
  • 12. ControllerModel View
  • 13. ControllerModel View
  • 14. Convention over Configuration
  • 15. GET /commentsCommentsController#index views/comments/index.html.erb
  • 16. GET /comments/4CommentsController#showviews/comments/show.html.erb
  • 17. GET /comments/4.jsCommentsController#showviews/comments/show.js.erb
  • 18. Data
  • 19. More Convention over Configuration
  • 20. Super simple•C reate•R etreive•U pdate•D elete
  • 21. Comment.create(:author => "mat")INSERT INTO comments(author) VALUES(mat);
  • 22. Comment.find_by_author("mat")SELECT * FROM commentsWHERE author = mat;
  • 23. c = Comment.find(1)c.update_attribute(:author, "mat")SELECT * FROM comments WHERE id = 1;UPDATE comments SET author = mat WHEREid = 1;
  • 24. c = Comment.find(1)c.destroySELECT * FROM comments WHERE id = 1;DELETE FROM comments WHERE id = 1;
  • 25. more data hotness• Schema management• Works the same across databases
  • 26. rails console• Try out code live• Inspect your data using code
  • 27. testing• Built into rails• Strong testing culture built into ruby
  • 28. servicesgithub.comheroku.comengineyard.comRailsHotline.com
  • 29. Installation
  • 30. • 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
  • 31. Test your installrails new kickballappcd kickballappbundlerails server(open a browser to http://localhost:3000)
  • 32. Our project:A League Manager
  • 33. Chapter 2: Data Views
  • 34. Data
  • 35. class Team• name• (id, created_at, updated_at)
  • 36. class Location• name• address• (id, created_at, updated_at)
  • 37. class Game• starts_at• ends_at• location• home_team• away_team• (id, created_at, updated_at)
  • 38. class Game• starts_at• ends_at class Location• location• home_team• away_team• (id, created_at, updated_at)
  • 39. class Game• starts_at• ends_at class Location• location• home_team class Team• away_team• (id, created_at, updated_at)
  • 40. CODE!http://bit.ly/railsbc-code
  • 41. Database Migrations• live in db/migrate• ordered• Abstracted SQL column types• includes id and timestamps by default
  • 42. MORE CODE!
  • 43. RESTful Routes• GET /locations (show all locations)• GET /locations/3 (show one location)• POST /locations (make a location)• PUT /locations/3 (update one location)
  • 44. Can also be nested• GET /locations/3/games (show games for one location)
  • 45. ‘public’ folder• For all static files• Rails looks here first• Offers caching options
  • 46. Views
  • 47. ERB• Like JSP/ASP/PHP but in ruby• lots of helper functions for forms, etc.• layout → view → partials
  • 48. VIEW CODE!
  • 49. ActiveRecord Associations• 1 to 1 (belongs_to - has_one)• 1 to many (belongs_to - has_many)• many to many (has_many :through)
  • 50. Other points• Controllers
  • 51. Chapter 3:User Stories Testing
  • 52. User Stories
  • 53. (pivotal tracker)
  • 54. In order to [value]As a [actor]I want [feature]
  • 55. Players feature?
  • 56. In order to know who is on a teamAs a league managerI want to see a list of players onthe team page
  • 57. 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"
  • 58. CucumberFeature: 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"
  • 59. User Storiesas Integration Tests
  • 60. Setting up Cucumber1. Add `group :development, :test` to Gemfile2. Add ‘cucumber-rails’, ‘capybara’ and ‘database_cleaner’ in that group3. Run `bundle`4. Run `rails generate cucumber:install`5. `$EDITOR features/players.feature`
  • 61. 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
  • 62. CODE(setting it up)
  • 63. Running a scenario1. Put `@wip` above the scenario2. Run `rake cucumber:wip`
  • 64. CODE(running it)
  • 65. Debugging`Then show me the page`requires ‘launchy’ gem`Then debug` (debugger;1)requires ‘ruby-debug’ or ‘ruby-debug19’
  • 66. CODE(debugging it)
  • 67. Building data
  • 68. `$EDITOR features/support/fixtures.rb`Before do  Team.create(:name => "Ballshevicks")end
  • 69. • Any features/support/*.rb gets loaded• `Before` gets run before each Scenario
  • 70. Other Data Options• Load test/fixtures/*.yml• Use the ‘fabrication’ object factory gem
  • 71. CODE(giving it data)
  • 72. 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
  • 73. Defining Steps When I follow "Show" in the row with "Ballshevicks" Regular ExpressionWhen /^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
  • 74. Defining Steps When I follow "Show" in the row with "Ballshevicks" Regular Expression Capturing groupsWhen /^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
  • 75. Defining Steps When I follow "Show" in the row with "Ballshevicks" Regular Expression Capturing groupsWhen /^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
  • 76. web_steps.rbGiven I am on the (rake routes) pageWhen 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”)
  • 77. CODE(assigning teams?)
  • 78. Unit testing
  • 79. Use for direct testing of• Models (test/unit/*.rb)• Helpers (test/unit/helpers/*.rb)• Controllers (test/functional/*.rb)
  • 80. Example: Player#last_nameclass PlayerTest < ActiveSupport::TestCase  test "parses out last name" do    trotter = Player.new(:name => "Trotter Cashion")    assert_equal "Cashion", trotter.last_name  endend (Test First! At least try.)
  • 81. CODE(run and fix it)
  • 82. Chapter 4: Do it!