Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Lehmanns Rails Erweitern

2,780 views

Published on

Slides of a presentation on Rails and extending Rails with Plugins and such, held at Lehmanns Fachbuchhandlung in Hamburg, at 2007-07-09

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Lehmanns Rails Erweitern

  1. 1. Ruby on Rails Erweitern Ramon Wartala - Jan Krutisch 9. Juli 2007 - Lehmanns Fachbuchhandlung, Hamburg
  2. 2. Wer wir sind • Jan Krutisch und Ramon Wartala • Ehemalige Kollegen • Gründer der deutschen Rails-UG • Autoren von quot;Webanwendungen mit Ruby on Railsquot;, Addison-Wesley
  3. 3. Wer wir sind • Jan Krutisch und Ramon Wartala • Ehemalige Kollegen • Gründer der deutschen Rails-UG • Autoren von quot;Webanwendungen mit Ruby on Railsquot;, Addison-Wesley
  4. 4. Ramon Wartala • Dipl.-Inform. • IT-Leiter bei Orangemedia GmbH • Einer der führenden Online-Vermarkter • Autor zahlreicher Artikel und Tagungsbeiträge rund um Softwareentwicklung
  5. 5. Jan Krutisch • Dipl.-Ing. (FH) Umwelttechnik • Entwicklungsleiter für Rails-Projekte bei mindmatters (www.mindmatters.de) • artdoxa.com / familylounge.de • Jahrelange Erfahrung als Programmierer im Webbereich insbesondere in Java und PHP
  6. 6. Ruby on Rails Historie • Juli 2004, David Heinemeier Hansson veröffentlicht Ruby on Rails als quelloffenes Framework für dir Erstellung von Web Applikationen mit Ruby • Version 1.0 im Dezember 2005 • Version 1.2 im Januar 2007
  7. 7. Ruby on Rails Grundlagen
  8. 8. Ruby
  9. 9. • Moderne Skriptsprache • Anleihen aus Perl, Python, Smalltalk, ... • Alles ist ein Objekt: 5.days.from_now • Starke Introspektion (aka Reflection) • Schwache Typisierung • Closures, Blocks, Iteratoren, etc.
  10. 10. def tausch(x,y) [y, x] end x,y = tausch 1,2 => x=2, y=1
  11. 11. def tausch(x,y) t kgabewer iter Rüc Impliz [y, x] end x,y = tausch 1,2 => x=2, y=1
  12. 12. def tausch(x,y) t kgabewer iter Rüc Impliz [y, x] end weisung ache Zu Mehrf x,y = tausch 1,2 => x=2, y=1
  13. 13. def tausch(x,y) t kgabewer iter Rüc Impliz [y, x] end weisung ache Zu Mehrf on aucht sch Wer br n Klammer x,y = tausch 1,2 => x=2, y=1
  14. 14. Rails
  15. 15. • ModelViewController-Architektur • Convention over Configuration • Don't Repeat Yourself • Unterstützt die Testgetriebene Entwicklung • Unterstützt agile Methoden • Unterstützt Web2.0-Techniken (Ajax etc.)
  16. 16. Das Versprechen von Rails • Sehr viel schnellere Entwicklung durch: • Sehr viel weniger quot;Glue codequot; • Konzentrierung auf Geschäftslogik • Mehr Spaß am Entwickeln • Höhere Produktivität
  17. 17. Nachteile von Rails • Ruby ist nicht sehr performant • Rails ist nicht sehr performant • Kein „Allgemeinwissen“ • (Noch) keine quot;sichere Wahlquot; für Entscheider
  18. 18. Die Komponenten • ActiveRecord: Objekt-relationaler Mapper • ActionPack • ActionView • ActionController • ActiveSupport • ActionMailer
  19. 19. Code!
  20. 20. Model class Book < ActiveRecord::Base end
  21. 21. Model Book.find :all Book.find :first, :conditions => [quot;isbn = ?quot;, @isbn] @book = Book.find_by_isbn(@isbn) @book.title = quot;Ruby Cookbookquot; @book.save @book.destroy
  22. 22. Model mit Beziehungen class Book < ActiveRecord::Base belongs_to :library end class Library < ActiveRecord::Base has_many :books end
  23. 23. Model mit Beziehungen @library = @book.library @books = @library.books @book = @library.books.find_by_isbn @isbn @library << @book @book.library = @library
  24. 24. Model mit Validierungen class Book < ActiveRecord::Base validates_presence_of :title validates_uniqueness_of :isbn end
  25. 25. Model mit Validierungen @book = Book.new @book.save # => false @errors = @book.errors
  26. 26. Controller class BooksController < ApplicationController def index @books = Book.find(:all) end end
  27. 27. View (HTML) <ul> <% for book in @books %> <li><%=h book.title %></li> <% end %> </ul>
  28. 28. View (XML) xml.instruct! :xml, :version=>quot;1.0quot; xml.bookfeed do for book in @book xml.book do xml.title(book.title) end end end
  29. 29. Weitere Features
  30. 30. Syntaktischer Zucker • belongs_to :library • has_many :books • books_path • book_path(@book)
  31. 31. Tests • Basiert auf Test::Unit • Unit-Tests (Auf Modellebene) • Funktionale Tests (Auf Controllerebene) • Integrationstests (Auf Applikationsebene) • Testausführung automatisiert über Rake
  32. 32. Ajax etc. • prototype.js • script.aculo.us • Helper • rjs-Templates
  33. 33. Helper • Textformatierung (Textile / Markdown) excerpt(text, 'foo') => '...und foo ging...' • Datums-Formatierungen • Datums-Formular-Helper • ...
  34. 34. RESTful • URL = Resource • GET / POST / PUT / DELETE • Klare Architektur • Viele kleine Controller mit wenig Actions
  35. 35. Rails erweitern
  36. 36. Rails erweitern Durch: • rake-Tasks • Mixins • Generatoren • RubyGems • Plugins
  37. 37. Plugins • Erweitern der Rails-Basisklassen • Metaprogrammierung! • Überschreiben, Ergänzen (Mixins) • Eigene Generatoren • Eigene Rake-Tasks
  38. 38. Plugin-Skript • ruby scripts/plugin • discover • source / unsource / sources • list • install / update • remove
  39. 39. Beispiel: acts_as_ferret class Question < ActiveRecord::Base acts_as_ferret :fields => [:title, :text] end Question.find_by_contents('foo')
  40. 40. Model-Plugins • acts_as_state_machine • acts_as_taggable • acts_as_versioned • acts_as_translatable • attachment_fu • acts_as_rateable
  41. 41. Authentifizierung • acts_as_authenticated • authorization • restful_authentication • openid_authentication
  42. 42. Tests • selenium_on_rails • rspec (Behaviour Driven Development) • rcov (Test coverage) • ...
  43. 43. Sonstiges • Streamlined • HOBO • und >400 mehr • http://www.agilewebdevelopment.com/
  44. 44. Eigene Erweiterungen
  45. 45. Eigene Plugins • Funktionalität bestimmen • Plugin-Generator anwerfen • Funktionalität implementieren
  46. 46. Eigene Plugins • acts_as_amazon_book • ruby script/generate plugin acts_as_amazon_book
  47. 47. Eigene Plugins • acts_as_amazon_book • ruby script/generate plugin acts_as_amazon_book
  48. 48. Plugin Anatomie vendorpluginsacts_as_amazon_book init.rb install.rb uninstall.rb vendorpluginsacts_as_amazonlib acts_as_amazon_book.rb vendorpluginacts_as_amazontasks
  49. 49. acts_as_amazon_book.rb
  50. 50. Plugin-Nutzung
  51. 51. Eigene Generatoren • Rails Generatoren in librails_generatorgenerators components • Eigene Generatorn in lib generators
  52. 52. Eigene Generatoren • Generatoren sind in Rails an vielen Stellen • Eigener Scaffolder Generator wii_scaffolder • Rails scaffolder als Ausgangspunkt
  53. 53. Generator-Anatomie • Jeder Generator erbt von Rails::Generator::Base bzw. Rails::Generator::NamedBase • Regeln zur Erstellung / Anpassung von Dateien / Templates • Implementierung der Methode manifest
  54. 54. Generator-Anatomie record do |m| m.file(…) m.directory(…) … end
  55. 55. Generator-Anatomie
  56. 56. wii_scaffold anwenden • ruby script/generate wii_scaffolder Book books list • „Erzeuge mir mit Hilfe des wii_scaffold- Generators ein Modell Book mit einem Controller books und einer Action list“
  57. 57. wii_scaffold anwenden Erzeugte Dateien: app/model/book.rb public/stylesheets/wii_scaffold.css app/views/book/list.rhtml app/controllers/books_controller.rb app/views/layouts/books.rhtml
  58. 58. wii_scaffold anwenden
  59. 59. Erweiterung verteilen • Code und zusätzliche Dateien verteilen • RubyGems als standardisiertes Distributionswerkzeug • Plugins auch direkt über SVN installierbar ruby script/plugin install http://svn.meinsubversion.com/mein/plugin
  60. 60. RubyGem • Ausgangspunkt jeder Gem ist die Datei .gemspec • Ruby-basierte Spezifikation der zu „verpackenden“ Erweiterung
  61. 61. RubyGem • gem build acts_as_amazon_book.gemspec • => acts_as_amazon_book-0.0.1.gem • gem install acts_as_amazon_book-0.0.1.gem • gem server
  62. 62. RubyGem • gem build acts_as_amazon_book.gemspec • => acts_as_amazon_book-0.0.1.gem • gem install acts_as_amazon_book-0.0.1.gem • gem server
  63. 63. Danke Fragen? • http://www.rubyonrails.org • http://www.rubyonrails-ug.de • http://www.railsjobs.de/

×