Ruby sample scripts - Object Orientation

CloneTest.rb

# A Bad example for implementing accessors. 
# Very much Java-like. See CloneTest2.rb
# for better implementation
 
class Address
      def setCity(city)
          @city = city
      end

      def getCity
          @city
      end
end

class Person
    def getName
        @name
    end

    def setName(name)
	@name = name
    end

    def getAge
        @age
    end

    def setAge(age)
	@age = age
    end

    def getLocation
        @location
    end
   
    def setLocation(loc)
        @location = loc
    end
end

p1 = Person.new
p1.setLocation Address.new

p1.setName "John"
p1.setAge 12
p1.getLocation.setCity "Chennai"

p2 = p1.clone # Shallow copy!

p1.setName "Smith"
p1.setAge 16
p1.getLocation.setCity "Delhi"

puts "Person p1 -> name: #{p1.getName}, age: #{p1.getAge}, city: #{p1.getLocation.getCity}"
puts "Person p2 -> name: #{p2.getName}, age: #{p2.getAge}, city: #{p2.getLocation.getCity}"

CloneTest2.rb
class Address
      attr_accessor :city
end

class Person
    attr_accessor :name, :age, :location
end

p1 = Person.new
p1.location = Address.new

p1.name = "John"
p1.age = 12
p1.location.city = "Chennai"

p2 = p1.clone # Shallow copy!

p2.name = "Bourne"
p2.age = 16
p2.location.city = "Delhi"

puts "Person p1 -> name: #{p1.name}, age: #{p1.age}, city: #{p1.location.city}"
puts "Person p2 -> name: #{p2.name}, age: #{p2.age}, city: #{p2.location.city}"


exception-test.rb
def printCallTrace
   calltrace = caller
   calltrace.each {|line| puts line }
end


class MyObject
   def greet
      puts "Hello..."
      printCallTrace    
   end
end

begin
   obj = MyObject.new
   obj.greet
   f = File.open("test.txt")

   f.each_line do |line|
      puts line
   end
   f.close

   obj.sayHello
   
rescue SystemCallError
   puts "Error in System call:" + $!
rescue NoMethodError
   puts "Method not found: " + $!
   return false
ensure
     f.close unless f.nil?
end


puts "End of program..."



laptop.rb
require "openclose"

# Demonstration of module (cross-cutting functionality)

class Laptop
    include OpenClose
    def initialize
        puts "Laptop initialized..."
    end
end

class Cupboard
    include OpenClose
    def initialize
        puts "Cupboard instantiated..."
    end
end

laptop = Laptop.new
laptop.open
laptop.close

cupboard = Cupboard.new
cupboard.open
cupboard.close



method_missing_example.rb
class Foo
    def method_missing(method_name, *args)
        print "Method: #{method_name} called\n"
    end

    def sayHello(args) 
        puts "Hello #{args}"
    end 

end

foo = Foo.new
foo.sayHello("John")
foo.greet
foo.sdfsddsf

MyString.rb
class String
	def speak
	    puts "My own custom method..."
        end
end

str = "Hello world..."
str.speak


openclose.rb
module OpenClose
   def open
     puts "opened..."
   end

   def close
     puts "closed..."
   end
end



Person.rb
class Person 

	attr_reader :name, :age, :city

	attr_writer :name, :age, :city

    def greet
		@name = "John"
		puts "Hello..."
	end

	def sayGoodBye
		puts @name
		puts "Good bye..."
	end



#	private :sayGoodBye

end



#p = Person.new

#p.greet if p.respond_to?(:sdfsdfsd)

#p.sayGoodBye



#p.name = "Smith"

#puts p.name



#print "Enter method: "

#method_name = gets.chomp



#p = Person.new

#p.send(method_name);




SingletonTest.rb
require 'singleton'

class World
    include Singleton
    def show_id
      self.object_id
    end
end

a = World.instance
b = World.instance
puts a.show_id
puts b.show_id