CSC/ECE 517 Fall 2009/wiki1b team1: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
 
(22 intermediate revisions by 2 users not shown)
Line 16: Line 16:
'''''Rails API''''' - http://api.rubyonrails.org/
'''''Rails API''''' - http://api.rubyonrails.org/


This site documents Rails files, classes and methods that can be used to build a Rails application.
This site documents Rails files, classes and methods that can be used to build a Rails application. This page also spends some time describing the debugging aspect of Rails, as well as providing a breakdown of the individual components and layout of a Rails application.  




Line 22: Line 22:


A discussion forum covering all aspects of Rails for beginners and experts including planning,  
A discussion forum covering all aspects of Rails for beginners and experts including planning,  
programming, extensions and production.
programming, extensions and production. There are extensive sections on plugin and gem development as well as some interesting AJAX discussions. The most active piece is the Rails programming board.




Line 46: Line 46:
'''''Rails Projects''''' - http://www.workingwithrails.com/
'''''Rails Projects''''' - http://www.workingwithrails.com/


A Database of Rails projects, programmers and websites
A Database of Rails projects, programmers and websites. This is a full blown Rails community that is a one stop shop for all things Rails. It includes forums, examples of websites that utilize Rails, project currently in development and a wealth of sample code. One interesting piece is the Hackfest where people can contribute to Ruby on Rails.




'''''Rails plugins''''' - http://agilewebdevelopment.com/
'''''Rails plugins''''' - http://agilewebdevelopment.com/


A collection of Rails open source plugins, searchable by category or keyword.
A collection of Rails open source plugins, searchable by category or keyword. There are currently 1400+ plugins available here and features a rating system for the best plugins as rated by users.




'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails
'''''Sample Rails''''' - http://snippets.dzone.com/tag/rails


A collection of Rails code snippets.
A collection of Rails code snippets. Snippets are loaded with tags to make them easily searchable. ActiveRecord is the most utilized.




'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&n=283155
'''''Agile Rails book''''' - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&n=283155


An excellent resource for learning how to apply Agile programming concepts to Rails.
An excellent resource for learning how to apply Agile programming concepts to Rails. This book covers everything from high level Rails architecture to installing a sample application to security and advanced topics. Considerable time is spent analyzing the Rails framework.




'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf
'''''Rails cheatsheet''''' - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf


One user's list of best practices, gotchas and quirks of developing with Rails.
One user's list of best practices, gotchas and quirks of developing with Rails. The cheatsheet covers mappings, ruby commands, database manipulation and a bulk amount of work on testing and Ruby language.




'''''Rails best practices''''' - http://www.therailsway.com/
'''''Rails best practices''''' - http://www.therailsway.com/


An official best practices list for programming in Rails.
An official best practices list for programming in Rails. Among the topics of interest are delayed jobs and controller inheritance.  




'''''Advanced Rails''''' - http://webonrails.com/
'''''Advanced Rails''''' - http://webonrails.com/


A resource for the advanced Rails programmer.
A resource for the advanced Rails programmer. A Ruby programmer's view of what tasks are interesting as an educational style blog.




'''''Rails Blog''''' - http://weblog.rubyonrails.org/
'''''Rails Blog''''' - http://weblog.rubyonrails.org/


An online community of updates about current happenings with the Rails platform.
An online community of updates about current happenings with the Rails platform. Included is documentation on Rails programmer conferences.




'''''Rails Guides''''' - http://guides.rubyonrails.org/
'''''Rails Guides''''' - http://guides.rubyonrails.org/


An all in one resource for learning Rails including Howtos, security and contributing to the Rails community.
An all in one resource for learning Rails including Howtos, security and contributing to the Rails community. The guides are broken down by Model, View and Controller and includes an advanced user section.




'''''Authoring Rails plugins''''' - http://nubyonrails.com/articles/2006/05/04/the-complete-guide-to-rails-plugins-part-i
'''''Rails for the Beginner''''' - http://nubyonrails.com/


A complete guide to authoring your own Rails plugins.
A complete resource repository for new users of Rails. Links to a number of articles, as well as free software, are available. There is even a link to a Rails podcast.




Line 133: Line 133:
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.
stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.


'''Model Examples'''
''Example:''
These are the equivalent of unit tests in Rails’ built in testing. Ironically
(for the traditional TDD’er) these are the only specs that we feel should actually interact
with the database. Learn more ….


'''Controller Examples'''
The following code will fail during execution.  ''Expresses some basic desired behavior''[http://rspec.info/]
These align somewhat with functional tests in rails, except
that they do not actually render views (though you can force rendering of views
if you prefer). Instead of setting expectations about what goes on a page, you
set expectations about what templates get rendered. Learn more….


'''View Examples'''
<nowiki>#</nowiki> bowling_spec.rb
This is the other half of Rails’ functional testing. View specs allow
require ‘bowling’
you to set up assigns (thanks to ZenTest). Learn more ….
  describe Bowling do
  it "should score 0 for gutter game" do
  bowling = Bowling.new
  20.times { bowling.hit(0) }
  bowling.score.should == 0
  end
end
 
 
The following code pass execution.  ''Just enough code to make it pass.''[http://rspec.info/]


'''Helper Examples'''
<nowiki>#</nowiki> bowling.rb
let you specify directly methods that live in your helpers. Learn more ….
class Bowling
  def hit(pins)
  end
  def score
    0
  end
end




Line 164: Line 172:


documentation, automated tests and development-aid - all rolled into one format.
documentation, automated tests and development-aid - all rolled into one format.
''Cucumber Example:''
Feature: Log in and out
  As an administrator
  I want to restrict access to certain portions of my site
  In order to prevent users from changing the content
  Scenario: Logging in
    Given I am not logged in as an administrator
    When I go to the administrative page
    And I fill in the fields
      | Username | admin  |
      | Password | secret |
    And I press "Log in"
    Then I should be on the administrative page
    And I should see "Log out"
  Scenario: Logging out
    ...


[http://cukes.info/]
[http://cukes.info/]
Line 170: Line 196:
frameworks.
frameworks.


'''Cucumber Example:'''
''Another Cucumber Example:''
Scenario: See all vendors
Scenario: See all vendors
     Given I am logged in as a user in the administrator role
     Given I am logged in as a user in the administrator role
Line 187: Line 213:




''Shoulda Example with Test::Unit''[http://robots.thoughtbot.com/post/159805987/speculating-with-shoulda]
class UserTest < ActiveRecord::TestCase
  should_belong_to :account
  should_have_many :posts
  should_validate_presence_of :email
  should_allow_values_for :email, "test@example.com"
  should_not_allow_values_for :email, "test"
end


== BDD: Behavior Driven Development ==
== BDD: Behavior Driven Development ==

Latest revision as of 01:10, 29 September 2009

CSC/ECE 517 Fall 2009

Resources for Rails (other than IDEs)

IDEs are a valuable resource for Rails development, however there are many other resources and tools that can either replace or supplement IDEs.


Resources for Rails other than IDEs


Rails API - http://api.rubyonrails.org/

This site documents Rails files, classes and methods that can be used to build a Rails application. This page also spends some time describing the debugging aspect of Rails, as well as providing a breakdown of the individual components and layout of a Rails application.


Rails Forum - http://railsforum.com/

A discussion forum covering all aspects of Rails for beginners and experts including planning, programming, extensions and production. There are extensive sections on plugin and gem development as well as some interesting AJAX discussions. The most active piece is the Rails programming board.


Introducing Ruby on Rails

Part 1 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-042507/

Part 2 http://www.softwaredeveloper.com/features/intro-to-ruby-on-rails-part-two-043007/

An excellent introduction to Rails for novices


Installers

Windows: InstantRails - http://instantrails.rubyforge.org/wiki/wiki.pl

An all in one, single click installer for Windows that includes a Rails server.

Mac: Locomotive - http://locomotive.raaum.org/


Rails Projects - http://www.workingwithrails.com/

A Database of Rails projects, programmers and websites. This is a full blown Rails community that is a one stop shop for all things Rails. It includes forums, examples of websites that utilize Rails, project currently in development and a wealth of sample code. One interesting piece is the Hackfest where people can contribute to Ruby on Rails.


Rails plugins - http://agilewebdevelopment.com/

A collection of Rails open source plugins, searchable by category or keyword. There are currently 1400+ plugins available here and features a rating system for the best plugins as rated by users.


Sample Rails - http://snippets.dzone.com/tag/rails

A collection of Rails code snippets. Snippets are loaded with tags to make them easily searchable. ActiveRecord is the most utilized.


Agile Rails book - http://www.amazon.com/gp/product/097669400X/002-0481267-8083260?v=glance&n=283155

An excellent resource for learning how to apply Agile programming concepts to Rails. This book covers everything from high level Rails architecture to installing a sample application to security and advanced topics. Considerable time is spent analyzing the Rails framework.


Rails cheatsheet - http://www.blainekendall.com/uploads/RubyOnRails-Cheatsheet-BlaineKendall.pdf

One user's list of best practices, gotchas and quirks of developing with Rails. The cheatsheet covers mappings, ruby commands, database manipulation and a bulk amount of work on testing and Ruby language.


Rails best practices - http://www.therailsway.com/

An official best practices list for programming in Rails. Among the topics of interest are delayed jobs and controller inheritance.


Advanced Rails - http://webonrails.com/

A resource for the advanced Rails programmer. A Ruby programmer's view of what tasks are interesting as an educational style blog.


Rails Blog - http://weblog.rubyonrails.org/

An online community of updates about current happenings with the Rails platform. Included is documentation on Rails programmer conferences.


Rails Guides - http://guides.rubyonrails.org/

An all in one resource for learning Rails including Howtos, security and contributing to the Rails community. The guides are broken down by Model, View and Controller and includes an advanced user section.


Rails for the Beginner - http://nubyonrails.com/

A complete resource repository for new users of Rails. Links to a number of articles, as well as free software, are available. There is even a link to a Rails podcast.


Tools for Rails (other than IDEs)

Test Unit The Rails stack uses Test::Unit, known as the default Ruby unit testing framework shipping with Ruby. There are various plugins and extension that could be used with Rails built-in Test::Unit to extend its functionality for support of TDD and BDD testing practices.

[1] The link provides additional information in the form of supporting resources, whitepapers, examples, and plug-in documentation

Example [2]

Image:class CalculatorTest < Test::Unit::TestCase 
 def test_add_two_numbers_for_the_sum 
   calculator = Calculator.new 
   assert_equal 4, calculator.sum(2, 2)
 end 
end

TDD: Test Driven Development

Test Driven Development is a combination of refactoring and test first development, a form of development where the test is

written prior to completed production code. The goal of TDD is the specification of requirements and not the validation of

requirements. There are a few testing frameworks that are used to implement the TDD programming technique.

[3] This link provides a comprehensive overview of test driven development practices and available resources for implementation.


RSpec RSpec is a testing framework for Behavior Driven Development, complete with its own expectations, matchers and mocking and

stubbing facilities. It goes along hand in hand with Cucumber, though it plays nicely with many other testing frameworks as well.

Example:

The following code will fail during execution. Expresses some basic desired behavior[4]

# bowling_spec.rb
require ‘bowling’
 describe Bowling do
  it "should score 0 for gutter game" do
  bowling = Bowling.new
  20.times { bowling.hit(0) }
  bowling.score.should == 0
 end
end


The following code pass execution. Just enough code to make it pass.[5]

# bowling.rb
class Bowling
  def hit(pins)
  end
  def score
    0
  end
end


[6] The link provides a brief overview of RSpec with a comprehensive series of examples and a conceptual view of Rpecs step by step

implementation process


Cucumber Cucumber is used with TDD and BDD within other testing frameworks such as RSpec by letting software development teams describe how

software should behave in plain text. The text is written in a business-readable domain-specific language and serves as

documentation, automated tests and development-aid - all rolled into one format.


Cucumber Example:

Feature: Log in and out
 As an administrator
 I want to restrict access to certain portions of my site
 In order to prevent users from changing the content
 Scenario: Logging in
   Given I am not logged in as an administrator
   When I go to the administrative page
   And I fill in the fields
     | Username | admin  |
     | Password | secret |
   And I press "Log in"
   Then I should be on the administrative page
   And I should see "Log out"
 Scenario: Logging out
   ...

[7] The link provides a detail decription, definition, and examples of Cucumber implementation best practices and supported

frameworks.

Another Cucumber Example: Scenario: See all vendors

   Given I am logged in as a user in the administrator role
   And There are 3 vendors
   When I go to the manage vendors page
   Then I should see the first 3 vendor names


Shoulda An extension to Test::Unit with additional helpers, macros, and assertions.

[8] The link provides a more conclusive definition of Shoulda along with installation facts and working examples of the Shoulda

testing framework within Ruby's built in Test::Unit


Shoulda Example with Test::Unit[9]

class UserTest < ActiveRecord::TestCase
 should_belong_to :account
 should_have_many :posts
 should_validate_presence_of :email
 should_allow_values_for :email, "test@example.com"
 should_not_allow_values_for :email, "test"
end

BDD: Behavior Driven Development

[10] Behavior driven development was born from the concepts behind the implementation of TDD. It brings together strands from

TestDrivenDevelopment and DomainDrivenDesign into an integrated whole, making the relationship between these two powerful

approaches to software development more evident. Most test driven development testing frameworks such as RSpec and Cucumber also support behavior driven development testing.

[11] The link supports BDDs definition with additional links to more viable behavior driven development resources.




Other Test Tool Resources

Watir: is an open-source library for automating web browsers. It allows you to write tests that are easy to read and maintain. It

is simple and flexible. [12] The link provides an overview of Watir with installation specifications, examples, and supported platforms

NullDB: [13] a way to speed up testing by avoiding database use.

Bleakhouse: memory leak detection [14] The link gives additional information on Bleakhouse profiling for memory leaks

ruby-debug: Other than the extensive use of breakpoints Rails provides little to streamline the debugging process. Ruby-debug provides Rails with a plug-in extending the functionality of Rails built in debugger.

[15] The link provides twenty additional debug resources available for RoR

Conclusion

Rails is a very comprehensive development environment for Ruby with numerous extensions, plugins, and other resources outside of IDEs to strengthen the functionality of the open source web application framework.

References

All sources used to create this wiki are linked in the above text.