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 databasebacked 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_ta ke2_with_sound.mov • Ruby search engine – http://ruby.gsmdev.com