class UniversalAccessLogParser::ElementGroup

Public Class Methods

new(parent, &block) click to toggle source
# File lib/universal-access-log-parser.rb, line 120
def initialize(parent, &block)
        @parent = parent
        instance_eval &block
end
parser(name, &block) click to toggle source

custom parser definition

# File lib/universal-access-log-parser.rb, line 126
def self.parser(name, &block)
        define_method(name, &block)
end

Public Instance Methods

date(name, format = '%d/%b/%Y:%H:%M:%S %z', options = {}) click to toggle source
# File lib/universal-access-log-parser.rb, line 208
def date(name, format = '%d/%b/%Y:%H:%M:%S %z', options = {})
        regex = Regexp.escape(format).gsub(/%./, '.+').gsub(/\//, '\\/') + '?'
        element(name, regex, options) do |match|
                DateTime.strptime(match, format).new_offset(0).instance_eval do
                        Time.utc(year, mon, mday, hour, min, sec + sec_fraction)
                end
        end
end
date_iis(name, options = {}) click to toggle source
# File lib/universal-access-log-parser.rb, line 204
def date_iis(name, options = {})
        date(name, '%Y-%m-%d %H:%M:%S', options)
end
date_ncsa(name, options = {}) click to toggle source
# File lib/universal-access-log-parser.rb, line 200
def date_ncsa(name, options = {})
        date(name, '%d/%b/%Y:%H:%M:%S %z', options)
end
double_quoted(&block) click to toggle source
# File lib/universal-access-log-parser.rb, line 196
def double_quoted(&block)
        surrounded_by('"', '"', &block)
end
element(name, regexp, options = {}, &parser) click to toggle source
# File lib/universal-access-log-parser.rb, line 172
def element(name, regexp, options = {}, &parser)
        nil_on = options[:nil_on]
        process = options[:process]
        if process
                p = lambda{|s| process.call(parser.call(s))}
        else
                p = parser 
        end
        push Element.new(name, regexp, nil_on, &p)
end
float(name, options = {}) click to toggle source
# File lib/universal-access-log-parser.rb, line 227
def float(name, options = {})
        element(name, '[\+|-]?\d+\.?\d*', options){|s| s.to_f}
end
integer(name, options = {}) click to toggle source
# File lib/universal-access-log-parser.rb, line 223
def integer(name, options = {})
        element(name, '[\+|-]?\d+', options){|s| s.to_i}
end
integratin_group(separator, &block) click to toggle source

core DSL

# File lib/universal-access-log-parser.rb, line 160
def integratin_group(separator, &block)
        push ElementGroup::Integrating.new(self, separator, &block)
end
ip(name, options = {}) click to toggle source
# File lib/universal-access-log-parser.rb, line 217
def ip(name, options = {})
        greedy = true
        greedy = options[:greedy] if options.member? :greedy
        element(name, ".*#{greedy ? '?' : ''}", options){|s| IP.new(s)}
end
names() click to toggle source
# File lib/universal-access-log-parser.rb, line 139
def names
        map do |e|
                if e.kind_of? ElementGroup
                        e.names
                else
                        e.name
                end
        end.flatten
end
optional(name, options = {}, &block) click to toggle source
# File lib/universal-access-log-parser.rb, line 168
def optional(name, options = {}, &block)
        push ElementGroup::Optional.new(self, name, options, &block)
end
parsers() click to toggle source
# File lib/universal-access-log-parser.rb, line 149
def parsers
        map do |e|
                if e.kind_of? ElementGroup
                        e.parsers
                else
                        e.parser
                end
        end.flatten
end
regexp() click to toggle source
# File lib/universal-access-log-parser.rb, line 135
def regexp
        map{|e| e.regexp}.join(separator)
end
separated_with(separator, &block) click to toggle source

DSL

# File lib/universal-access-log-parser.rb, line 184
def separated_with(separator, &block)
        integratin_group(separator, &block)
end
separator() click to toggle source
# File lib/universal-access-log-parser.rb, line 130
def separator
        raise ParsingError, 'Integrating ElementGroup not defined in ElementGroup hierarhy' unless @parent
        @parent.separator
end
single_quoted(&block) click to toggle source
# File lib/universal-access-log-parser.rb, line 192
def single_quoted(&block)
        surrounded_by("'", "'", &block)
end
string(name, options = {}) click to toggle source
# File lib/universal-access-log-parser.rb, line 231
def string(name, options = {})
        greedy = true
        greedy = options[:greedy] if options.member? :greedy
        element(name, ".*#{greedy ? '?' : ''}", options){|s| s}
end
surrounded_by(left, right, &block) click to toggle source
# File lib/universal-access-log-parser.rb, line 188
def surrounded_by(left, right, &block)
        surrounding_group(left, right, &block)
end
surrounding_group(left, right, &block) click to toggle source
# File lib/universal-access-log-parser.rb, line 164
def surrounding_group(left, right, &block)
        push ElementGroup::Surrounding.new(self, left, right, &block)
end