PTW Rails Bootcamp

781 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
781
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

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
  • PTW Rails Bootcamp

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

    ×