Ruby on Rails Web development that doesn’t hurt By Mylore, Dung, Lee, Karen and Bryan
Overview • Ruby on Rails • Ruby language • MVC design pattern • AJAX on Rails • Ruby on Rails in action
Ruby on Rails • Framework written in the Ruby programming language for database-backed web applications • Utilizes MVC design pattern • Created by David Heinemeier Hansson in mid 2003 and released in 2004 • Developed to create the Basecamp project management web application
Philosophy • Convention over configuration • Almost no configuration files • Helper scripts to get started • Conformity through freebies • Magic wiring relies on common structures due to conventions of Ruby on Rails • Best practices by invitation • Auto-generated unit and integration testing
Built-in Functions • Helper scripts • Create directory hierarchy and skeleton code • Create model, view and controller objects • Set up database connectivity • ActiveRecord • Dynamic method generation • Built-in WEBrick web server
Ruby • Object Oriented Scripting Language • Interpreted • Open Source • Fully OO that simulates procedurals • Publicly released in 1995 • New but well documented • Based loosely of Eiffel and Ada but heavily influenced by other languages like Perl, Python, Java/JavaScript, etc.
Reflective Language • Ruby incorporates many beneficial features of other languages • Flexible programming (Perl) • Built in regex (Perl) • Error and Exception Handling (Python, Java) • Mark and Sweep Garbage Collector (Java) • No variable declaration (Perl, PHP, etc) • Embedded doc tools, RDoc (Java) • No Semicolon ‘;’ ! (Python) • And many others
Highlights: Open Classes • Every class, including the core classes can be modified at any time. • You just need to call Class class_name #modification code End • Example: #modding floats to output in currency class Float def to_m sprintf("$%.2f", self) end end
Highlights: Embedded Strings • In Perl and PHP you can embed variables into strings. In Ruby you can embed whole blocks of code into string. • Just need to put it between #{ } • Example: #print out the prices in currency format from an #array without the need to put it back into a #variable p = [1.25, 2.00, 3.15] print “Lily: #{p[0].to_m} Rose: #{p[1].to_m} Viola: #{p[2].to_m}”
Highlights: RHTML • Ruby can be directly embedded into HTML much like the way PHP does • Example: <b>Names of all the people</b> <% for person in @people %> Name: <%= person.name %><br/> <% end %>
Future of Ruby • Ruby is easy to learn, simple to understand and friendly to write in • It has become quite popular and gained a large following since its release • Ruby’s library is expanding rapidly with many modules currently being written for it. And with the soon to be release version 1.9 • It’s free!
Rails and the MVC Pattern • MVC in PHP/Perl/JSP is hard • Can be done, but requires a lot of work to create a framework to enforce the MVC pattern. • Java (Struts), Perl (Maypole), and for PHP have their own frameworks, but they are not integrated deeply in their respective languages.
Rails and the MVC Pattern • RoR integrates and enforces MVC in its framework. • Scalability and maintainability. • This significantly reduces the amount of repeated code.
Model • The Model in RoR wraps to represent the RDBMS tables used for a site. • Minimal amount of configuration • Based on the Active Record pattern.
View • Uses embedded ruby code in .rhtml files. Similar to PHP and JSP. • <html> <head>..etc… <% Handle Ruby statements here in embedded. %> </body></html>
Controller • The controller handles the logic, and responds to user interaction and manipulates the model. • Provides CRUD (Create/Read/Update/Delete) operations on the model.
Putting it all together • RoR requires minimal configuration for implementing MVC. Once a new RoR project is created, the framework will automatically create the MVC components. Each component will map to each other with little configuration.
AJAX on Rails • Ability to incorporate AJAX (Asychronous JavaScript and XML) into Rails-driven sites • Contains the Prototype JavaScript library • Works with AJAX functions • Works with Script.aculo.us (additional functionality onto Prototype) • Contains helper functions for implementing AJAX
AJAX on Rails • No longer a complicated process to incorporate AJAX onto Rails-driven sites • Newest version of Rails contains RJS • Create JavaScript using Ruby • Reduce the amount of code needed to implement AJAX
Applications and Projects • Applications • Instiki • Web pages • DRTV Research • Penny Arcade
Applications: Instiki • Wiki-based program that focuses on ease of installation and simplicity in running • 2 step method for install • Simplistic user interface • Great for notes, brainstorming, organizing gatherings, file sharing, etc. • Used for creating and editing web pages • Used for database interaction, syntax interpretation, etc.
Web pages: DRTV Research • DRTV Research is a free online application that combines television lineup listings per week with consumer demographic data for North America. • Over 700,000 pages of data are available on DRTV Research with new data added daily.
Web pages: Penny Arcade • Penny Arcade is among the most popular web-comics currently online, hosting both a children's charity (Child’s Play) and a gaming convention (PAX) each year.
Ruby on Rails: Cons • Confined to one language: Ruby • Slight Learning Curve • Forced to one directory hierarchy • Not too popular (Though it is becoming more so recently) • Not yet industry standard • Relatively new with future stability unknown
Ruby on Rails: Pros • Open Source and free! • Built for Rapid Application Development • Less development time • Less lines of code • Easy database connectivity • MVC design pattern • Built-in functions • Minimal configuration • Well documented • AJAX made easy
Simplicity • Weblog in 15 minutes! • http://media.rubyonrails.org/video/rails_take2_with_sound.mov • Ruby search engine • http://ruby.gsmdev.com