Sha256: 43fe0feb0e39219f12adab6744d87808e972b59064104221af06ad0873a383ac
Contents?: true
Size: 1.78 KB
Versions: 1
Compression:
Stored size: 1.78 KB
Contents
module Saga class Tokenizer def initialize(parser) @parser = parser end def process_line(input) if input[0,2].downcase == 'as' @parser.handle_story(self.class.tokenize_story(input)) elsif input[0,1] == '-' @parser.handle_author(self.class.tokenize_author(input)) elsif input =~ /^(\w|[\s-])+:/ @parser.handle_definition(self.class.tokenize_definition(input)) else @parser.handle_string(input) end end def process(input) input.split("\n").each do |line| process_line(line) end end def self.tokenize_story_attributes(input) return {} if input.nil? attributes = {} rest = [] parts = input.split(/\s/) parts.each do |part| if part.strip == '' next elsif match = /\#(\d+)/.match(part) attributes[:id] = match[1].to_i else rest << part end end attributes[:status] = rest.join(' ') unless rest.empty? attributes end def self.tokenize_story(input) description, attributes = input.split('-') story = tokenize_story_attributes(attributes) story[:description] = description.strip story end def self.tokenize_definition(input) if match = /^([^:]+)\s*:\s*(.+)\s*$/.match(input) {:title => match[1], :definition => match[2]} else {} end end def self.tokenize_author(input) author = {} parts = input[1..-1].split(',') author[:name] = parts[0].strip if parts[0] author[:email] = parts[1].strip if parts[1] author[:company] = parts[2].strip if parts[2] author[:website] = parts[3].strip if parts[3] author end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
saga-0.1.0 | lib/saga/tokenizer.rb |