def initialize(dbh, recipe_id)
raise "Invalid DBH" if not dbh.kind_of?(DBI::DatabaseHandle)
raise "Bad Record ID" if dbh.select_one("select * from recipe where recipe_id=?", recipe_id).nil?
@dbh = dbh
@id = recipe_id
@ingredients = ObservableArray.new
@dbh.select_all("select ingredient_id from ingredient where recipe_id=? order by position", @id).each do |row|
@ingredients << $replicator.get('ingredient', row['ingredient_id'])
end
@ingredients.add_observer {
old_ingredients = Array.new
@dbh.select_all("select ingredient_id from ingredient where recipe_id=? order by position",@id).each do |row|
old_ingredients << $replicator.get('ingredient', row['ingredient_id'])
end
(@ingredients - old_ingredients).each do |ingredient|
@dbh.do("update ingredient set recipe_id=? where ingredient_id=?",@id,ingredient.id)
end
(old_ingredients - @ingredients).each do |ingredient|
@dbh.do("update ingredient set recipe_id=? where ingredient_id=?", nil, ingredient.id)
end
@ingredients.each_with_index do |ingredient,index|
ingredient.position = index
end
}
end