Sha256: a5c5a0c11a5396fb6c1ddbd5457bb9d61ebb562b544ec80b85a6b95cd2f3a6b2

Contents?: true

Size: 709 Bytes

Versions: 2

Compression:

Stored size: 709 Bytes

Contents

# encoding: utf-8

module Excise
  class Base
    def initialize(string, pattern)
      @string  = string
      @pattern = pattern
      @matches = pattern_expression.match(@string)
      @output = {}
    end

    def parse
      tokens.each_with_index do |key, index|
        @output[key.to_sym] = @matches[index+1]
      end
      @output
    end

    def tokens
      @pattern.scan(token_expression).flatten
    end

    def pattern_expression
      Regexp.new(@pattern.gsub(special_characters_expression, '\\\\\0').gsub(token_expression, "(\.+)"))
    end

    def token_expression
      /{([^{}\t\r\n]+)}/
    end

    def special_characters_expression
      /[\\\^\$\*\+\.\?\(\)\[\]]/
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
excise-0.1.1 lib/excise/base.rb
excise-0.1.0 lib/excise/base.rb