SEG4110 – Advanced Software Design and Reengineering TOPIC N Ruby on Rails.

Slides:



Advertisements
Similar presentations
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 15 Introduction to Rails.
Advertisements

Java Script Session1 INTRODUCTION.
The Librarian Web Page Carol Wolf CS396X. Create new controller  To create a new controller that can manage more than just books, type ruby script/generate.
Introduction to PHP MIS 3501, Fall 2014 Jeremy Shafer
Ruby on Rails Model of MVC. Model-View-Controller Paradigm A way of organizing a software system Benefits: Isolation of business logic from the user interface.
1.  Understanding about How to Working with Server Side Scripting using PHP Framework (CodeIgniter) 2.
Chapter 15 © 2010 by Addison Wesley Longman, Inc Origins and Uses of Ruby - Designed by Yukihiro Matsumoto; released in Use spread rapidly.
Creating Web Services with Ruby on Rails Robert Thew Internet and Web Systems II.
Ruby on Rails by Manik Juneja Ruby On Rails. Ruby on Rails by Manik Juneja Rails is a Web Application development framework. Based on the MVC pattern.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 14 Web Database Programming Using PHP.
Creating Web Services with Ruby on Rails Robert Thew Internet and Web Systems II.
27-Jun-15 Rails. What is Rails? Rails is a framework for building web applications This involves: Getting information from the user (client), using HTML.
ASP.NET Programming with C# and SQL Server First Edition
Ruby on Rails: An Introduction JA-SIG Summer Conference 2007 Michael Irion The University of Tulsa.
| Lugano, Ruby on Rails.
A little engineering on Rails Robert W. Hasker. Goals Intro to the Rails framework ▫Basic concepts: MVC, Active Record ▫A bit of Ruby Using Rails to build.
Ruby on Rails. What is Ruby on Rails? Ruby on Rails is an open source full-stack web framework. It is an alternative to PHP/MySQL. It can render templates,
Ruby on Rails CSCI 6314 David Gaspar Jennifer Garcia Avila.
The Ruby Programming Language
Rails and Grails. To get started Make sure you have java installed You can get the sdk and jre at:
1 Dr Alexiei Dingli Web Science Stream Models, Views and Controllers.
INTERNET APPLICATION DEVELOPMENT For More visit:
1 An Introduction to the Development of Web Applications using Ruby on Rails with Ajax Ansgar Berhorn, B.Sc. and Mike Rowe, Ph.D.
1 Dr Alexiei Dingli Web Science Stream Advanced ROR.
9 Chapter Nine Compiled Web Server Programs. 9 Chapter Objectives Learn about Common Gateway Interface (CGI) Create CGI programs that generate dynamic.
1 Dr Alexiei Dingli Web Science Stream Introducing Rails.
Ruby on Rails Your first app. Rails files app/ Contains the controllers, models, views and assets for your application. You’ll focus on this folder for.
ASP.NET Programming with C# and SQL Server First Edition Chapter 3 Using Functions, Methods, and Control Structures.
Creating Dynamic Web Pages Using PHP and MySQL CS 320.
Lecture 11 Rails Topics SaaSSaaS Readings: SaaS book Ch February CSCE 740 Software Engineering.
20-753: Fundamentals of Web Programming 1 Lecture 12: Javascript I Fundamentals of Web Programming Lecture 12: Introduction to Javascript.
© Copyright IBM Corporation 2007 AP/Americas April 15-18, 2007 Anaheim, California Introduction to RubyOnRails - a J2EE replacement? Russell Scheerer –
The Active Record Paradigm Databases in Database-Centric Web Site Development.
Copyright © 2010 Certification Partners, LLC -- All Rights Reserved Perl Specialist.
Variables and ConstantstMyn1 Variables and Constants PHP stands for: ”PHP: Hypertext Preprocessor”, and it is a server-side programming language. Special.
Ruby on Rails: Databases. Rails Database Familiar Table Concept Naming convention – lower case, plural (i.e. tweets) How to Access (find), Update, Delete.
Rails & Ajax Module 5. Introduction to Rails Overview of Rails Rails is Ruby based “A development framework for Web-based applications” Rails uses the.
RUBY ON RAILS (RoR) Ishwor Khadka. Why Ruby on Rails?
Chapter 15 © 2013 by Pearson Overview of Rails - Rails is a development framework for Web-based applications - Based on MVC architecture for applications.
Copyright © 2003 ProsoftTraining. All rights reserved. Perl Fundamentals.
©SoftMooreSlide 1 Introduction to HTML: Forms ©SoftMooreSlide 2 Forms Forms provide a simple mechanism for collecting user data and submitting it to.
Introduction to Ruby&Rails Yuri Veremeyenko Monica Verma.
CS 160 and CMPE/SE 131 Software Engineering February 9 Class Meeting Department of Computer Science Department of Computer Engineering San José State University.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 14 Web Database Programming Using PHP.
Ruby on Rails. Web Framework for Ruby Designed to make it easier to develop, deploy, and maintain web applications Design with Model-View-Controller –almost.
JRuby on Rails Presenter Name
JRuby on Rails Brian Leonard ブライアン レオナルド
Jim Fawcett CSE686 – Internet Programming Spring 2014
Web Database Programming Using PHP
IST 220 – Intro to Databases
Ruby: An Introduction Created by Yukihiro Matsumoto in 1993 (named after his birthstone) Pure OO language (even the number 1 is an instance of a class)
Jim Fawcett CSE686 – Internet Programming Spring 2012
Web Database Programming Using PHP
Play Framework: Introduction
PHP / MySQL Introduction
Intro to PHP & Variables
MVC Framework, in general.
Ruby on Rails by Manik Juneja
Agile Web Development with Ruby and Rails
Ruby on Rails by Manik Juneja
PHP.
T. Jumana Abu Shmais – AOU - Riyadh
Chapter 15 Introduction to Rails.
Web DB Programming: PHP
HYPERTEXT PREPROCESSOR BY : UMA KAKKAR
Intro to PHP.
Plug-In Architecture Pattern
Presentation transcript:

SEG4110 – Advanced Software Design and Reengineering TOPIC N Ruby on Rails

SEG Topic N - Ruby on Rails2 What is Ruby on Rails? Ruby is an object-oriented programming language -Incorporates ideas from Smalltalk, Java, etc. -Very pure Rails is a Ruby framework for creating web applications quickly and easily

SEG Topic N - Ruby on Rails3 The Ruby language - basics An open-source, dynamic language Created by Yukihiro “ matz ” Matsumoto —Originated in 2001, Public release in 2005 Supported by a large community Main website: Rapidly growing library and online resources Store programs in files with extension.rb Or run the irb interpreter

SEG Topic N - Ruby on Rails4 Until last year, the fastest growing language

SEG Topic N - Ruby on Rails5 Ruby: Flexibility, simplicity and power Everything is an object Inherits from the Smalltalk legacy No variable declarations needed Dynamic typing ‘ Blocks ’ allow you to define new control structures ‘ Mixins ’ (modules) give power of multiple inheritance without the drawbacks. Code can be added to a class dynamically Easy to Add C code (or code in another language) Extend the language

SEG Topic N - Ruby on Rails6 Defining functions def helloworld puts "Hello World" end def hello(arg) puts "hello "+arg end Example runs hello "Tim ” hello ("Tim") # preferred - usually helps prevent bugs

SEG Topic N - Ruby on Rails7 A few more details 1 Placeholder substitution – works with "", but not with ' ' puts "hello #{arg} Your argument is #{arg.length} long!" Default argument to a method – and concatenation def hello(arg="World") puts "hello "+arg end Defining an array x=[1, 2,3] y= %w(an array of strings with the words of this phrase) Sorting - the ! Means alter (side-effect) the object x.sort!

SEG Topic N - Ruby on Rails8 A few more details 2 To access array elements x [1..3] #elements 1 to 3 x [1,3] # elements 1 for 3 x [-3,1] # from 3rd-from-the-end for 1 Non numeric collections are called hashes z = Hash.new z [ ‘ SEG4210 ’ ] = ‘ Advanced Software Engineering ’ anotherhash = { ‘ test ’ => 12334, ‘ test2 ’ => 98776} A Ruby method will always return the value of the last expression evaluated Although using ‘ return ’ is good practice for clarity Use ` to execute a program in the operating system `ls`

SEG Topic N - Ruby on Rails9 A few more details 3 Symbols E.g. :all Represent specific language keywords used in various contexts

SEG Topic N - Ruby on Rails10 do |name| print name end For number in [1,2,3] do print number end while tired sleep end Ruby has various other allowed syntaxes, including allowing { }

SEG Topic N - Ruby on Rails11 “Duck typing” In Ruby you don't declare the type of a variable You can put any object in a variable. You can determine the type in order to make a decision “ if it talks like a duck, it is a duck ”

SEG Topic N - Ruby on Rails12 Defining a class The initialize method is used to construct the is an instance variable all instance variables are private by default class Greeter def initialize(name = = name end def say_hi puts "Hi end To create an object g = Greeter.new("Pat")

SEG Topic N - Ruby on Rails13 Attributes: To make instance variables public attr_accessor :name, :studentNumber Now I can say in another class g.name="Tim" and g.name I can also separately say attr_reader :studentNumber attr_writer :age

SEG Topic N - Ruby on Rails14 Creating a subclass def specialGreeter < greeter To call the same method with same arguments in a superclass super

SEG Topic N - Ruby on Rails15 Class variables (static variables) = 5

SEG Topic N - Ruby on Rails16 Introspection Greeter.instance_methods ["method", "send", "object_id", "singleton_methods", "say_hi", "__send__", "equal?", "taint", "frozen?", "instance_variable_get", "kind_of?", "to_a", "hello", "instance_eval", "type", "protected_methods", "extend", "eql?", "display", "instance_variable_set", "hash", "is_a?", "to_s", "class", "tainted?", "private_methods", "untaint", "id", "inspect", "dello", "==", "===", "clone", "public_methods", "respond_to?", "freeze", "__id__", "=~", "methods", "nil?", "dup", "instance_variables", "instance_of?"] Note that the "hello" method we defined earlier is here It is inherited from class Object Inspecting an object g.inspect or p(g)

SEG Topic N - Ruby on Rails17 Dynamic classes Ruby is a very dynamic language You can modify a class at any time! Add new methods, variables, etc.

SEG Topic N - Ruby on Rails18 Modules - have some similarities to interfaces You can achieve multiple inheritance by simply adding “ mixin ” modules to several classes module MyModule def func(arg) doSomethingWith arg end def myclass include MyModule … end Modules also provide namespaces

SEG Topic N - Ruby on Rails19 Loading modules from files require (MyModule.rb) Standard modules already loaded in every Ruby class Comparable, Enumerable FileTest GC, Kernel Math ObjectSpace, Precision, Process, Signal Use notation: X::Y to refer to class X in module Y

SEG Topic N - Ruby on Rails20 The Ruby on Rails framework Makes it easy to develop web applications Most manipulate data in a database such as MySQL or Postgres Can also manipulate flat files Integrates with AJAX Suggested book: Agile Web Development with Rails By —Dave Thomas —and David Heinemeier Hansson (creater of Rails) Second edition Jan 2007,

SEG Topic N - Ruby on Rails21 Rails philosophies Model-View-Controller (MVC) Separation of the data from the presentation from the control logic Don ’ t Repeat Yourself E.g. define your database structure in just one place Convention over Configuration Sensible defaults Agility The application can be quickly changed

SEG Topic N - Ruby on Rails22 Models MVC Models Whatever is shown in the class diagram plus business rules The Ruby model and the Database are separated using ORM (Object Relational Mapping) Avoids any need to embed SQL code in an application

SEG Topic N - Ruby on Rails23 Active Record as the basis for the Model Database tables map to Rails classes Rows map to objects require 'active_record ’ # The following is generated from the database and attributes are filled # in from database columns class Order < ActiveRecord::Base end order = Order.find(1) order.discount = 0.5 order.save

SEG Topic N - Ruby on Rails24 Querying the model in Rails code * # Prints out the amount for each order Order.where(:name => ‘dave’).each do |order| puts order.amount End # Gets the number of orders made this past week. Order.where(‘created_at > ?’, Time.now – 1.week).count

SEG Topic N - Ruby on Rails25 The View – Erb Templates * Ex: index.html.erb Order ( ) Rails will interpret ruby code in, and will generate an html file for the browser. The above code lists all orders and displays the name and amount.

SEG Topic N - Ruby on Rails26 The Controller Routes http requests to Ruby methods Allows you to create people-friendly URLs Manages Caching Database data stored in memory for a speed boost Manages Sessions E.g. a shopping session

SEG Topic N - Ruby on Rails27 Getting started You need to install Ruby Rails A database I leave it to the TA and/or reference manuals to do that The hard part of application development is now done!!

SEG Topic N - Ruby on Rails28 Really getting started * Create a new empty default application with the command rails new myapplication This will install directories needed README components/ doc/ public/ tmp/ Rakefile config/ lib/ script/ vendor/ app/ db/ log/ test/ app contains controllers/, models/ and views/ Start the built-in server rails s

SEG Topic N - Ruby on Rails29 Here’s what the default application looks like

SEG Topic N - Ruby on Rails30 Next step: Add a controller * rails g controller Airline This will generate an empty (hook, or stub) class airline_controller.rb class AirlineController < ApplicationController end Now let us add a method addflight to the Airline class def addflight end We would call this from a URL as follows

SEG Topic N - Ruby on Rails31 Next step: Add a view using the Erb approach We need a ‘ template ’ file called addflight.html.erb Add a flight/title> Add a flight

SEG Topic N - Ruby on Rails32 Some things you can embed in rhtml code Create an href to another ruby action "help" %>

SEG Topic N - Ruby on Rails33 We need to actually build a database to go any further * It is possible that the database is already there But Ruby provides nice facilities for setting up a database incrementally in Ruby code In development mode, Rails uses sqlite3 by default A lightweight database No need to set anything up Read/Writes data in db/development.sqlite3 You can configure which database you want in /config/database.yml

SEG Topic N - Ruby on Rails34 Creating a simple database * The rule is one table per class rails g model regularflight You will then find a file db/migrate/file 001_create_regularflights.rb class CreateRegularflights < ActiveRecord::Migration def self.up create_table :regularFlights do |t| t.column :number, :integer t.column :departuretime, :string t.column :origin, :string t.column :destination, :string end

SEG Topic N - Ruby on Rails35 Next steps Make Rails upgrade the database rake db:migrate Now create a controller admins rails g controller admins And edit app/controllers/admin_controller.rb class AdminController < ApplicationController scaffold :regularflight end Go to And you will see a page where you can add flights

SEG Topic N - Ruby on Rails36 Making Ruby upgrade the database: Adding a new column * class AddPrice < ActiveRecord::Migration def self.up add_column :products, :price, :decimal, :precision => 8, :scale => 2, :default => 0 end def self.down remove_column :products, :price end Note: Make sure to run rake db:migrate

SEG Topic N - Ruby on Rails37 Ruby on Rails’ naming * If you have a table called People, RoR will generate a class called Person and vice-versa Other transformations: Specific_flights SpecificFlight Person_roles PersonRole Model names are singular, and controller names are plural: Order OrdersController

SEG Topic N - Ruby on Rails38 Enhancing model classes When we create a new class/table the model code for the class is empty: class Product < ActiveRecord::Base end

SEG Topic N - Ruby on Rails39 Validation * Different validations can be applied. class Product < ActiveRecord::Base validates :title, :presence => true validates :description, :length => { :maximum => 140 } validates :image_url, :presence => true end The generated web page for adding products will automatically ensure this data is filled in Fields with errors are highlighted Errors are summarized at the top of the form

SEG Topic N - Ruby on Rails40 Example generated web page

SEG Topic N - Ruby on Rails41 Other validations * :numericality => true :uniqueness => true :length => {:maximum => 140, :minimum => 20} def validate errors.add(:price, "should be at least 0.01" ) if price.nil? || price < 0.01 end validates :image_url, :format => { :with => %r{\.(gif|jpg|png)$}i, :message => "must be a URL for a GIF, JPG, or PNG image”}

SEG Topic N - Ruby on Rails42 Class methods in the model to return a set of instances * class Product < ActiveRecord::Base # The self. Means it is a class (static) method def self.find_products_for_sale # Returns all orders, sorted by title. order(:title) end # validation stuff... end

SEG Topic N - Ruby on Rails43 Specifying associations in model classes class Order < ActiveRecord::Base has_many :line_items … end class Product < ActiveRecord::Base has_many :line_items has_many :orders, :through => :line_items … end class LineItem < ActiveRecord::Base belongs_to :order belongs_to :product … end

SEG Topic N - Ruby on Rails44 Generating automatic documentation rake doc:app rake stats (in /Users/dave/Work/depot) | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | | Helpers | 17 | 15 | 0 | 1 | 0 | 13 | | Controllers | 229 | 154 | 5 | 23 | 4 | 4 | | Components | 0 | 0 | 0 | 0 | 0 | 0 | | Functional tests | 206 | 141 | 8 | 25 | 3 | 3 | | Models | 261 | 130 | 6 | 18 | 3 | 5 | | Unit tests | 178 | 120 | 5 | 13 | 2 | 7 | | Libraries | 0 | 0 | 0 | 0 | 0 | 0 | | Integration tests | 192 | 130 | 2 | 10 | 5 | 11 | | Total | 1083 | 690 | 26 | 90 | 3 | 5 | Code LOC: 299 Test LOC: 391 Code to Test Ratio: 1:1.3

SEG Topic N - Ruby on Rails45 Automatic testing in RoR Unit tests - test the model In test/unit Functional tests - test a controller action In test/functional Integration tests - test flow through the system In test/integration

SEG Topic N - Ruby on Rails46 Sample initially generated test for Product require File.dirname(__FILE__) + '/../test_helper' class ProductTest < Test::Unit::TestCase #load test data fixtures :products def test_truth assert true end

SEG Topic N - Ruby on Rails47 A test to verify that an empty product is not valid and that empty variables are invalid def test_invalid_with_empty_attributes product = Product.new assert !product.valid? assert product.errors.invalid?(:title) assert product.errors.invalid?(:description) assert product.errors.invalid?(:price) assert product.errors.invalid?(:image_url) end

SEG Topic N - Ruby on Rails48 Checking some other properties def test_positive_price product = Product.new(:title => "My Book Title", :description => "yyy", :image_url => "zzz.jpg" ) product.price = -1 assert !product.valid? assert_equal "should be at least 0.01", product.errors.on(:price) product.price = 0 assert !product.valid? assert_equal "should be at least 0.01", product.errors.on(:price) product.price = 1 assert product.valid? end