Saturday, April 25, 2009

Ticket simply updates

I am very glad to say that we are increasing our customers for our lovely product ticketsimply(http://www.ticketsimply.com).

Right now these are list of customers for ticketsimply.

Seabird Tourists(http://www.seabirdtourists.com)
RoadLink India(http://www.roadlinkindia.com)
Sona Travels (http://sonatravels.in)
SR Konduskar(http://www.konduskarsr.com)
Manowj Travels(http://www.manowjtravels.com)
USL Bus(http://www.uslbus.com)
Shiva Express(http://www.shivaexpress.com)
Kiings Travels(http://www.kingstravels.in)
SRS Travels (http://www.srsbooking.com)

Hope we will be getting more and more customers.

Will update soon with some more customers list.

Clone in Ruby

Clone is help ful for the values changed in the object but not the complete object change.

Let me explain with an example.

take an array
arr1 = ["a", "b", "c", "d"]
let me initiliza arr1 to arr2
arr2 = arr1
puts arr2
=> ["a", "b", "c", "d"]


If I change arr1 values i.e.,
arr1[1] = "z"
puts arr1
=> ["a", "z", "c", "d"]

then see arr2
puts arr2
=> ["a", "z", "c", "d"]

#This wil get changed because the whole arr1 is pointed to one block of memory and the same arr2 is also pointing to the same block. You can check this.
arr1.id and arr2.id which will be same.
puts arr1.id
=> 40972250
puts arr2.id
=> 40972250

Suppose if you want arr2 as the previuos arr1 and arr1 should get changed?

Do this:

arr1 = ["a", "b", "c", "d"]
arr2 = arr1.clone
puts arr2
=> ["a", "b", "c", "d"]

arr1[1] = "z"
puts arr1
=> ["a", "z", "c", "d"]

puts arr2
=> ["a", "b", "c", "d"]



But if you change the whole arr1 to some other values then arr2 will not change.
Eg:
arr1 = ["a", "b", "c"]
arr2 = arr1
puts arr2
=> ["a", "b", "c"]

arr1 = ["z", "y", "x"]
puts arr2
=> ["a", "b", "c"]
arr2 will be same as old arr1 because arr1 memory locaton will be different after the new initilaization.

You can check this by arr1.id and arr2.id
In this case clone is not needed.



More about clone (copied from Ruby book(Dave Thomas, The Pragmatic Programmers))---

clone obj.clone -> anObject

Produces a shallow copy of obj---the instance variables of obj are copied, but not the objects they reference. Copies the frozen and tainted state of obj. See also the discussion under Object#dup .

class Klass
attr_accessor :str
end
s1 = Klass.new » #
s1.str = "Hello" » "Hello"
s2 = s1.clone » #
s2.str[1,4] = "i" » "i"
s1.inspect » "#"
s2.inspect » "#"