Rubyでxmlを返却するAPIをパっと作る時に

ruby_icon_314

rubyでXMLを返すAPIをたてる事案があったのだが、今までヒアドキュメントでパカパカとXMLタグを書いていたのがアホらしくなるくらい便利なgemがあった。 別にAPIで使わなくてもいいけど、最初にスタブ返すテスト用APIとかサクっとたてたい時にも重宝しそう。

今日2個目のエントリですがこれも、ほぼ自分用メモ
まだまだですが、精進していきたいです。

gem builder

builderというgemでそれは手に入る。

$ gem install builder

このbuilderの中にxmlmarkupなるクラスが入っているのでrequireしてあげる。
以下サンプル

require 'builder/xmlmarkup'

ret = ''
items = ["sample 1", "sample 2", "sample 3"]

xml = Builder::XmlMarkup.new(:target=>ret, :indent => 3)
xml.instruct!
xml.Response{
   xml.Header{
      xml.Status('Success')
      xml.PubDate('2013-09-03 17:14:23')
      xml.Category('SAMPLES')
   }
   xml.Body{
      xml.Day(:date => '20130901'){
         xml.Week('MON')
         xml.Item('3')
         xml.Discription('It\'s very humid today.')
         i = 1
         xml.List{
            items.each do |item|
               xml.Word(item , :no => i.to_s)
               i += 1
            end
         }
      }
   }
}

puts ret

基本的にXmlMarkupのインスタンスを作成したら、 instruct!するだけで後はお好きにって感じらしい。
インスタンスに適当に命名したいタグでつないで、中身は引数に入れるだけ。 素晴らしい。
ループをかまして、たとえば、配列に入ってる分だけの要素の出力も\(^o^)/
なお、 のように要素を追加したい場合は、

xml.item(:name => 'test'){ ・・・ } 

のようにラベルで与えてやるだけ。
すると、だいたいこんな感じにXMLを出力してくれる。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
   <Header>
      <Status>Success</Status>
      <PubDate>2013-09-03 17:14:23</PubDate>
      <Category>SAMPLES</Category>
   </Header>
   <Body>
      <Day date="20130901">
         <Week>MON</Week>
         <Item>3</Item>
         <Discription>It's very humid today.</Discription>
         <List>
            <Word no="1">sample 1</Word>
            <Word no="2">sample 2</Word>
            <Word no="3">sample 3</Word>
         </List>
      </Day>
   </Body>
</Response>

最初、XMLの下2行にわけわからんタグはいって何これってテンパった

<respond_to?:to_str/>
<to_str/>

解決方法はここを見た
https://www.ruby-forum.com/topic/167813

Builder::XmlMarkup.new(:target =&gt; data, :indent =&gt; 2)

てな感じで、newするときにtargetオプションを指定して一回適当に他の変数へ格納したら収まるらしい。
※上のサンプルは大丈夫なやつ

2013-10-02 | Posted in Ruby1 Comment » 


関連記事

コメント1件

 ブルガリ 中古 一戸建て | 2016.03.30 10:21

ブルガリ 中古 一戸建て http://www.newkakaku.com/brs1.htm

Comment





Comment



*