class KillmailParser
Constants
- REGEXP_PRIMITIVES
Attributes
attackers[R]
date[R]
destroyed_items[R]
dropped_items[R]
killmail[R]
victim[R]
Public Class Methods
new(killmail)
click to toggle source
# File lib/neweden-km-parser.rb, line 21 def initialize(killmail) @valid = false @killmail = killmail.to_s.dup.freeze process end
Public Instance Methods
_attacker()
click to toggle source
# File lib/neweden-km-parser.rb, line 154 def _attacker Regexp.new(%{#{_name}\n#{_security}\n#{_corp}\n#{_alliance}\n#{_faction}\n#{_ship}\n#{_weapon}\n#{_damage_done}}) end
_item()
click to toggle source
# File lib/neweden-km-parser.rb, line 146 def _item /^([^,()]*)(, Qty: (\d+))?( \((.*)\))?$/ end
_victim()
click to toggle source
# File lib/neweden-km-parser.rb, line 150 def _victim Regexp.new(%{#{_victim_name}\n#{_corp}\n#{_alliance}\n#{_faction}\n#{_destroyed}\n#{_system}\n#{_security}\n#{_damage_taken}}) end
parse_attackers(pbody)
click to toggle source
# File lib/neweden-km-parser.rb, line 35 def parse_attackers(pbody) raise "Could not parse attackers" if pbody.nil? || pbody.empty? split_on = if pbody =~ /Destroyed items:/ @has_destroyed = true 'Destroyed items:' elsif pbody =~ /Dropped items:/ @has_destroyed = false 'Dropped items:' else @has_destroyed = false nil end attacker_txt, pbody = if split_on pbody.split(split_on).map { |txt| txt.strip } else [pbody.strip, nil] end attackers = attacker_txt.split("\n\n").map { |txt| txt.strip } [attackers, pbody] end
parse_destroyed_items(pbody)
click to toggle source
# File lib/neweden-km-parser.rb, line 59 def parse_destroyed_items(pbody) return [nil, nil] if pbody.nil? || pbody.empty? if pbody =~ /Dropped items:/ pbody.split("Dropped items:").map { |txt| txt.strip } else [pbody.strip, nil] end end
parse_victim_and_date(pbody)
click to toggle source
# File lib/neweden-km-parser.rb, line 27 def parse_victim_and_date(pbody) raise "Could not parse victim and date" if pbody.nil? || pbody.empty? header, pbody = pbody.split("Involved parties:").map { |txt| txt.strip } date, victim = header.split("\n\n").map { |txt| txt.strip } [date, victim, pbody] end
process()
click to toggle source
# File lib/neweden-km-parser.rb, line 69 def process date, victim, pbody = parse_victim_and_date(@killmail) attackers, pbody = parse_attackers(pbody) destroyed, pbody = parse_destroyed_items(pbody) if pbody && @has_destroyed dropped = pbody.nil? ? nil : pbody.strip @date = DateTime.parse(date) victim_match = _victim.match(victim) @victim = { :name => victim_match[1], :corp => victim_match[2], :alliance => victim_match[3], :faction => victim_match[4], :ship => victim_match[5], :system => victim_match[6], :security => victim_match[7], :damage => victim_match[8] } @attackers = [] attackers.each do |attacker| attacker_match = _attacker.match(attacker) attacker_name_match = /^([^()]+)( \((.*)\))?$/.match(attacker_match[1]) attacker_name = attacker_name_match[1] final_blow = !!attacker_name_match[3] @attackers << { :name => attacker_name, :final_blow => final_blow, :security => attacker_match[2], :corp => attacker_match[3], :alliance => attacker_match[4], :faction => attacker_match[5], :ship => attacker_match[6], :weapon => attacker_match[7], :damage => attacker_match[8] } end @destroyed_items = [] @dropped_items = [] [[destroyed, @destroyed_items], [dropped, @dropped_items]].each do |body, items| body.to_s.split(/[\n\r]+/).each do |item| item_match = _item.match(item.strip) qty, loc = [item_match[3] || 1, item_match[5]] items << { :name => item_match[1], :quantity => qty.to_i, :location => loc } end end @hash = { :victim => @victim, :attackers => @attackers, :destroyed_items => @destroyed_items, :dropped_items => @dropped_items, :date => @date } @valid = true end
to_hash()
click to toggle source
# File lib/neweden-km-parser.rb, line 138 def to_hash @hash end
to_json()
click to toggle source
# File lib/neweden-km-parser.rb, line 142 def to_json @hash.to_json end
valid?()
click to toggle source
# File lib/neweden-km-parser.rb, line 134 def valid? @valid end