class FormatEngine::FormatSpec

The format string parser.

The format string parser.

Constants

PARSE_REGEX

The regular expression used to parse variable specifications.

Attributes

specs[R]

The array of specifications that were extracted.

Public Class Methods

new(fmt_string) click to toggle source

Set up an instance of a format specification.

# File lib/format_engine/format_spec.rb, line 18
def initialize(fmt_string)
  @specs = []
  scan_spec(fmt_string)
end

Public Instance Methods

scan_spec(fmt_string) click to toggle source

Scan the format string extracting literals and variables.

# File lib/format_engine/format_spec.rb, line 30
def scan_spec(fmt_string)
  until fmt_string.empty?
    if (match_data = PARSE_REGEX.match(fmt_string))
      mid = match_data.to_s
      pre = match_data.pre_match

      @specs << FormatLiteral.new(pre) unless pre.empty?
      @specs << case
                when match_data[:var] then FormatVariable.new(mid)
                when match_data[:set] then FormatSet.new(mid)
                when match_data[:rgx] then FormatRgx.new(mid)
                when match_data[:per] then FormatLiteral.new("\%")
                else fail "Impossible case in scan_spec."
                end
      fmt_string = match_data.post_match
    else
      @specs << FormatLiteral.new(fmt_string)
      fmt_string = ""
    end
  end
end
validate(engine) click to toggle source

Validate the specs of this format against the engine.

# File lib/format_engine/format_spec.rb, line 24
def validate(engine)
  specs.each {|item| item.validate(engine)}
  self
end