Ruby on Rails
                             Introduction




Sunday, March 22, 2009
Ruby



Sunday, March 22, 2009
Ruby successfully
                     combines Smalltalk's
                     conceptual elegance,
                    ...
Ruby is Highly Dynamic
                    • Uses dynamic typing (vs. static)
                    • Full support for intro...
puts quot;upperquot;.upcase




Sunday, March 22, 2009
5.times do
                  puts quot;Ruby Rocks!quot;
                end




Sunday, March 22, 2009
class Greeter
   def initialize(greeting)
     @greeting = greeting
   end
  
   def salute(name = quot;youquot;)
     put...
next_month = Time.now +
                1.month




Sunday, March 22, 2009
def thrice
   yield(1)
   yield(2)
   yield(3)
 end
  
 # Output quot;Blocks are cool!quot; three
 times with the count
 t...
nil.is_a? Object
                Class.is_a? Object




Sunday, March 22, 2009
Rails



Sunday, March 22, 2009
MVC




Sunday, March 22, 2009
Sunday, March 22, 2009
ActiveRecord
                             Models




Sunday, March 22, 2009
Sunday, March 22, 2009
Post.find(3)
Post.find(1..10, :order => ‘title’)
              Post.first
               Post.all
              Post.count...
post = Post.find(27)

                                post.name
                                post.body
                ...
Post.without_title.first
                              Post.first.user




Sunday, March 22, 2009
ActionController
                               Controller




Sunday, March 22, 2009
• Routing
                    • Session handeling, security
                    • Request Forgery protection
             ...
#GET http://localhost:3000/posts/7/edit




Sunday, March 22, 2009
#GET http://localhost:3000/posts/7/edit




        PostController




Sunday, March 22, 2009
#GET http://localhost:3000/posts/7/edit




        PostController                                    action: edit




Sun...
#GET http://localhost:3000/posts/7/edit




        PostController              params[:id] = 7       action: edit




Sun...
REST
                            #GET /posts
                           #GET /posts/1
                         #GET /post/...
Sunday, March 22, 2009
ActionView
                             Views




Sunday, March 22, 2009
View




Sunday, March 22, 2009
Helper




Sunday, March 22, 2009
DRY
                         Don’t repeat yourself




Sunday, March 22, 2009
Modularity
                             /lib




Sunday, March 22, 2009
Sunday, March 22, 2009
class Video < ActiveRecord::Base
   acts_as_featured
 end

 User.featurable? # => false
 Video.featurable? # => true
 Vide...
Gems and Plugins



Sunday, March 22, 2009
acts_as_commentable
                        acts_as_taggable
                           acts_as_list
                     ...
Authlogic




Sunday, March 22, 2009
Paperclip




Sunday, March 22, 2009
HAML




Sunday, March 22, 2009
Thx!
                         Give me Q, I’ll give you A.




Sunday, March 22, 2009
Upcoming SlideShare
Loading in …5
×

Ruby On Rails Presentation Barcamp Antwerp.Key

1,112
-1

Published on

Published in: Technology, News & Politics
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,112
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
20
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • Sinds 3j RoR dev

    daarvoor: PHP, Java, ASP.NET C#, COBOL, HTTP, CSS
    leren developen op het web

    Wat is RoR.. eerst en vooral het Ruby
  • Created by Yukihiro Matsumoto, a.k.a. Matz in 1995
  • Smalltalk: Full OO, Dynamic typing, reflecting/meta programming

    Phython: easy, natural syntax

    Perl&#x2019;s Pragamatism: Gezond verstand en realisme aanleggen en praktish gericht zijn ipv theoretish

    ** Principal of Least Surprise
    ** Completely OO
    ** Syntax for programmers
  • Dynamic typing => duck typing
    introspection .methods method
    redefine method in same class / redefine methods for an instance
    Multiple inheritance like in c

    A dynamic, object-oriented programming language with:
    &#x2022;a strong focus on simplicity and productivity
    &#x2022;an elegant, natural syntax
    &#x2022;roots in Lisp, Perl, and Smalltalk
  • Leesbaar, te verwachten syntax
  • 5 is obviously a object
    leesbaar, te verwachten syntax
  • No need to define the variables of an object
    optional arguments (*args)
  • Only in Rails, ook in february

    Reflection! (1.month is afhankelijk van Time.now)
  • code blocks!
  • True

    nil is an Object
    Class is an Object (word wat ingewikkeld)

    Nu, wat is Rails dan?
  • Is een volledig web framework

    - Abstraction (DB, environment)
    - Geen SERVER
    - Convention over Configuration
    - MVC
  • Rails gebruikt het MVC pattern.
    Voor die gene die MVC niet kennen:
    Model: Object represenatie van de data en business logic
    View: Presentatie van de data
    Conroller: Het gene er tussenin (haal data op om te displayen, regageert op user actions)
  • De folder structuur van een Rails app ziet er zo uit.
    - Controllers
    - Models
    - Views

    helpers voor views the helpen

    ten eerste de Models
  • ActiveRecord is de basis klasse van alle DB models in Rails
    - Klass is a table
    - Columns are attributes
    - Rows are instances

    Abstractie van alle database, en db type:
    MySQL, PostgreSQL, SQLite, Oracle, MS SQLServer, and IBM DB2. out of the box
  • Dit is hoe een model er kan uit zien

    Het aanmaken van een tabel (een migration) is Database agnostisch.

    ActiveRecord zal automatisch de tabel &#x201C;posts&#x201D; vinden (plural van Post) en al de attributen zullen aanwezig zijn als getters/setters

    Free magic:
    id column
    created/updated_at
    counters
  • Enkele van de &#x201C;gratis&#x201D; methods
  • Gratis instance methods
  • We kunnen natuurlijk de definitie van het model aanpassen

    Weinig code => veel functionaliteit

    - associations (belongs_to, has_one, has_many, :through, conditions ... )
    - Validations (uniqness, range, presence, :if, custom)
    - named scope (pre defined pieces of queries, condition, order, grouping)

    Deze method calls gebeuren dus vooral in de controllers
  • Controllers
    - reageert op de HTTP requests &#x201C;actions&#x201D;

    OUt of the box krijgen we
  • Out of the box doet deze Klasse al veel voor je

    - Securing een session (encoding the session info)

    - Cross site scripting attacks afweren (session VS post variables)

    - Vertalen van URL&#x2019;s naar methods in controllers // Routing

    - Als er een AR model niet gevonden word, 404 displayen, of een 500 page waneer er zich een andere excpetion voor doet
  • Routing
    - Controller
    - Action
    - Params

    Gedefinieerd in routes file,
    Eigen routes of standaard routes / REST
  • REST = Representational_State_Transfer
    CRUD over HTTP
    PUT en DELETE zijn niet supported door Browsers (behalve in JS) en word gemuleerd door de Rails

    HTTP is meer dan GET and POST (WebDAV, CalDAV) verbs
  • Zolas je kan zien kan rails bepalen in welk format het moet antwoorden
    HTML, XML, JSON, ICAL, JS gebaseerd op de request

    De view hoeft niet expliciet aangeroepen worden (default) view heeft zelfde naam als action


  • Views zijn redelijk simpel
    - Helper methods (link_to)
    - translations t()
    - url/path generators/helpers

    action/name . format . processor

    partials
    layouts
  • Helpers zijn er om de view te helpen.
    Ze bevatten stukjes logica die meer dan een regel beslaan,
    zodat de view zelf niet vervuilt word met teveel logica
  • Bepaalde stukken logica gaan zich vaak herhalen zowel binnen 1 als in meerdere applicaties
    - Login validatie,
    - Rating van Items in de database (stars)
    - Comments logic
    - etc...
  • Weinig woorden en veel daden

    Dankzij convention over configuration:
    - Bijna lege models (mapping en configuratie automatisch)

    Configuration still possible
    - legacy DB, highly custom systems
  • Logica dat vaak herhaalt word kan in een module geplaatst worden
    en included worden door objecten die het willen
  • acts_as_featurable eigen project

    Laat toe dat Models featured kunnen worden (dmv een feature model)
    Alle logica is in de module
    - association
    - AR methods
    - instance methods

    - Klass methods
    - validations ...

  • 1 lijntje brengt onmiddelijk een hele reeks code met zich mee

    ActiveRecord zelf is ook aangepast, zodat elk model kan zeggen of het gefeatured kan worden
  • Gems en plugins zijn al vooraf geschreven stukken code, liberaries
    Waarom herhalen wat anderen al hebben geschreven?
  • commentable: comment system voor de site
    taggable: full tagging system (zijn volledige tables, maar doen zich voor als array in model)
    list: als order belangrijk is
    paginate: limit queries, and pagination voor HTML (AR, AC)
    default: complexe default values (uuid, time based, )

    Ten slotte nog enkele plugins in detail
  • Ten slotte

    Authlogic voorziet een volledige authenticatie systeem
    Definieer het User model and you are ready to roll
    - Sessies gedragen zich net als andere modellen
    - Password security is transparant
    - tracken van login times
    - create / confirmed / approved status van account
    - etc...
  • Easy file attachment management for ActiveRecord
    - Zet zelf attributen in DB
    - Manage files zelf, methods zoals public_path en local_path
    - Thumbnails automatisch
    - Processors toevoegen (OCR, red eyes...)
    -
  • HTML, maar dan compacter

    Dankuwel

  • Ruby On Rails Presentation Barcamp Antwerp.Key

    1. 1. Ruby on Rails Introduction Sunday, March 22, 2009
    2. 2. Ruby Sunday, March 22, 2009
    3. 3. Ruby successfully combines Smalltalk's conceptual elegance, Phython's ease of use and learning, and Perl's pragmatism Sunday, March 22, 2009
    4. 4. Ruby is Highly Dynamic • Uses dynamic typing (vs. static) • Full support for introspection • Support for method redefinition • Create your own domain-specific languages • Modules vs. multiple inheritance • method_missing, etc... Sunday, March 22, 2009
    5. 5. puts quot;upperquot;.upcase Sunday, March 22, 2009
    6. 6. 5.times do   puts quot;Ruby Rocks!quot; end Sunday, March 22, 2009
    7. 7. class Greeter   def initialize(greeting)     @greeting = greeting   end     def salute(name = quot;youquot;)     puts quot;#{@greeting} #{name}!quot;   end end Sunday, March 22, 2009
    8. 8. next_month = Time.now + 1.month Sunday, March 22, 2009
    9. 9. def thrice   yield(1)   yield(2)   yield(3) end   # Output quot;Blocks are cool!quot; three times with the count thrice do |i|   puts quot;#{i}: Blocks are cool!quot; end Sunday, March 22, 2009
    10. 10. nil.is_a? Object Class.is_a? Object Sunday, March 22, 2009
    11. 11. Rails Sunday, March 22, 2009
    12. 12. MVC Sunday, March 22, 2009
    13. 13. Sunday, March 22, 2009
    14. 14. ActiveRecord Models Sunday, March 22, 2009
    15. 15. Sunday, March 22, 2009
    16. 16. Post.find(3) Post.find(1..10, :order => ‘title’) Post.first Post.all Post.count Post.create(:title => ‘Foobar’) Post.find_by_title(‘Foobar’) Post.destroy(5) Sunday, March 22, 2009
    17. 17. post = Post.find(27) post.name post.body post.created_at post.title = ‘dance’ post.save post.destroy Sunday, March 22, 2009
    18. 18. Post.without_title.first Post.first.user Sunday, March 22, 2009
    19. 19. ActionController Controller Sunday, March 22, 2009
    20. 20. • Routing • Session handeling, security • Request Forgery protection • Exception Handling Sunday, March 22, 2009
    21. 21. #GET http://localhost:3000/posts/7/edit Sunday, March 22, 2009
    22. 22. #GET http://localhost:3000/posts/7/edit PostController Sunday, March 22, 2009
    23. 23. #GET http://localhost:3000/posts/7/edit PostController action: edit Sunday, March 22, 2009
    24. 24. #GET http://localhost:3000/posts/7/edit PostController params[:id] = 7 action: edit Sunday, March 22, 2009
    25. 25. REST #GET /posts #GET /posts/1 #GET /post/1/edit #GET /post/new #POST /posts #PUT /posts/1 #DELETE /posts/1 Sunday, March 22, 2009
    26. 26. Sunday, March 22, 2009
    27. 27. ActionView Views Sunday, March 22, 2009
    28. 28. View Sunday, March 22, 2009
    29. 29. Helper Sunday, March 22, 2009
    30. 30. DRY Don’t repeat yourself Sunday, March 22, 2009
    31. 31. Modularity /lib Sunday, March 22, 2009
    32. 32. Sunday, March 22, 2009
    33. 33. class Video < ActiveRecord::Base   acts_as_featured end User.featurable? # => false Video.featurable? # => true Video.first.feature! Sunday, March 22, 2009
    34. 34. Gems and Plugins Sunday, March 22, 2009
    35. 35. acts_as_commentable acts_as_taggable acts_as_list will_paginate default_value_for Sunday, March 22, 2009
    36. 36. Authlogic Sunday, March 22, 2009
    37. 37. Paperclip Sunday, March 22, 2009
    38. 38. HAML Sunday, March 22, 2009
    39. 39. Thx! Give me Q, I’ll give you A. Sunday, March 22, 2009
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×