class Timeliness::Format
Constants
- CompilationFailed
Attributes
format_string[R]
regexp[R]
regexp_string[R]
token_count[R]
Public Class Methods
new(format_string)
click to toggle source
# File lib/timeliness/format.rb, line 9 def initialize(format_string) @format_string = format_string end
Public Instance Methods
compile!()
click to toggle source
# File lib/timeliness/format.rb, line 13 def compile! @token_count = 0 found_tokens, token_order = [], [] format = format_string.dup format.gsub!(/([\.\\])/, '\\\\\1') # escapes dots and backslashes # Substitute tokens with numbered placeholder Definitions.sorted_token_keys.each do |token| count = 0 format.gsub!(token) do token_regexp_str, arg_key = Definitions.format_tokens[token] token_index = found_tokens.size if arg_key raise CompilationFailed, "Token '#{token}' was found more than once in format '#{format_string}'. This has unexpected effects should be removed." if count > 0 count += 1 token_regexp_str = "(#{token_regexp_str})" @token_count += 1 end found_tokens << [ token_regexp_str, arg_key ] "%<#{token_index}>" end end # Replace placeholders with token regexps format.gsub!(/%<(\d+)>/) do token_regexp_str, arg_key = found_tokens[$1.to_i] token_order << arg_key token_regexp_str end define_process_method(token_order.compact) @regexp_string = format @regexp = Regexp.new("^(#{format})$") self rescue => ex raise CompilationFailed, "The format '#{format_string}' failed to compile using regexp string #{format}. Error message: #{ex.inspect}" end
process(*args)
click to toggle source
Redefined on compile
# File lib/timeliness/format.rb, line 56 def process(*args); end
Private Instance Methods
define_process_method(components)
click to toggle source
# File lib/timeliness/format.rb, line 60 def define_process_method(components) values = [nil] * 8 components.each do |component| position, code = Definitions.format_components[component] values[position] = code || "#{component}.to_i" if position end instance_eval <<~DEF def process(#{components.join(',')}) [#{values.map { |i| i || 'nil' }.join(',')}] end DEF end