Class: FormatEngine::FormatSpec
- Inherits:
-
Object
- Object
- FormatEngine::FormatSpec
- Defined in:
- lib/format_engine/format_spec.rb
Overview
The format string parser.
Instance Attribute Summary collapse
-
#specs ⇒ Object
readonly
The array of specifications that were extracted.
Class Method Summary collapse
-
.get_spec(fmt_string) ⇒ Object
Either get a format specification from the pool or create one.
Instance Method Summary collapse
-
#initialize(fmt_string) ⇒ FormatSpec
constructor
Set up an instance of a format specification.
-
#scan_spec(fmt_string) ⇒ Object
Scan the format string extracting literals and variables.
-
#validate(engine) ⇒ Object
Validate the specs of this format against the engine.
Constructor Details
#initialize(fmt_string) ⇒ FormatSpec
Set up an instance of a format specification.
Note This is a private method (rdoc gets it wrong). To create new instances of FormatSpec do not use FormatSpec.new, but use FormatSpec.get_spec instead.
36 37 38 39 |
# File 'lib/format_engine/format_spec.rb', line 36 def initialize(fmt_string) @specs = [] scan_spec(fmt_string) end |
Instance Attribute Details
#specs ⇒ Object (readonly)
The array of specifications that were extracted.
30 31 32 |
# File 'lib/format_engine/format_spec.rb', line 30 def specs @specs end |
Class Method Details
.get_spec(fmt_string) ⇒ Object
Either get a format specification from the pool or create one.
24 25 26 27 |
# File 'lib/format_engine/format_spec.rb', line 24 def self.get_spec(fmt_string) @spec_pool ||= {} @spec_pool[fmt_string] ||= new(fmt_string) end |
Instance Method Details
#scan_spec(fmt_string) ⇒ Object
Scan the format string extracting literals and variables.
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/format_engine/format_spec.rb', line 42 def scan_spec(fmt_string) until fmt_string.empty? if fmt_string =~ /%[~@#$^&*\=?_<>\\\/\.,\|!]*[-+]?(\d+(\.\d+)?)?[a-zA-Z]/ @specs << FormatLiteral.new($PREMATCH) unless $PREMATCH.empty? @specs << FormatVariable.new($MATCH) fmt_string = $POSTMATCH else @specs << FormatLiteral.new(fmt_string) fmt_string = "" end end end |
#validate(engine) ⇒ Object
Validate the specs of this format against the engine.
56 57 58 59 |
# File 'lib/format_engine/format_spec.rb', line 56 def validate(engine) specs.each {|item| item.validate(engine)} self end |