Click here to load reader

Introduction to Ruby on Rails - Hasso-Plattner-Institut · Introduction to Ruby on Rails — Software Engineering II — WS 2015/16 October 16, 2015 20 Web-based paper management

  • View
    214

  • Download
    0

Embed Size (px)

Text of Introduction to Ruby on Rails - Hasso-Plattner-Institut · Introduction to Ruby on Rails —...

  • Introduction to Ruby on Rails

    Thomas Kowark

    Prof. Plattner, Dr. Uflacker Enterprise Platform and Integration Concepts group

    Software Engineering II WS 2015/16

  • Introduction to Ruby on Rails

    1. Ruby&RubyonRailsWhatisRubyonRails?AfewwordsaboutRuby Rails'corecomponents RESTfularchitecture

    2. YourfirstRailsapplicaAon3. YourintroductoryRailsexercise4. AddiAonalLiterature

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 2 October 16, 2015

  • WebapplicaAondevelopmentframeworkwriHeninRuby hHp://rubyonrails.org/Philosophy "Don'trepeatyourself"DRY ConvenAonoverConfiguraAonthereis"theRailsway" RESTfularchitecture Everythinginitsplace

    UsedbyGithub,Groupon,TwiHer(parAally)

    What is Ruby on Rails?

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 3

    Rails5est.2015

    Rails42013

    Rails32009

    Rails22006

    Rails12003

    October 16, 2015

  • hHp://www.ruby-lang.org/

    Dynamic,reflecAve,general-purpose,object-oriented InfluencedbyPerl,Smalltalk,Eiffel,andLisp Open-source,maturesoawareMatzsRubyInterpreter(MRI)versions:

    AddiAonallydifferentVMsavailable(JRuby,Rubinius,IronRuby,Maglev)

    A few words about Ruby

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 4

    Ruby2.2.22015

    Ruby2.0.02013

    Ruby1.9.32011

    Ruby1.8.72010

    Ruby1.01996

    Yukihiro"Matz"MatsumotowithR.Stallman

    October 16, 2015 ImagebyRubnRodrguez(CCBY3.0)-hHp://commons.wikimedia.org/wiki/File:Matz.jpg

  • Rails Core Components

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 5

    Ac1onPack

    Ac1onDispatch(parsesHTTP,sessions,cookies,etc.)

    Ac1onController(makedataavailable,applica1onflow)

    View

    Controller

    Model

    Raili1es(corecode,e.g.rake)

    Ac1veSupport(u1lityclasses,

    e.g.i18n)

    Ac1onMailer(emailservices)

    Ac1veModel

    (e.g.valida1ons)

    Gems(packagedlibraries)hKps://rubygems.org/

    Database(SQL,Graph..)

    Ac1onView(renderstemplate)

    Ac1veRecord(ORM)Datastorage

    October 16, 2015 hHp://adrianmejia.com/blog/2011/08/11/ruby-on-rails-architectural-design/

  • my_first_rails_app/app/ assets/ controller/ applicaAon_controller.rb helpers/ applicaAon_helper.rb models/ views/ applicaAon/ index.html.erb layouts/ applicaAon.html.erb

    Rails Application Layout

    October 16, 2015 6 Introduction to Ruby on Rails Software Engineering II WS 2015/16

  • RepresentaAonalStateTransfer(REST)isasoawarearchitecturestylefordistributedsystems

    Principles UniformInterface StatelessInteracAons Cacheable Clientsandservers LayeredSystem CodeonDemand(opAonal)

    LargestRESTfulimplementaAon:WorldWideWeb

    RESTful Architecture

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 7 October 16, 2015

  • RESTsupportsall4HTTP1.1verbs:GET,PUT,POST,DELETE DifferenAaAonofcollecAonsandindividualelements

    RESTful Architecture HTTP verbs

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 8

    Resource GET PUT POST DELETE

    SingleelementhHp://localhost:3000/authors/1

    Retrieve Updateorcreate Create Delete

    CollecAonhHp://localhost:3000/authors

    List Replace Create Delete

    October 16, 2015

  • GET/ #invokehomecontroller GET/authors #retrievealistofallauthors GET/authors/new #gettheformtoenteranewauthor POST/authors #createanewauthor GET/authors/1 #showdetailsofthefirstauthor GET/authors/1/edit #gettheformtoeditthefirstauthor PUT/authors/1 #updatethefirstauthor DELETE/authors/1 #deletethefirstauthor

    Examples of Routes

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 9 October 16, 2015

  • Introduction to Ruby on Rails

    1. Ruby&RubyonRails2. YourfirstRailsapplica1on3. YourintroductoryRailsexercise4. AddiAonalLiterature

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 10 October 16, 2015

  • Op1on1:YouuseMacorLinux InstallanduseRubyonRailsdirectlyonyourOS Rubyversionmanager(e.g.RVM,rbenv)ifolderversionsofRubyshouldbekepthHp://guides.rubyonrails.org/gesng_started.html#installing-rails OruseopAon2

    Op1on2:YouhaveWindowsorwanttouseaVM(recommended)WepreparedoneforyouviaVagrant(hHps://www.vagrantup.com/) UsesVirtualBoxinthebackend(freeonallplatorms)(hHps://www.virtualbox.org/) Useyourowntools&editors,runtheprojectinaheadlessVM SeeprojectREADMEforsetupinstrucAons

    Op1on3:YouhaveWindowsandinstallRubyonRailsdirectlyonyourOS TendstoconsumesomeAme,mightcauseproblemswithcertaindependencies hHp://railsinstaller.org/en

    How to Start?

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 11 October 16, 2015

  • Recommendedtoworkthrough/readthishands-ontutorial.Seriously.hHp://guides.rubyonrails.org/gesng_started.htmlThefollowingslidesgiveageneraloverview

    Comprehensive RoR tutorial

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 12

    Info:Beforeyoustartcoding,makesure,thecorrectversionsareinstalled.

    $ruby--version

    $rails--version

    October 16, 2015

  • rails Main executable

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 13

    $railsnewStartnewrailsapplicaAon

    $railsserverStartthedevelopmentserver

    $railsgenerateGenerateboilerplateformodels,controllers&views

    $railsdbconsoleStartadirectdatabaseshell

    Example:generatemodel,controllerandviewwithoutcontrollerspecs$railsgscaffoldauthorlast_name:stringhomepage:string--controller-specsfalse

    $railsconsoleStartinteracAveshelltotestoutideas

    hHp://guides.rubyonrails.org/command_line.html October 16, 2015

  • Introduction to Ruby on Rails Software Engineering II WS 2015/16 14

    Bundler Ruby package manager

    $geminstallManuallyinstallagem(Rubypackage)

    $bundleinstallInstallallgemslistedasdepenciesinGemfile

    Rubylibrariesarepackagedas"gems"OnlinerepositoryathHps://rubygems.org/Bundlerresolvesdependenciesofgems Gemfileholdsalistofrequiredgems Specifyversions,e.g.gem'rails'>='4.1.6 Alt.sources,e.g.:github=>tkowark/sawyer

    Gemfile.lockispopulatedwithresolveddependencies Shouldbeunderversioncontrol

    October 16, 2015

    Info:Gemfile.lockcontainsalltheactuallyinstalledversionsofgems.

  • rake Ruby make

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 15

    $rake-TListallavailablerakecommands

    $rakeroutesListallconfiguredroutes

    $rakedb:setup&&rakedb:migrateSetupthedatabaseandrunallmigraAons

    $rakedb:schema:load

    Replacedatabasewithdblayoutfromdb/schema.rbDonotrunmigraAons.

    $rakespecRunRspec(tesAngframeworkforRoR)tests

    Info:Runningschema:loadisadvisablewhensesngupacompletelynewproject.ItisnotintendedtoworkaroundbadmigraAons.

    October 16, 2015

  • InstallGit: sudoapt-getinstallgit hHp://git-scm.com/(Installersforallsystems)

    SeZngupusernameandemail:Mandatorytocommitchanges UseyourgithubcredenAals!

    AlternaAve:sesngparametersonlyforoneproject:

    Git distributed version control system

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 16

    [email protected]$gitconfig--globaluser.nameMaxMustermann

    $cd/path/to/your/[email protected]$gitconfiguser.nameMaxMustermann

    October 16, 2015

  • Git workflow commiting a change

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 17

    $gitclonehttps://github.com/hpi-swt2/wimi-portalCheckoutremoterepositorytolocalcopy

    $gitaddapp/views/layouts

    Changemainlayouttemplateapp/views/layouts/applicaAon.html.erbStagechanges(addfilesfromworkingcopytorepositoryindex)$gitstatus

    ListchangestobecommiHed

    $gitcommitm"Fixedissue#25"Commitwithcommitmessages.ReferenceGithubissue#25

    $gitpullFetchandmergechangesfromremoterepository

    $gitpushPublishlocalcommits

    October 16, 2015

  • Introduction to Ruby on Rails

    1. Ruby&RubyonRails2. YourfirstRailsapplicaAon3. YourintroductoryRailsexercise4. AddiAonalLiterature

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 18 October 16, 2015

  • Goals GetfamiliarwithRubyonRails Createnecessaryaccountsfortheproject

    Tasks CreateaGithubaccount LinkitwithCodeSchool.com(unlessyoualreadyhaveanaccount) CompleteRailscodingschool:hHp://railsforzombies.com CompleteGitTutorial:hHps://www.codeschool.com/courses/try-gitWhendone,createascreenshotofyourreportcard

    Deadline:Nov6,11:59pmCET(firm)

    Exercise 1 Code School

    October 16, 2015 Introduction to Ruby on Rails Software Engineering II WS 2015/16 19

  • Goals DeepenyourunderstandingofRailsApps GetusedtoTDD/BDD

    Tasks SignuponGithubClassroom

    hHps://classroom.github.com/assignment-invitaAons/ebc02d7d20638a7ef2660434c04136c2 RepositorymighttakesomeAmetoreceiveiniAalskeletoncode(bepaAent...)

    Makethetestsgreen Startwithrakespec Runsinglefeaturetestswithrspecspec/features//..._spec.rb

    CommityourscreenshotfromExercise1 Deadline Nov6,11:59pmCET(firm) POsareexemptfromthistask.

    Exercise 2 - Develop a Rails App

    October 16, 2015 Introduction to Ruby on Rails Software Engineering II WS 2015/16 20

  • Web-basedpapermanagementsystem Author Firstname Lastname Homepage

    Paper Title PublicaAon Year

    Apaperhasmanyauthors(max.5) Anauthorhasmanypapers

    WepreparedaRailsapplicaAonforyou

    Exercise 2 Requirements

    October 16, 2015 Introduction to Ruby on Rails Software Engineering II WS 2015/16 21

  • Exercise 2 Use Cases & Site Map

    October 16, 2015 Introduction to Ruby on Rails Software Engineering II WS 2015/16 22

    Home

    ShowAuthors

    AddAuthor

    ShowAuthorDetails

    EditAuthor

    ShowPapers

    AddPaper

    ShowPaperDetails

    EditPaper

  • hHps://gomockingbird.com/mockingbird/index.html?project=v890g6l

    Exercise 2 Mock Up

    October 16, 2015 Introduction to Ruby on Rails Software Engineering II WS 2015/16 23

  • Additional Literature

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 24 October 16, 2015

    Generalliterature Ruby,S.;Thomas,D.;HanssonD.H.:AgileWebDevelopmentwithRails4,

    2013(ebook) Swicegood,T.:PragmaAcGuidetoGit(P3.0),2012(ebook) Rappin,N.:RailsTestPrescripAons,2012 Rasmusson,J.:TheAgileSamurai(P4.0),2012(ebook) Pichler,R.:AgileProductManagementwithScrum,2010 Cohn,M.:SucceedingwithAgile,2012 Larman,C.;Vodde,B.:ScalingLean&AgileDevelopment,2009 Ludewig,J.;Lichter,H.:SoawareEngineering,2006 Sommerville,I.:SoawareEngineering,2004Ebookswillbemadeavailableforchosenbooks

  • Next Weeks Schedule

    Week1(Oct12Oct16) IntroducAonlectures

    Week2(Oct19Oct23) Findteams,enroll! CodeSchoolexercise 11-12:30LectureonScrum 13:3015ScrumLegoExercise

    Week3(Oct26Oct30) POs:CustomermeeAng RubyonRailsexercise LectureonGitandtesAng

    Week4(Nov2Nov6) Kick-offpresentaAon Startofproject

    October 16, 2015 Software Engineering II WS 2014/15 25

  • Introduction to Ruby on Rails

    1. Ruby&RubyonRailsWhatisRubyonRails? Rails'corecomponents RESTfularchitecture

    2. YourfirstRailsapplicaAon Folderstructurerails,rake,git

    3. YourintroductoryRailsexercise CodeSchoolGithubClassroom

    4. AddiAonalLiterature

    Introduction to Ruby on Rails Software Engineering II WS 2015/16 26 October 16, 2015