class Xcodegen::Specparser
Public Class Methods
new()
click to toggle source
# File lib/spec/parser/spec_parser.rb, line 6 def initialize @parsers = [] end
Public Instance Methods
parse(path)
click to toggle source
@param path [String]
# File lib/spec/parser/spec_parser.rb, line 26 def parse(path) if @parsers.length == 0 register_defaults end filename = (Pathname.new(path)).absolute? ? path : File.join(Dir.pwd, path) raise StandardError.new "Error: Spec file #{filename} does not exist" unless File.exist? filename if filename.end_with? 'yml' or filename.end_with? 'yaml' spec_hash = YAML.load_file filename elsif filename.end_with? 'json' spec_hash = JSON.parse File.read(filename) else raise StandardError.new 'Error: Unable to determine file format of project file' end raise StandardError.new "Error: Invalid spec file. No 'version' key was present." unless spec_hash != nil and spec_hash.key? 'version' begin spec_version = Semantic::Version.new spec_hash['version'] rescue StandardError => _ raise StandardError.new 'Error: Invalid spec file. Project version is invalid.' end parser = @parsers.find { |parser| parser.can_parse_version(spec_version) } raise StandardError.new "Error: Invalid spec file. Project version #{spec_hash['version']} is unsupported by this version of xcodegen." unless parser != nil raise StandardError.new "Error: Invalid spec file. No 'configurations' key was present." unless spec_hash.key? 'configurations' raise StandardError.new "Error: Invalid spec file. Key 'configurations' should be a hash" unless spec_hash['configurations'].is_a?(Hash) raise StandardError.new 'Error: Invalid spec file. Project should have at least one configuration' unless spec_hash['configurations'].keys.count > 0 parser.parse(spec_version, spec_hash, filename) end
register(parser)
click to toggle source
# File lib/spec/parser/spec_parser.rb, line 10 def register(parser) if parser.respond_to?(:parse) && parser.respond_to?(:can_parse_version) @parsers << parser else raise StandardError.new 'Unsupported parser object. Parser object must support :parse and :can_parse_version' end end
register_defaults()
click to toggle source
# File lib/spec/parser/spec_parser.rb, line 18 def register_defaults @parsers.unshift *[ Xcodegen::Specparser10X.new, Xcodegen::Specparser11X.new ] end