RoR

quaggahooliganInternet and Web Development

Feb 5, 2013 (4 years and 8 months ago)

112 views

Ruby on Rails

Web development that doesn’t hurt

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


Created by Yukihiro Matsumoto (1993)


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)


Key word parameters *faked* (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


Must have eruby (ERb) installed


Trigger ERb with <% %>, <%
-
%>,
and <%= %> tags


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 2.0


Not to mention it is completely free


But will all this guarantee that the language won’t
become obsolete once a new language comes out?


It is left to be seen, as the language is too new, and
its support not enough to become a standard

Rails and the MVC Pattern


It is hard to develop with MVC in mind
for most web applications using
PHP/Perl/JSP.


Can be done, but requires a lot of work to
create a framework to enforce the MVC
pattern.


Although other frameworks already exist for
Java (Struts), Perl (Maypole), and for PHP,
they are not integrated deeply in their
respective languages. This is bad because
legacy systems may not be written with
MVC in mind, resulting in spaghetti code.

Rails and the MVC Pattern


RoR integrates and enforces MVC in its
framework.


Because of this most all applications
written in RoR follow the MVC design
pattern, and thus allowing for easier
scalability and maintainability.


This significantly reduces the amount of
repeated code. RoR was designed with
the
D
on’t
R
epeat
Y
ourself philosophy in
mind.

Model


The Model in RoR wraps to represent the
RDMBS tables used for a site.


A very minimal amount of configuration needs
to be done. All that needs to be configured is
to tell configure where the database is sitting
and the login information.


Once the database is mapped, each table in
the database is represented by its own class
automatically. This allows ease of access
without any further 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.


Out of the box, Rails provides the
controller with prepackaged functions to
easily perform CRUD
(Create/Read/Update/Delete)
operations on the model. No need to
rewrite the same code over and again.

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


link_to_remote()


form_remote_tag()


observer_field()

AJAX on Rails


No longer a complicated process to
incorporate AJAX onto Rails
-
driven sites


Newest version of Rails contains RJS


Integrated JavaScript templating language


Create JavaScript using Ruby


Use server
-
side variables to write JavaScript
and update elements on the fly


Reduce the amount of code needed to
implement AJAX

Applications and Projects


Applications


Instiki


TYPO


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.


Created by David Heinemeier Hansson, creator of Ruby on
Rails


Used for creating and editing web pages


RoR is the structure behind the code of Instiki


Used for database interaction, syntax interpretation, etc.


Applications: TYPO


TYPO is a free, open source (MIT License) blogging
engine written in the Ruby programming languge,
using the Ruby on Rails web application framework


Typo can use any of the various SQL databases
supported by the Ruby on Rails framework


Features include:


Do not need to rebuild the contents of the blog; everything
is created on the fly


Uses caching


Web
-
based administration and posting interface, plus
support for all three major external client API’s (Blogger,
MetaWeblog and MovableType Extensions)

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.


Ruby on rails provides the framework for the
database interaction.


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 framework used for the sites
forums, and database interaction.


Ruby on Rails: Cons


Confined to one language: Ruby


Forced to one directory hierarchy


Not too popular (Though it is becoming
more so recently)


Not yet industry standard


Slight Learning Curve


Relatively new with future stability
unknown

Ruby on Rails: Pros


Open Source!


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