AMIR BARYLKO
               THE ROR TRILOGY
               A NEW DEV HOPE


Amir Barylko             RoR Trilogy Part I: A New Dev Hope
WHO AM I?

  • Software     quality expert

  • Architect

  • Developer

  • Mentor

  • Great      cook

  • The    one who’s entertaining you for the next hour!
Amir Barylko                                    RoR Trilogy Part I: A New Dev Hope
RESOURCES

  • Email      & Twitter: amir@barylko.com, @abarylko

  • Slides: http://www.orthocoders.com/presentations

  • Company        Site: http://www.maventhought.com

  • Try   Ruby online: http://tryruby.org/

  • Learn      RoR online: http://railsforzombies.org/


Amir Barylko                                        RoR Trilogy Part I: A New Dev Hope
RUBY INTRO
                Dynamic languages
                    Features
                    Support
                     Classes
                     Mixins


Amir Barylko                        RoR Trilogy Part I: A New Dev Hope
DYNAMIC LANGUAGES

  • High       level

  • Dynamically        typed

  • Runtime        over compile time

  • Closures

  • Reflection

  • Platform       independent
Amir Barylko                           RoR Trilogy Part I: A New Dev Hope
WELCOME TO RUBY

  • Created in mid-90s by         • Automatic
                                           memory
    “Matz” Matsumoto in Japan      management

  • Smalltalk, Perl   influences   • Several
                                          implementations:
                                   MRI, YARB, JRuby
  • Dynamic     typing
                                  • Totally   free!!
  • Object     Oriented



Amir Barylko                                    RoR Trilogy Part I: A New Dev Hope
RUBY FEATURES

  • Everything   is an expression

  • Metaprogramming

  • Closures

  • Garbage    collection

  • Exceptions

  • Operator    overloading, flexible syntax
Amir Barylko                                  RoR Trilogy Part I: A New Dev Hope
RUBY SUPPORT

  • Hundreds        of books

  • User       conferences all over the world

  • Active community (you can create a conference in your own
    city and top Ruby coders will go there to teach others, invite
    them and see)

  • Lots of great web sites: basecamp, twitter, 43 things, hulu,
    scribd, slideshare, Justin.tv

Amir Barylko                                     RoR Trilogy Part I: A New Dev Hope
CLASSES & OBJECTS

  • Initializer   and instance variables
     class Movie
       def initialize(name)
         @name = name
       end

       def play
         puts %Q{Playing “#{@name}”. Enjoy!}
       end
     end

     m = Movie.new(“Pulp fiction”)
     m.play

     => Playing “Pulp fiction”. Enjoy!


Amir Barylko                                   RoR Trilogy Part I: A New Dev Hope
CLASSES & OBJECTS II

  • Attributes
    class Movie
      # attr reader and writer
      attr_accesor :name

       def initialize(name)
         @name = name
       end
     end

     m = Movie.new('Brazil')
     m.name = “Pulp fiction”

Amir Barylko                     RoR Trilogy Part I: A New Dev Hope
MIXINS

  • One        of the greatest Ruby features!

  • You can define functions in Modules, and get them added to
    your classes.

     • Great     code reuse,

     • Multiple     inheritance alternative.

     • Code      organization

Amir Barylko                                    RoR Trilogy Part I: A New Dev Hope
ENUMERABLE MIXIN

  • Quote      from the standard library documentation:
        ...The Enumerable mixin provides
        collection classes with several
        traversal and searching methods, and
        with the ability to sort.
        The class must provide a method
        each, which yields successive
        members of the collection...


Amir Barylko                                     RoR Trilogy Part I: A New Dev Hope
ENUMERABLE II

  • It   provides useful methods such as:

     • map

     • to_a

     • take_while

     • count

     • inject

Amir Barylko                                RoR Trilogy Part I: A New Dev Hope
MIXIN EXAMPLE

  class MovieLibrary
    include Enumerable

    def each(&block)
      contents.each(&block)
    end
  end




Amir Barylko                  RoR Trilogy Part I: A New Dev Hope
ROR
                        What is it?
               Convention over configuration
                  Model View Controller
                    Code generation
                Dependency Management
                     HTML 5 & UJS

Amir Barylko                            RoR Trilogy Part I: A New Dev Hope
WHAT IS ROR?

  • Web        application development framework

  • Created       by David Heinemeier Hansson

  • With       Rails, you would be done by now!

  • Open        Source & Multi platform

  • Very       easy to learn

  • Comes        with everything out of the box!
Amir Barylko                                       RoR Trilogy Part I: A New Dev Hope
CONVENTION OVER
                CONFIGURATION
  • All   applications share the same structure

  • The    application is generated by the rails command

  • All   the config files are ruby code




Amir Barylko                                      RoR Trilogy Part I: A New Dev Hope
MODEL VIEW CONTROLLER

  • Model: represents   the data

  • Controllers: Manipulate   the data and prepare it to be shown

  • View: Shows   the data with a particular view engine




Amir Barylko                                    RoR Trilogy Part I: A New Dev Hope
CODE GENERATION

  • Using      rails command:

     • Bootstrap: Generates        basic structure

     • Models: Generated        models and tests

     • Controllers: Generates       controllers, views and tests

     • Scaffolds: Generates      models, controllers, views, routes,
       etc...

Amir Barylko                                         RoR Trilogy Part I: A New Dev Hope
DEPENDENCY MANAGEMENT

  • Gems       are Ruby libraries

  • Dependencies       are managed with tool gem

  • To   install a gem just run: gem install xxxxxx

  • Bundler     is a gem to manage dependencies

  • Just   create a Gemfile and bundler will install all of them


Amir Barylko                                      RoR Trilogy Part I: A New Dev Hope
HTML 5 & UNOBTRUSIVE JS

  • Supports    HTML 5 standards

  • data-remote, data-method, data-config, etc...

  • Supports    many JS frameworks

  • JS   code associated to models to handle events, animations, etc

  • Coffeescript!



Amir Barylko                                    RoR Trilogy Part I: A New Dev Hope
ROR GOODNESS
                 Common Structure
                   Automation
                    Migrations
                   ActiveRecord
                      Testing
                    Scaffolding

Amir Barylko                        RoR Trilogy Part I: A New Dev Hope
COMMON STRUCTURE

  •   app
      • assets:    Stylesheets, javascript, images
      • controllers:   Prepare the data for the views
      • helpers:   Helper methods to render views
      • models:    Represent our domain
      • views:  Templates to be rendered
        • each controller has a folder with one
          template per method
        • layouts:Base templates to surround the views


Amir Barylko                              RoR Trilogy Part I: A New Dev Hope
AUTOMATION

  • Rake       is a build tool (similar to ant, msbuild, maven)

  • Has    tasks that can be configured

  • Out    of the box has common tasks for database, testing, etc..

  • List   all the tasks: rake -T

  • Very       useful to automate tasks and to use in CI servers


Amir Barylko                                          RoR Trilogy Part I: A New Dev Hope
MIGRATIONS

  • Track      the database changes using code

  • No    need to use SQL

  • Upgrades       are easy

  • Versioning     is kept in the database

  • Generated       automatically when creating models


Amir Barylko                                     RoR Trilogy Part I: A New Dev Hope
ACTIVE RECORD

  • Relations       (ActiveModel)

  • Supports        multiple databases

  • Each       table is a class

  • All   attributes are created dynamically

  • Associations       are declared by convention

  • Each       class has CRUD and query operations by default
Amir Barylko                                        RoR Trilogy Part I: A New Dev Hope
TESTING OUT OF THE BOX

  • Many       testing frameworks available

  • No    additional effort to generate them

  • Running       them is part of the Rakefile (automation)

  • Keep       high quality all the way




Amir Barylko                                       RoR Trilogy Part I: A New Dev Hope
SCAFFOLDING

  • Generated     automatically for CRUD operations

  • Controllers

  • Views

  • Tests

  • The    template used can be replaced of modified


Amir Barylko                                   RoR Trilogy Part I: A New Dev Hope
MOVIE LIBRARY
                    Demo




Amir Barylko               RoR Trilogy Part I: A New Dev Hope
TOPICS

  • Rails      application structure

  • Database        Migrations

  • Using       scaffolds

  • Model        - View - Controllers

  • Routing

  • Ajax

Amir Barylko                              RoR Trilogy Part I: A New Dev Hope
MORE GOODNESS!
                    Helpers
                    Partials
                     Sass
                    Routing



Amir Barylko                   RoR Trilogy Part I: A New Dev Hope
HELPERS

  • Methods    to assist in the view generation

  • Reusable

  • Associated   to each controller

  • Testable




Amir Barylko                                      RoR Trilogy Part I: A New Dev Hope
PARTIALS

  • Templates      that can be shared

  • Start      with underscore “_”

  • Can    be rendered from views or controllers




Amir Barylko                                   RoR Trilogy Part I: A New Dev Hope
SASS

  • Quote      from sass-lang.com:

           Sass is an extension of CSS3, adding
           nested      rules,     variables,
           mixins,selector inheritance, and
           more.
           It’s translated to well-formatted,
           standard CSS using the command line
           tool or a web-framework plugin.



Amir Barylko                           RoR Trilogy Part I: A New Dev Hope
ROUTING

  • Easy   to configure using routes.rb

  • Supports     REST out of the box

  • Easy   to restrict actions

  • Easy   to alias routes

  • Allows     optional parameters in the routes


Amir Barylko                                       RoR Trilogy Part I: A New Dev Hope
QUESTIONS?
RESOURCES

  • Email      & Twitter: amir@barylko.com, @abarylko

  • Slides: http://www.orthocoders.com/presentations

  • Company        Site: http://www.maventhought.com

  • Try   Ruby online: http://tryruby.org/

  • Learn      RoR online: http://railsforzombies.org/


Amir Barylko                                        RoR Trilogy Part I: A New Dev Hope
RESOURCES II




Amir Barylko              RoR Trilogy Part I: A New Dev Hope
CLOJURE TRAINING

  • When: Nov       6, 7 & 8

  • More       info: http://www.maventhought.com

  • Goal: LearnClojure and functional programming with real
    hands on examples




Amir Barylko                                RoR Trilogy Part I: A New Dev Hope

Ro r trilogy-part-1

  • 1.
    AMIR BARYLKO THE ROR TRILOGY A NEW DEV HOPE Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 2.
    WHO AM I? • Software quality expert • Architect • Developer • Mentor • Great cook • The one who’s entertaining you for the next hour! Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 3.
    RESOURCES •Email & Twitter: amir@barylko.com, @abarylko • Slides: http://www.orthocoders.com/presentations • Company Site: http://www.maventhought.com • Try Ruby online: http://tryruby.org/ • Learn RoR online: http://railsforzombies.org/ Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 4.
    RUBY INTRO Dynamic languages Features Support Classes Mixins Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 5.
    DYNAMIC LANGUAGES • High level • Dynamically typed • Runtime over compile time • Closures • Reflection • Platform independent Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 6.
    WELCOME TO RUBY • Created in mid-90s by • Automatic memory “Matz” Matsumoto in Japan management • Smalltalk, Perl influences • Several implementations: MRI, YARB, JRuby • Dynamic typing • Totally free!! • Object Oriented Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 7.
    RUBY FEATURES • Everything is an expression • Metaprogramming • Closures • Garbage collection • Exceptions • Operator overloading, flexible syntax Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 8.
    RUBY SUPPORT • Hundreds of books • User conferences all over the world • Active community (you can create a conference in your own city and top Ruby coders will go there to teach others, invite them and see) • Lots of great web sites: basecamp, twitter, 43 things, hulu, scribd, slideshare, Justin.tv Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 9.
    CLASSES & OBJECTS • Initializer and instance variables class Movie def initialize(name) @name = name end def play puts %Q{Playing “#{@name}”. Enjoy!} end end m = Movie.new(“Pulp fiction”) m.play => Playing “Pulp fiction”. Enjoy! Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 10.
    CLASSES & OBJECTSII • Attributes class Movie # attr reader and writer attr_accesor :name def initialize(name) @name = name end end m = Movie.new('Brazil') m.name = “Pulp fiction” Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 11.
    MIXINS •One of the greatest Ruby features! • You can define functions in Modules, and get them added to your classes. • Great code reuse, • Multiple inheritance alternative. • Code organization Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 12.
    ENUMERABLE MIXIN • Quote from the standard library documentation: ...The Enumerable mixin provides collection classes with several traversal and searching methods, and with the ability to sort. The class must provide a method each, which yields successive members of the collection... Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 13.
    ENUMERABLE II • It provides useful methods such as: • map • to_a • take_while • count • inject Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 14.
    MIXIN EXAMPLE class MovieLibrary include Enumerable def each(&block) contents.each(&block) end end Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 15.
    ROR What is it? Convention over configuration Model View Controller Code generation Dependency Management HTML 5 & UJS Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 16.
    WHAT IS ROR? • Web application development framework • Created by David Heinemeier Hansson • With Rails, you would be done by now! • Open Source & Multi platform • Very easy to learn • Comes with everything out of the box! Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 17.
    CONVENTION OVER CONFIGURATION • All applications share the same structure • The application is generated by the rails command • All the config files are ruby code Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 18.
    MODEL VIEW CONTROLLER • Model: represents the data • Controllers: Manipulate the data and prepare it to be shown • View: Shows the data with a particular view engine Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 19.
    CODE GENERATION • Using rails command: • Bootstrap: Generates basic structure • Models: Generated models and tests • Controllers: Generates controllers, views and tests • Scaffolds: Generates models, controllers, views, routes, etc... Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 20.
    DEPENDENCY MANAGEMENT • Gems are Ruby libraries • Dependencies are managed with tool gem • To install a gem just run: gem install xxxxxx • Bundler is a gem to manage dependencies • Just create a Gemfile and bundler will install all of them Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 21.
    HTML 5 &UNOBTRUSIVE JS • Supports HTML 5 standards • data-remote, data-method, data-config, etc... • Supports many JS frameworks • JS code associated to models to handle events, animations, etc • Coffeescript! Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 22.
    ROR GOODNESS Common Structure Automation Migrations ActiveRecord Testing Scaffolding Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 23.
    COMMON STRUCTURE • app • assets: Stylesheets, javascript, images • controllers: Prepare the data for the views • helpers: Helper methods to render views • models: Represent our domain • views: Templates to be rendered • each controller has a folder with one template per method • layouts:Base templates to surround the views Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 24.
    AUTOMATION •Rake is a build tool (similar to ant, msbuild, maven) • Has tasks that can be configured • Out of the box has common tasks for database, testing, etc.. • List all the tasks: rake -T • Very useful to automate tasks and to use in CI servers Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 25.
    MIGRATIONS •Track the database changes using code • No need to use SQL • Upgrades are easy • Versioning is kept in the database • Generated automatically when creating models Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 26.
    ACTIVE RECORD • Relations (ActiveModel) • Supports multiple databases • Each table is a class • All attributes are created dynamically • Associations are declared by convention • Each class has CRUD and query operations by default Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 27.
    TESTING OUT OFTHE BOX • Many testing frameworks available • No additional effort to generate them • Running them is part of the Rakefile (automation) • Keep high quality all the way Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 28.
    SCAFFOLDING •Generated automatically for CRUD operations • Controllers • Views • Tests • The template used can be replaced of modified Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 29.
    MOVIE LIBRARY Demo Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 30.
    TOPICS •Rails application structure • Database Migrations • Using scaffolds • Model - View - Controllers • Routing • Ajax Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 31.
    MORE GOODNESS! Helpers Partials Sass Routing Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 32.
    HELPERS •Methods to assist in the view generation • Reusable • Associated to each controller • Testable Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 33.
    PARTIALS •Templates that can be shared • Start with underscore “_” • Can be rendered from views or controllers Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 34.
    SASS •Quote from sass-lang.com: Sass is an extension of CSS3, adding nested rules, variables, mixins,selector inheritance, and more. It’s translated to well-formatted, standard CSS using the command line tool or a web-framework plugin. Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 35.
    ROUTING •Easy to configure using routes.rb • Supports REST out of the box • Easy to restrict actions • Easy to alias routes • Allows optional parameters in the routes Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 36.
  • 37.
    RESOURCES •Email & Twitter: amir@barylko.com, @abarylko • Slides: http://www.orthocoders.com/presentations • Company Site: http://www.maventhought.com • Try Ruby online: http://tryruby.org/ • Learn RoR online: http://railsforzombies.org/ Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 38.
    RESOURCES II Amir Barylko RoR Trilogy Part I: A New Dev Hope
  • 39.
    CLOJURE TRAINING • When: Nov 6, 7 & 8 • More info: http://www.maventhought.com • Goal: LearnClojure and functional programming with real hands on examples Amir Barylko RoR Trilogy Part I: A New Dev Hope