# Dependency 1.0.0

**URL:** <https://www.ruby-forum.com/t/dependency-1-0-0/73061>\
**Category:** Ruby\
**Created:** [October 20, 2006, 11:11pm UTC](https://www.ruby-forum.com/t/dependency-1-0-0/73061 "2006-10-20T23:11:37Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![s0nspark](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f475e1/32.png) [@s0nspark](https://www.ruby-forum.com/u/s0nspark)\
**Post date:** [October 20, 2006, 11:11pm UTC](https://www.ruby-forum.com/t/dependency-1-0-0/73061/1 "2006-10-20T23:11:37Z")

</div>

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](http://rubyforge.org/projects/dependency)

gem install dependency

---

<div class="post-metadata">

**Author:** ![s0nspark](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f475e1/32.png) [@s0nspark](https://www.ruby-forum.com/u/s0nspark)\
**Post date:** [November 7, 2006, 10:57am UTC](https://www.ruby-forum.com/t/dependency-1-0-0/73061/2 "2006-11-07T10:57:51Z")

</div>

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:](http://raa.ruby-lang.org/project/observable:)

And observer.rb 🙂

[http://ruby-doc.org/stdlib/libdoc/observer/rdoc/index.html](http://ruby-doc.org/stdlib/libdoc/observer/rdoc/index.html)

---

<div class="post-metadata">

**Author:** ![s0nspark](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f475e1/32.png) [@s0nspark](https://www.ruby-forum.com/u/s0nspark)\
**Post date:** [October 20, 2006, 11:59pm UTC](https://www.ruby-forum.com/t/dependency-1-0-0/73061/3 "2006-10-20T23:59:44Z")

</div>

Tim F. wrote:

> ```
> end
> end
> 
> ```
> 
> Completely unrelated to Rails’ dependency code - similar to observers  
> though.
> 
> [http://rubyforge.org/projects/dependency](http://rubyforge.org/projects/dependency)
> 
> gem install dependency

You can do this with [http://raa.ruby-lang.org/project/observable:](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)
