Sha256: d1d37a977b0b7c789cecb7dadb5837ae21f1806f42a499a7ce60d491cbc4b191
Contents?: true
Size: 1.04 KB
Versions: 5
Compression:
Stored size: 1.04 KB
Contents
require 'cgi' module RubyAMI class AGIResultParser attr_reader :code, :result, :data FORMAT = /^(?<code>\d{3})( result=(?<result>-?\d*))? ?(?<data>\(?.*\)?)?$/.freeze DATA_KV_FORMAT = /(?<key>[\w\d]+)=(?<value>[\w\d]*)/.freeze DATA_CLEANER = /(^\()|(\)$)/.freeze def initialize(result_string) @result_string = result_string.dup raise ArgumentError, "The result string (#{@result_string}) did not match the required format (#{FORMAT})." unless match parse end def data_hash return unless data_kv_match {data_kv_match[:key] => data_kv_match[:value]} end private def unescape CGI.unescape @result_string end def match @match ||= unescape.chomp.match(FORMAT) end def parse @code = match[:code].to_i @result = match[:result] ? match[:result].to_i : nil @data = match[:data] ? match[:data].gsub(DATA_CLEANER, '').freeze : nil end def data_kv_match @data_kv_match ||= data.match(DATA_KV_FORMAT) end end end
Version data entries
5 entries across 5 versions & 1 rubygems