Skip to content

Instantly share code, notes, and snippets.

@iafonov
Forked from MitinPavel/dci_and_aggregate.rb
Created August 15, 2011 08:33
Show Gist options
  • Save iafonov/1145904 to your computer and use it in GitHub Desktop.
Save iafonov/1145904 to your computer and use it in GitHub Desktop.
DCI and Aggregate
class Human
attr_accessor :address
end
class Address
def to_s
"City: #{@city}"
end
private
def initialize(city)
@city = city
end
end
module Policeman
has_many :coworkers, :as => :humans, :in_role => :policeman
has_many :caught_thefts, :as => :humans, :in_role => :thieft
def check_address(address)
# do some stuff
end
def notify_coworkers
coworkers.map &:search_neighborhood
end
private
def search_neighborhood
# do
end
end
module Thief
has_many :nigger_friends, :as => :humans, :in_role => :thief
end
module FakeAddress
def to_s
"City: LA"
end
end
class ArrestContext
def execute
@policeman.check_address @thief.address.to_s
@policeman.notify_coworkers
end
private
def initialize(policeman, thief) # imho this method looks ultra-ugly
@policeman = policeman
@policeman.extend Policeman
@thief = thief
@thief.extend Thief
@thief.address.extend FakeAddress
end
end
policeman, thief = Human.new, Human.new
thief.address = Address.new 'NY'
context = ArrestContext.new policeman, thief
context.execute
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment