Hi,
I posted the other day, but I don't think I was clear enough, this
post tries to break down the essence of the problem
What is the best way to check what happened within a method call whilst still encapsulating the logic within the object. For example, I have an object method which calls upon other objects to get results back. Depending on the result of that call, different actions need to take place.
So, I have something like this:
class Cart has_one :postage_method
attr_accessor :postage_updated
def add(product) # do adding product calculate_postage end
def remove(product) # do removal of product calculate_postage end
private
def calculate_postage rate = postage_method.find_rate_for_weight(weight) if rate.some_condition # update db self.postage_updated = true else # update db end end end
class CartController before_filter :get_cart_from_db # into @cart
def add cart = @cart.add(product_from_params) if cart.postage_updated # tell user postage was automatically updated else # do something else end end end
To me, the problem with this approach, is that you need to repeat these checks for every method where you are calling the method, which soon adds up and is not DRY. So:
class CartController before_filter :get_cart_from_db # into @cart
def add cart = @cart.add(product_from_params) if cart.postage_updated # tell user postage was automatically updated else # do something else end end
def remove cart = @cart.remove(product_from_params) if cart.postage_updated # tell user postage was automatically updated else # do something else end end
..etc
end
Also, what happens if I need to check multiple different conditions? Am I going about this in entirely the wrong way?
Many thanks for any advice. Cheers, Jordan