lib/stamp/emitters/composite.rb in stamp-0.5.0 vs lib/stamp/emitters/composite.rb in stamp-0.6.0
- old
+ new
@@ -1,31 +1,42 @@
module Stamp
module Emitters
class Composite
include Enumerable
- def initialize
- @emitters = []
+ attr_reader :emitters
+
+ def initialize(emitters=[])
+ @emitters = emitters
end
def format(target)
# NOTE using #each to build string because benchmarking shows
# that it's ~20% faster than .map.join('')
result = ''
- @emitters.each { |e| result << e.format(target).to_s }
+ emitters.each { |e| result << e.format(target).to_s }
result
end
- def <<(emitter)
- if emitter.is_a?(Enumerable)
- emitter.each { |e| @emitters << e }
- else
- @emitters << emitter
- end
+ def <<(emitter)
+ Array(emitter).each { |e| emitters << e }
end
def each(&block)
- @emitters.each(&block)
+ emitters.each(&block)
end
+
+ def -(others)
+ emitters - Array(others)
+ end
+
+ # Replace each element as we iterate with the result of the given block.
+ def replace_each!
+ emitters.each_with_index do |emitter, index|
+ emitters[index] = yield(emitter)
+ end
+
+ self
+ end
end
end
-end
\ No newline at end of file
+end