Sha256: a415a94e28a71ff77932e65e34981a337d9aaf61ed6d295c5ed3915412256eb0

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

module RegexpExamples
  class BaseRepeater
    def initialize(group)
      @group = group
    end

    def result(min_repeats, max_repeats)
      group_result = @group.result
      results = []
      min_repeats.upto(max_repeats) do |repeats|
        group_result.each do |result|
          results << result * repeats
        end
      end
      results.uniq
    end
  end

  class OneTimeRepeater < BaseRepeater
    def initialize(group)
      super
    end

    def result
      super(1, 1)
    end
  end

  class StarRepeater < BaseRepeater
    def initialize(group)
      super
    end

    def result
      super(0, TIMES)
    end
  end

  class PlusRepeater < BaseRepeater
    def initialize(group)
      super
    end

    def result
      super(1, TIMES)
    end
  end

  class QuestionMarkRepeater < BaseRepeater
    def initialize(group)
      super
    end

    def result
      super(0, 1)
    end
  end

  class RangeRepeater < BaseRepeater
    def initialize(group, min, has_comma, max)
      super(group)
      @min = min
      if max
        @max = max
      elsif has_comma
        @max = min + TIMES
      else
        @max = min
      end
    end

    def result
      super(@min, @max)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
regexp-examples-0.0.0 lib/regexp-examples/repeaters.rb