Decorator chain POC
class LineDataBuilder
def self.for(lines)
@lines = lines
end
def restricted_by(rules)
@rules = rules
self
end
def include_depots
@with_depots = true
self
end
def available_at(time)
@available_at = time
self
end
def build
_lines = lines
decorators.each{ |d| _lines = d.decorate(_lines) }
_lines
end
private
def decorators
decorators = []
decorators << AvailabilityDecorator.new(@rules, @available_at)
decorators << RuleDecorator.new(@rules, @available_at)
decorators << DepotDecorator.new(@rules, @division_id) if @division_id
decorators
end
end
LineDataBuilder
.for(lines)
.restricted_by(rules)
.available_at(Time.current)
.include_depots
.build
LineDataBuilder
.for(lines)
.restricted_by(rules)
.build