##
# Cucumber 3 dropped support for "Transforms". We backported them for *cucumber_factory*,
# which applies them to every assigned attribute.
# For any transformations that should not be propagated to cucumber_factory, see 
# parameter_types.rb
#
# NOTE: Only the first matching RegExp will be applied - all others are ignored!
#
class LegacyTransforms

  @transforms = []

  def self.register(regexp, &transformer)
    @transforms.unshift([regexp, transformer])
  end

  def self.transforms
    @transforms
  end

  def self.apply(value)
    return value if value.blank?

    transforms.each do |regexp, transformer|
      if (matched = value.match(regexp))
        args = matched.captures.empty? ? [value] : matched.captures
        return transformer.call(*args)
      end
    end

    value
  end

end

module TransformBackport

  def Transform(value)
    LegacyTransforms.apply(value)
  end

end

World(TransformBackport)


##
# Transforms are registered below
#

LegacyTransforms.register /^\[([^"\[\]]*)\]$/ do |array|
  ParameterTypeProxy.transform(:array, array)
end
