und Fortbildungsplattform • Web: http://www.JGraber.ch • Twitter: @j_graber Hinweis: Verwendung für eigene Präsentationen nur mit Einverständis des Autors
Arbeit in .Net erleichtert geht auf Ruby/Rails zurück: ASP.Net MVC EF Code First Migrations NuGet Subsonic Mspec SpecFlow OWIN … • Ruby & Rails inspirieren viele Entwickler • Es macht Spass!
end elsif else do defined? def class case break not nil next module in if for false ensure true then super self return retry rescue redo or yield while when until unless undef
an Objekte • Jede Methode hat einen Rückgabewert – Implizit: letzter Befehl • Können an eine spezifische Objekt- Instanz gehängt werde • Konvention: <Methode>! verändert Objekt
dynamische Auswertung der geschickten Meldung • Ermöglicht Vorlagen für Antworten auf erst zur Laufzeit bekannte Kriterien – find_by_***** in ActiveRecord
is no method '#{m}' with this args: #{args}" end end Demo.new.anything 1, 5, "Hello” There is no method 'anything' with this args: [1, 5, "Hello"] => nil
eines Objekts bestimmt seinen Typ: If an object walks like a duck and talks like a duck, then the interpreter is happy to treat it as if it were a duck.
lässt Objekte auf nicht definierte Methoden antworten • Duck Typing lässt beliebige Klassen miteinander zusammenarbeiten • Monkey Patching ermöglicht die Weiterentwicklung ohne neuen Release
JRuby (Java, läuft in der JVM) • MacRuby (Objectiv-C, für Mac OS X) • IronRuby (C#, DLR von .Net) • Rubinius (Ruby, Ideen aus Smalltalk-80) • RubyMotion (statisch komp. Code für iOS)
Hansson (DHH) entwickelt • Ist ein Web-Framework für Ruby – Wurde aus Basecamp extrahiert • Folgt den Prinzipien – Don’t repeat yourself (DRY) – Convention over configuration
&method(:require) run TheSmallestRailsApp ||= Class.new(Rails::Application) { config.secret_token = routes.append { root to: proc { [200, {"Content-Type" => "text/html"}, [Markaby::Builder.new.html { title @title = "The Smallest Rails App" h3 "I am #@title!" p "Here is my source code:" text CodeRay.scan_file(__FILE__).div(line_numbers: :table) p { a "Make me smaller", href: "//goo.gl/YdRpy" } }]] } }.to_s initialize! }
– Alles drin was man braucht – Viel Ballast für kleine Anwendungen • Rails besteht aus Modulen • Module können weggelassen werden • Module lassen sich austauschen – Mongo_Mapper statt ActiveRecord
Pack (für View und Controller) • Active Model (für Model) • Active Record (der OR-Mapper) • Active Resource (mapping REST zu Model) • Active Support (Helper) • Railties (Kern von Rails)
Fowler beschrieben • Objekte – Verfügen über CRUD-Methoden – Objekte entsprechen DB-Tabellen – Felder bilden DB-Spalten ab • Bildet Basis für Datenzugriffe in Rails – Kann wie jedes Modul ersetzt werden
von Webanwendungen in Ruby – Web: http://www.sinatrarb.com • Serve – Rapid Prototyping Framework für Webanwendungen, setzt auf Rack auf – Web: http://get-serve.com
der Kultur verankert – Kein Prüfung zur Kompilierzeit – Hohe Wiederverwendung – Best Practices will man leben • Ruby und Rails unterstützen Testing – Templates für Tests – Duck Typing
und Unsinn von TDD – Über Vor- und Nachteile von BDD – Wirtschaftlichkeit – Was sind die Best Practices? – Sind Mocks gut oder böse? • Tests müssen einem beim erreichen der Projektziele unterstützen
it "returns 0 for all gutter game" do bowling = Bowling.new 20.times { bowling.hit(0) } bowling.score.should eq(0) end end $ rspec bowling_spec.rb --format nested Bowling#score returns 0 for all gutter game Finished in 0.007534 seconds 1 example, 0 failures
zu vermeiden müssen Kassierer in der Lage sein einen Bruchteil zu berechnen Szenario: Normale Zahlen Gegeben sei ich habe 3 in den Taschenrechner eingegeben Und ich habe 2 in den Taschenrechner eingegeben Wenn ich divide drücke Dann sollte das Ergebniss auf dem Bildschirm 1.5 sein Angenommen /ich habe (\d+) in den Taschenrechner eingegeben/ do |n| @calc.push n.to_i end Wenn /ich (\w+) drücke/ do |op| @result = @calc.send op end Dann /sollte das Ergebniss auf dem Bildschirm (.*) sein/ do |result| @result.should == result.to_f end
eine dynamische OO-Sprache … Rails ist ein mächtiges Webframework … .Net profitiert von Ruby/Rails … Es gibt mehr als nur einen richtigen Weg … Eine Programmiersprache soll uns Entwickler bei der Arbeit unterstützen