class Icing::DecoratorFactory
Public Instance Methods
create(undecorated_object, definition)
click to toggle source
# File lib/icing/decorator_factory.rb, line 3 def create(undecorated_object, definition) return undecorated_object if definition.empty? nested_decorators(undecorated_object, layers(definition)) end
Private Instance Methods
layers(definition)
click to toggle source
# File lib/icing/decorator_factory.rb, line 11 def layers(definition) ret = [] definition.each do |method_name, decorations| decorations_array = decorations.to_a.flat_map(&:to_a) # no composites decorations_array.each_with_index do |decoration, i| ret[i] = (ret[i] || {}).merge(method_name => decoration) end end ret end
nested_decorators(object, layers)
click to toggle source
# File lib/icing/decorator_factory.rb, line 23 def nested_decorators(object, layers) outer_decorator = Decorator.new(object, layers.first) layers.drop(1).reduce(outer_decorator) do |undecorated_object, definition| Decorator.new(undecorated_object, definition) end end