Ruby class

Hello all. I have two classes:
class CartItem
attr_reader :product, :quantity

def initialize(product)
@product = product
@quantity = 1
end

def increment_quantity
@quantity += 1
end

def title
@product.title
end

def price
@product.price * @quantity
end
end

class Cart
attr_reader :items

def initialize
@items = []
end

def add_product(product)
current_item = @items.find {|item| item.product == product}
if current_item
current_item.increment_quantity
end
end
end

I don’t understand, how class Cart can see method “increment_quantity”
from class CartItem?

Alex: Because Ruby is a dynamically-typed language, it doesn’t have to
“see” the method. At runtime, if current_item happens to be an object
with responds to the ‘increment_quantity’ method, then
current_item.increment_quantity will work fine.

If the object does not respond to that method, it will raise an error.

On Thu, Feb 25, 2010 at 10:09 AM, Nick B. [email protected]
wrote:

Alex: Because Ruby is a dynamically-typed language, it doesn’t have to
“see” the method. At runtime, if current_item happens to be an object
with responds to the ‘increment_quantity’ method, then
current_item.increment_quantity will work fine.

If the object does not respond to that method, it will raise an error.

And methods are public if not specified otherwise.

Nick B. wrote:

Alex: Because Ruby is a dynamically-typed language, it doesn’t have to
“see” the method. At runtime, if current_item happens to be an object
with responds to the ‘increment_quantity’ method, then
current_item.increment_quantity will work fine.

If the object does not respond to that method, it will raise an error.

Thanks guys

Nick B. wrote:

Alex: Because Ruby is a dynamically-typed language, it doesn’t have to
“see” the method. At runtime, if current_item happens to be an object
with responds to the ‘increment_quantity’ method, then
current_item.increment_quantity will work fine.

If the object does not respond to that method, it will raise an error.

And another nuby question:

What class have object “current_item”?

Alex A. wrote:

What class have object “current_item”?

In general you won’t know until you run your code, as you’ve not shown
any code which adds something to @items. For example:

cart = Cart.new
product = Flurble.new
cart.items << product
cart.add_product(product)

In this case, current_item will be of class Flurble.

Brian C. wrote:

Alex A. wrote:

What class have object “current_item”?

In general you won’t know until you run your code, as you’ve not shown
any code which adds something to @items. For example:

cart = Cart.new
product = Flurble.new
cart.items << product
cart.add_product(product)

In this case, current_item will be of class Flurble.

Yes, you’re right:

def add_product(product)
current_item = @items.find {|item| item.product == product}
if current_item
current_item.increment_quantity
else
@items << CartItem.new(product)
end
end

in my case current_item w’ll be of class “CartItem”
Thank you for reply