File Manager
Viewing File: decorator_chain.rb
# coding: utf-8
require 'equatable'
module Pastel
# Collects a list of decorators for styling a string
#
# @api private
class DecoratorChain
include Enumerable
include Equatable
def initialize(decorators = [])
@decorators = decorators
end
# Add decorator
#
# @api public
def add(decorator)
if decorators.include?(decorator)
self.class.new(decorators)
else
self.class.new(decorators + [decorator])
end
end
# Iterate over list of decorators
#
# @api public
def each(&block)
decorators.each(&block)
end
# Create an empty decorator chain
#
# @return [DecoratorChain]
#
# @api public
def self.empty
new([])
end
protected
attr_reader :decorators
end # DecoratorChain
end # Patel