1. #1
    AliChemicali's Avatar
    Registered
    21/08/08
    Location
    Mechelen
    Posts
    5,952
    iTrader
    30 (97%)
    Mentioned
    0 Post(s)
    Reputation
    0/4

    ROR Parser class schrijven

    Hoi!

    Ik krijg van mijne webservice het volgende resultaat terug:

    Code:
    [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"=>""}}]}}
    Nu is mijn vraag of je iets kunt maken dat het volgende doet in pseudocode:

    Code:
    message_list = ParseMessageObject(result.body)
    message_list.each do |message|
     puts message.message
     puts message.type
    end
    StackOverflow Account
    Pain is temporary. It may last a minute, or an hour, or a day, or a year, but eventually it will subside and something else will take its place. If I quit, however, it lasts forever.
    no votes  

  2. #2
    bealzebub's Avatar
    Registered
    28/06/06
    Location
    Gent
    Posts
    376
    iTrader
    1 (100%)
    Mentioned
    0 Post(s)
    T is zo basic Ruby 101 dat ik gewoon dirty example code ga geven, aan jou om het mooi te schrijven (en eigenlijk zou je t nog beter in een Struct of zelfs een dedicated mapper class moeten steken).

    Code:
    # Gewoon voor t gemak van lezen
    content = result.body["RESULT"]["MESSAGES"]
    
    message_list = content.map do |item|
      # De eigenlijke hash met inhoud zit in de MESSAGE property
      message = item["MESSAGE"]
    
      # Zet van de hash alle keys om naar lowercase symbols
      symboled_message = Hash[message.map do |k,v|
        key = k.downcase.to_sym
        # type until Ruby 2.0 is een protected word
        # (Ruby 1.8+ geeft een deprecation warning, maar je kan type nog altijd niet overriden)
        # We maken er dus message_type van
        key = :message_type if key == :type
        [key, v]
      end]
    
      # http://www.ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html
      OpenStruct.new(symboled_message)
    end
    
    message_list.each do |message|
     puts message.message
     puts message.message_type
    end
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in