CSC/ECE 517 Fall 2009/wiki1b team1: Difference between revisions
No edit summary |
|||
(8 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. | ||
''''' | '''''Rails for the Beginner''''' - http://nubyonrails.com/ | ||
A complete | 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. | ||
''Example'' | ''Example:'' | ||
The following code will fail during execution. ''Expresses some basic desired behavior''[http://rspec.info/] | The following code will fail during execution. ''Expresses some basic desired behavior''[http://rspec.info/] | ||
Line 139: | Line 139: | ||
<nowiki>#</nowiki> bowling_spec.rb | <nowiki>#</nowiki> bowling_spec.rb | ||
require ‘bowling’ | 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 | end | ||
The following code pass execution. | The following code pass execution. ''Just enough code to make it pass.''[http://rspec.info/] | ||
<nowiki>#</nowiki> bowling.rb | <nowiki>#</nowiki> bowling.rb | ||
class Bowling | class Bowling | ||
def hit(pins) | |||
end | |||
def score | |||
0 | |||
end | |||
end | end | ||
Line 190: | 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 196: | Line 196: | ||
frameworks. | frameworks. | ||
'' | ''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 211: | Line 211: | ||
testing framework within Ruby's built in Test::Unit | testing framework within Ruby's built in Test::Unit | ||
''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.