module Picky
  module Generators
    module Partial
      # The subtoken partial strategy.
      #
      # If given "florian"
      # it will index "floria", "flori", "flor", "flo", "fl", "f"
      # (Depending on what the given from value is, the example is with option from: 1)
      #
      class Infix < Strategy
        attr_reader :min,
                    :max

        # The min option signifies with what size it
        # will start in generating the infix tokens.
        #
        # Examples:
        #
        # With :hello, and max: -1 (default)
        # * min: 1 # => [:hello, :hell, :ello, :hel, :ell, :llo, :he, :el, :ll, :lo, :h, :e, :l, :l, :o]
        # * min: 4 # => [:hello, :hell, :ello]
        #
        # With :hello, and max: -2
        # * min: 1 # => [:hell, :ello, :hel, :ell, :llo, :he, :el, :ll, :lo, :h, :e, :l, :l, :o]
        # * min: 4 # => [:hell, :ello]
        #
        # (min 1 is default)
        #
        def initialize(options = {})
          super()

          @min = options[:min] || 1
          @max = options[:max] || -1
        end

        # Yields each generated partial.
        #
        def each_partial(token, &block)
          token.each_intoken min, max, &block
        end
      end
    end
  end
end
