Ruby on rails 创建消息对象解析器
我正在接收来自以下web服务的结果: result.body返回:Ruby on rails 创建消息对象解析器,ruby-on-rails,ruby,object,Ruby On Rails,Ruby,Object,我正在接收来自以下web服务的结果: result.body返回: [2] pry(#<User::EmailSettingsController>)> result.body => {"RESULT"=> {"MESSAGES"=> [{"MESSAGE"=> {"TYPE"=>"E", "ID"=>"HRRCF_WD_UI", "NUMBER"=>"025",
[2] pry(#<User::EmailSettingsController>)> result.body
=> {"RESULT"=>
{"MESSAGES"=>
[{"MESSAGE"=>
{"TYPE"=>"E",
"ID"=>"HRRCF_WD_UI",
"NUMBER"=>"025",
"MESSAGE"=>"U kunt maximaal \"5\" jobagents creëren 1",
"LOG_NO"=>"",
"LOG_MSG_NO"=>"000000",
"MESSAGE_V1"=>"5",
"MESSAGE_V2"=>"1",
"MESSAGE_V3"=>"",
"MESSAGE_V4"=>"",
"PARAMETER"=>"",
"ROW"=>"0",
"FIELD"=>"",
"SYSTEM"=>""}},
{"MESSAGE"=>
{"TYPE"=>"E",
"ID"=>"HRRCF_WD_UI",
"NUMBER"=>"025",
"MESSAGE"=>"U kunt maximaal \"5\" jobagents creëren 2",
"LOG_NO"=>"",
"LOG_MSG_NO"=>"000000",
"MESSAGE_V1"=>"5",
"MESSAGE_V2"=>"2",
"MESSAGE_V3"=>"",
"MESSAGE_V4"=>"",
"PARAMETER"=>"",
"ROW"=>"0",
"FIELD"=>"",
"SYSTEM"=>""}},
{"MESSAGE"=>
{"TYPE"=>"E",
"ID"=>"HRRCF_WD_UI",
"NUMBER"=>"025",
"MESSAGE"=>"U kunt maximaal \"5\" jobagents creëren 3",
"LOG_NO"=>"",
"LOG_MSG_NO"=>"000000",
"MESSAGE_V1"=>"5",
"MESSAGE_V2"=>"3",
"MESSAGE_V3"=>"",
"MESSAGE_V4"=>"",
"PARAMETER"=>"",
"ROW"=>"0",
"FIELD"=>"",
"SYSTEM"=>""}}]}}
我不知道这是否可能或如何做到这一点任何建议,让我开始欢迎
编辑1:
在lib中创建我的类:
class MessageParser
def self.parse(result)
end
end
像这样的方法应该会奏效:
class ParsedMessages
include Enumerable
attr_reader :messages
def initialize(data)
@messages = extract_messages_from_data(data)
end
def extract_messages_from_data(data)
# TODO: Parse data and return message objects
end
def each &block
@messages.each do |message|
if block_given?
block.call message
else
yield message
end
end
end
end
现在,您可以使用
ParsedMessages
上的所有方法,例如每个,查找,映射等等。这基本上可以满足您的需要,使用一个简单的开放结构来创建一个消息类,该类具有消息散列中每个键的访问器
require 'ostruct'
class MessageParser
Message = Struct.new(:type, :id, :number, :message, :log_no, :log_msg_no, :message_v1, :message_v2, :message_v3, :message_v4, :parameter, :row, :field, :system)
attr_reader :messages
def initialize(data)
@data = data.fetch("MESSAGES",[])
@messages = []
parse_data
end
private
def parse_data
@data.each do | msg |
message = Message.new
msg.fetch("MESSAGE",{}).each do |key, value|
message[key.downcase.to_sym] = value
end
@messages << message
end
end
end
parser = MessageParser.new(result.body["RESULT"])
parser.messages.each do |message|
puts message.message
puts message.type
end
需要“ostruct”
类消息分析器
Message=Struct.new(:type,:id,:number,:Message,:log_no,:log_msg_no,:Message_v1,:Message_v2,:Message_v3,:Message_v4,:参数,:行,:字段,:系统)
属性读取器:消息
def初始化(数据)
@data=data.fetch(“消息”,[])
@消息=[]
解析数据
结束
私有的
解析数据
@data.each do| msg|
message=message.new
fetch(“MESSAGE”,{})。每个do |键,值|
消息[key.downcase.to_sym]=值
结束
@留言谢谢先生!工作起来很有魅力!
require 'ostruct'
class MessageParser
Message = Struct.new(:type, :id, :number, :message, :log_no, :log_msg_no, :message_v1, :message_v2, :message_v3, :message_v4, :parameter, :row, :field, :system)
attr_reader :messages
def initialize(data)
@data = data.fetch("MESSAGES",[])
@messages = []
parse_data
end
private
def parse_data
@data.each do | msg |
message = Message.new
msg.fetch("MESSAGE",{}).each do |key, value|
message[key.downcase.to_sym] = value
end
@messages << message
end
end
end
parser = MessageParser.new(result.body["RESULT"])
parser.messages.each do |message|
puts message.message
puts message.type
end