|
|
|
@ -1,5 +1,5 @@
|
|
|
|
|
|
|
|
|
|
class Specs
|
|
|
|
|
class SpecFileParser
|
|
|
|
|
|
|
|
|
|
macro incompatible_methods(*names)
|
|
|
|
|
{% for name in names %}
|
|
|
|
@ -40,7 +40,7 @@ class Specs
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
class LongStringContainer
|
|
|
|
|
Specs.incompatible_methods as_s, as_a_or_s
|
|
|
|
|
SpecFileParser.incompatible_methods as_s, as_a_or_s
|
|
|
|
|
property value : String
|
|
|
|
|
|
|
|
|
|
def as_s_or_ls : String
|
|
|
|
@ -52,7 +52,7 @@ class Specs
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
class ArrayContainer
|
|
|
|
|
Specs.incompatible_methods as_s, as_s_or_ls
|
|
|
|
|
SpecFileParser.incompatible_methods as_s, as_s_or_ls
|
|
|
|
|
property value : Array(String)
|
|
|
|
|
|
|
|
|
|
def as_a_or_s : Array(String)
|
|
|
|
@ -64,7 +64,7 @@ class Specs
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
class Section
|
|
|
|
|
Specs.incompatible_methods as_s, as_a_or_s, as_s_or_ls
|
|
|
|
|
SpecFileParser.incompatible_methods as_s, as_a_or_s, as_s_or_ls
|
|
|
|
|
property name : String
|
|
|
|
|
property options : Array(String)
|
|
|
|
|
property content : Hash(String, StringContainer | ArrayContainer | LongStringContainer)
|
|
|
|
@ -367,12 +367,12 @@ class Specs
|
|
|
|
|
|
|
|
|
|
# The only function to use from outside.
|
|
|
|
|
|
|
|
|
|
def self.parse(file_name : String, options : Hash(String, String) | Nil = nil) : Specs | Nil
|
|
|
|
|
def self.parse(file_name : String, options : Hash(String, String) | Nil = nil) : SpecFileParser | Nil
|
|
|
|
|
begin
|
|
|
|
|
content = File.read(file_name)
|
|
|
|
|
content = content.rchop
|
|
|
|
|
|
|
|
|
|
specs = Specs.new
|
|
|
|
|
specs = SpecFileParser.new
|
|
|
|
|
unless options.nil?
|
|
|
|
|
options.each do |opt, val|
|
|
|
|
|
specs.assignments[opt] = StringContainer.new val
|