A Smalltalk-inspired dependency mechanism for Ruby. Like this:
class StockWatcher
include Dependency::Methods
def initialize(stock)
stock.express_interest_in :price, :for => self, :send_back =>
:price_changed
end
def price_changed(old_price, stock)
# gets called whenever the stock object changes it’s price
end
end
Completely unrelated to Rails’ dependency code - similar to observers
though.
http://rubyforge.org/projects/dependency
gem install dependency
Joel VanderWerf wrote:
Tim F. wrote:
A Smalltalk-inspired dependency mechanism for Ruby.
You can do this with http://raa.ruby-lang.org/project/observable:
And observer.rb
http://ruby-doc.org/stdlib/libdoc/observer/rdoc/index.html
Tim F. wrote:
end
end
Completely unrelated to Rails’ dependency code - similar to observers
though.
http://rubyforge.org/projects/dependency
gem install dependency
You can do this with http://raa.ruby-lang.org/project/observable:
require ‘observable’
include Observable
include Observable::Match
class Stock
extend Observable
observable :price
def initialize price
@price = price
end
def sell
puts “selling at #{price}”
end
end
class StockWatcher
GREATER_THAN = proc do |price|
MatchProc.new { |test_price| test_price > price }
end
def initialize(stock)
stock.when_price CHANGES do |price, old_price|
puts “price = #{price} (was #{old_price.inspect})”
end
stock.when_price GREATER_THAN[20] do
stock.sell
end
end
end
acme = Stock.new(10)
watcher = StockWatcher.new(acme)
10.step(30, 5) do |acme.price|
puts “—”
end
END
Output:
price = 10 (was nil)
price = 15 (was 10)
price = 20 (was 15)
selling at 25
price = 25 (was 20)
selling at 30
price = 30 (was 25)