Sha256: a24ae1ae53633eb07baf79808f0d84de375abe2c78b7bf0d44414b2744523024

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 KB

Contents

class MalformedLogEntry : Error {
  read_slot: 'text
  def initialize: @text
}

class LogEntry {
  read_write_slots: ('word, 'number)

  def LogEntry parse_entry: text {
    word, number = text split: "|"
    number = number to_i
    if: (word && number) then: {
      LogEntry new do: {
        word: word
        number: number
      }
    } else: {
      MalformedLogEntry new: text signal!
    }
  }
}

class LogFile {
  read_slots: ('filename, 'entries)
  def initialize: @filename entries: @entries ([]);
  def parse {
    @text = File read: @filename
    with_restarts: {
      skip_entry: { nil }
    } do: {
      @text lines each: |line| {
        @entries << (LogEntry parse_entry: line)
      }
    }
  }
}

class LogAnalyzer {
  read_slots: ('words, 'numbers)
  def initialize: @logfiles {
    @words = <[]>
    @numbers = <[]>
  }
  def analyze_all {
    @entries = @logfiles map: |f| {
      LogFile new: f . do: { parse } . entries
    } flatten

    @entries each: |e| { analyze: e }
  }
  def analyze: entry {
    if: (@words[entry word]) then: |val| {
      @words[entry word]: (val + 1)
    } else: {
      @words[entry word]: 1
    }
    if: (@numbers[entry number]) then: |val| {
      @numbers[entry number]: (val + 1)
    } else: {
      @numbers[entry number]: 1
    }
  }
}

l = LogAnalyzer new: ["examples/conditions_parsing_log.log"]
l analyze_all
"  words: #{l words to_a sort_by: 'second reverse inspect}" println
"numbers: #{l numbers to_a sort_by: 'second reverse inspect}" println

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fancy-0.6.0 examples/conditions_parsing.fy