Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSCE 740 Software Engineering

Similar presentations


Presentation on theme: "CSCE 740 Software Engineering"— Presentation transcript:

1 CSCE 740 Software Engineering
Ruby and the tools Topics Ruby Rails January 15, 2014

2 Ruby Rails and Beyond

3 The Rspec Book 2010 Latest versions ruby ruby-gems rspec rspec-rails
cucumber cucumber-rails database_cleaner webrat selenium rails

4 Programming Ruby 1.9 Dave Thomas
Read Chapters 1-3 Ruby3 Programming Ruby 1.9 Dave Thomas

5 Java  Ruby - Three Pillars of Ruby
Everything is an object. in Java an integer needs to be boxed to act like an object. Every operation is a method call on some object and returns a value. in Java operator overloading is different from method overriding All programming is metaprogramming. classes can be added or changed at any time even run time SaaS book – Fox and Patterson

6 Programming Ruby 1.9 Dave Thomas
Getting Started ruby –v ruby prog.rb // puts “hello world\n” irb // interactive ruby ri ClassName //documentation of ClassName Programming Ruby 1.9 Dave Thomas

7 Ruby is Really Object Oriented
Really Object Oriented – everything is an object For Java you might use pos = Math.abs(num) In Ruby num = -123 pos = num.abs Variables inside literal strings #{ … } notation puts “the absolute value of #{num} is #{pos}\n” Prog Ruby 1.9 Dave Thomas

8 Ruby - Variable Name Conventions
Variable Name Punctuation name - local variable $name, $NAME, - globals (never use anyway!) @name – instance variables – class variables Name – class names and constants Prog Ruby 1.9 Dave Thomas

9 Programming Ruby 1.9 Dave Thomas
Puts_examples song = 1 sam = "" def sam.play(a) "duh dum, da dum de dum ..." end puts "gin joint".length puts "Rick".index("c") puts 42.even? puts sam.play(song) print “string with no newline” Programming Ruby 1.9 Dave Thomas

10 Symbols :rhubarb - is an immutable string whose value is value is itself, well without the colon :rhubarb.to_s yields “rhubarb” “rhubarb”.to_sym yields :rhubarb not a string – string operations cannot be performed on it

11 Programming Ruby 1.9 Dave Thomas
Method definition def say_goodnight(name) result = "Good night, " + name return result end # Time for bed... puts say_goodnight("John-Boy") puts say_goodnight("Mary-Ellen") Programming Ruby 1.9 Dave Thomas

12 CSE Linux Labs 1D39 – Combination on secure site
CSE home page – login with CEC credentials Computer resources/Computer labs List of Linux workstations IP addresses – machine names Ifconfig // interface config IPv4 addr and Hardware=ethernet addr “man keyword” online unix documentation

13 Figure 3.1 Basic Ruby Elements
SaaS book – Fox and Patterson

14 List of Ruby 3 Examples Getting Started – “hello, Ruby Programmer”
Intro – Hello1 – def say_goodnight Puts examples Cmd_line – command line args passed into ruby program “arrays” – non-homogeneous hash_with_symbol_keys_19.rb – Weekdays – control structures – if-elseif-else example Tutclasses-

15 google(ruby 1.9 tutorial)
Ruby Programming Language - ruby-lang.org/ (again) (again) “Buy the book” page Regular Expressions (download pdf) Namespaces, Source Files, and Distribution (download pdf) Ruby Library Reference Built-in Classes and Modules (download pdf of the entry for class Array) Standard Library

16 Arrays and Hashes a = [ 1, 'cat', 3.14 ] # array with three elements
# access the first element a[0] 1 # set the third element a[2] = nil # dump out the array a [1, "cat", nil]

17 Control Structures IF if count > 10 // body puts "Try again"
elsif tries == 3    puts "You lose" else    puts "Enter a number" end

18 Control Structures While
while weight < 100 and numPallets <= 30    pallet = nextPallet()    weight += pallet.weight    numPallets += 1 end

19 More control puts "Danger, Will Robinson" if radiation > 3000
while square < 1000     square = square*square end More concisely, but readability?? square = square*square  while square < 1000

20 Regular Expressions Regular expressions are expressions that specify collections of strings (formally languages) Main operators: Assume r and s are regular expressions then so are: r | s alternation denotes L(r) U L(s) rs concatenation which denotes L(r) L(s) r* Kleene closure zero or more occurrences of strings from L(r) concatenated Base regular expressions strings are regexpr that match themselves,L(“ab”) = {“ab”} the empty string ε is a regular expr L(ε) = {“”}

21 Regular Expressions Examples
?

22 Ruby Regular Expressions Examples

23 Ruby Regular Expressions
if line =~ /Perl|Python/    puts "Scripting language mentioned: #{line}” end line.sub(/Perl/, 'Ruby')    # replace first 'Perl' with 'Ruby' line.gsub(/Python/, 'Ruby') # replace every 'Python' with 'Ruby'  

24 Blocks a = %w( ant bee cat dog elk ) # create an array
a.each { |animal| puts animal }  # iterate over the contents Yield – will be discussed next time [ 'cat', 'dog', 'horse' ].each do |animal|    print animal, " -- "

25 Blocks 5.times { print "*" } 3.upto(6) {|i| print i }
('a'..'e').each {|char| print char } *****3456abcde

26 Ruby I/O Already seen On reading puts print P Gets
Iterate over lines of file

27 while gets # assigns line to $_ if /Ruby/ # matches against $_
print             # prints $_    end ARGF.each { |line|  print line  if line =~ /Ruby/ }

28 Classes, Objects etc. class Song
def initialize(name, artist, duration)      @name     = name      @artist   = artist      @duration = duration    end s0 =Song.new

29 aSong = Song.new("Bicylops", "Fleck", 260) aSong.inspect aSong.to_s

30 Inheritance class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)      super(name, artist, duration)      @lyrics = lyrics    end End aSong = KaraokeSong.new("My Way", "Sinatra", 225, "And now, the...") aSong.to_s

31 Accessing instance variables
class Song   def name   end   def artist   def duration end

32 attr_reader :name, :artist, :duration … end
Class Song attr_reader :name, :artist, :duration end

33 class JavaSong { // Java code private Duration myDuration;
public void setDuration(Duration newDuration) {     myDuration = newDuration;    } class Song    attr_writer :duration end

34 def initialize(name, artist, duration) @name = name @artist = artist
class Song       def initialize(name, artist, duration)      @name     = name      @artist   = artist      @duration = duration      @plays    = 0    end    def play      @plays += 1              end

35 Class Methods class Example def instMeth # instance method … end
   def Example.classMeth      # class method   

36 Singletons class Logger private_class_method :new @@logger = nil
def Logger.create              end Logger.create.id

37 Access Control “Public methods can be called by anyone---there is no access control. Methods are public by default (except for initialize, which is always private). Protected methods can be invoked only by objects of the defining class and its subclasses. Access is kept within the family. Private methods cannot be called with an explicit receiver. Because you cannot specify an object when using them, private methods can be called only in the defining class and by direct descendents within that same object.”

38 Specifying Access class MyClass def method1 # default is 'public' #...
#...        end   protected       # subsequent methods will be 'protected'       def method2     # will be 'protected'            private             # subsequent methods will be 'private'       def method3     # will be 'private'            public              # subsequent methods will be 'public'       def method4     # and this will be 'public'         

39 September 11–Arrays Intro
a = [  , "pie", 99 ] a.type a[0] a[1] a[2] a[3]

40 Ruby 1.9 Buy the book page Regular Expressions (download pdf) Namespaces, Source Files, and Distribution (download pdf) Built-in Classes and Modules (download pdf of the entry for class Array) Free Content …

41 Rubular site - Regular Expressions
Rubular: a Ruby regular expression editor and tester [abc] A single character of: a, b or c [^abc] Any single character except: a, b, or c [a-z] Any single character in the range a-z [a-zA-Z] Any single character in the range a-z or A-Z ^ Start of line $ End of line \A Start of string \z End of string

42 . Any single character \s Any whitespace character \S Any non-whitespace character \d Any digit \D Any non-digit \w Any word character (letter, number, underscore) \W Any non-word character \b Any word boundary (...) Capture everything enclosed (a|b) a or b a? Zero or one of a a* Zero or more of a a+ One or more of a a{3} Exactly 3 of a a{3,} 3 or more of a a{3,6} Between 3 and 6 of a

43 Fig 3.3 SaaS book - All objects All time
SaaS book – Fox and Patterson

44 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock class BookInStock attr_reader :isbn, :price def initialize(isbn, = = Float(price) end Programming Ruby 1.9 & Pickaxe

45 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock b1 = BookInStock.new("isbn1", 3) puts b1 b2 = BookInStock.new("isbn2", 3.14) puts b2 b3 = BookInStock.new("isbn3", "5.67") puts b3 Programming Ruby 1.9 & Pickaxe

46 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock class BookInStock def initialize(isbn, = = Float(price) end def to_s "ISBN: price: b1 = BookInStock.new("isbn1", 3) puts b1 b2 = BookInStock.new("isbn2", 3.14) puts b2 b3 = BookInStock.new("isbn3", "5.67") puts b3 Programming Ruby 1.9 & Pickaxe

47 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock4 def end # .. book = BookInStock.new("isbn1", 12.34) puts "ISBN = #{book.isbn}" puts "Price = #{book.price}" class BookInStock def initialize(isbn, = = Float(price) end def Programming Ruby 1.9 & Pickaxe

48 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock5 book = BookInStock.new("isbn1", 33.80) puts "ISBN = #{book.isbn}" puts "Price = #{book.price}" book.price = book.price * 0.75 # discount price puts "New price = #{book.price}" class BookInStock attr_reader :isbn, :price def initialize(isbn, = = Float(price) end def = new_price # ... Programming Ruby 1.9 & Pickaxe

49 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock6 book = BookInStock.new("isbn1", 33.80) puts "ISBN = #{book.isbn}" puts "Price = #{book.price}" book.price = book.price * 0.75 # discount price puts "New price = #{book.price}" class BookInStock attr_reader :isbn attr_accessor :price def initialize(isbn, = = Float(price) end # ... Programming Ruby 1.9 & Pickaxe

50 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock7 def price_in_cents Integer(price* ) end # ... book = BookInStock.new("isbn1", 33.80) puts "Price = #{book.price}" puts "Price in cents = #{book.price_in_cents}" class BookInStock attr_reader :isbn attr_accessor :price def initialize(isbn, = = Float(price) end Programming Ruby 1.9 & Pickaxe

51 Programming Ruby 1.9 & 2.0 - Pickaxe
book_in_stock8 def price_in_cents Integer(price* ) end def = cents / # ... class BookInStock attr_reader :isbn attr_accessor :price def initialize(isbn, = = Float(price) end Programming Ruby 1.9 & Pickaxe

52 book = BookInStock. new("isbn1", 33. 80) puts "Price = #{book
book = BookInStock.new("isbn1", 33.80) puts "Price = #{book.price}" puts "Price in cents = #{book.price_in_cents}" book.price_in_cents = 1234


Download ppt "CSCE 740 Software Engineering"

Similar presentations


Ads by Google