SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Rails ActionWebServiceジェネレータのカスタマイズ

Rails ActionWebServiceジェネレータをカスタマイズする方法の御紹介

ダウンロード サンプルソース (2.0 KB)

ジェネレータのカスタマイズコード その2

「controller.rb」テンプレートのカスタマイズ

 「controller.rb」テンプレートは、Webサービスのコントローラクラスを作成するテンプレートです。wsdl_service_nameでサービス名を、web_service_apiでサービスのAPI定義を指定しています。web_service_scaffold :invokeはブラウザ上でWebサービスをテストするために必要です。

 find_allでテーブルの全情報を一覧検索しています。find(:all)のようにallを指定することで、全情報を取得することができます。

 create(arg_<%= file_name %>)で新規作成のメソッドを生成します。<% for column in @model_klass.columns %>でデータベース上のテーブルにアクセスし、Webサービスメソッドcreateに対して与えられたデータ型からの移送文をコーディングしています。

 created_atupdated_atはRailsで自動更新の対象になっているため、Webサービスを呼び出した側からの移送文をコード化しないようにしています。updateに対しても同様のことを行っています。

controller.rb
class <%= class_name %>ServiceController < ApplicationController
  wsdl_service_name '<%= class_name %>Service'
  web_service_api    '<%= class_name %>Service'
  web_service_scaffold :invoke

<% for method_name in args -%>

  def <%= method_name %>
  end
<% end -%>

  #------------------------------------------------------------------
  # 全~を取得します。
  #------------------------------------------------------------------
  def find_all
    <%= class_name %>.find(:all)
  end

  #------------------------------------------------------------------
  # ~を新規作成します。
  #------------------------------------------------------------------
  def create(arg_<%= file_name %>)
    <%= file_name %> = <%= class_name %>.new
    <% @model_klass = Module.const_get(class_name) %>
    <% for column in @model_klass.columns %>
      <%
        if column.name == 'id' or column.name 
              == 'created_at' or column.name == 'updated_at'
          next
       end
      %>
      <%= file_name %>.<%= column.name %> 
              = arg_<%= file_name %>.<%= column.name %>
    <% end %>
    if <%= file_name %>.save
      return "Succeeded"
    else
      return "Failed"
    end
  end

  #------------------------------------------------------------------
  # ~を更新します。
  #------------------------------------------------------------------
  def update(arg_<%= file_name %>)
    <%= file_name %>
          = <%= class_name %>.find(arg_<%= file_name %>.id)
    unless <%= file_name %>
      return "Not Found."
    end
    <% @model_klass = Module.const_get(class_name) %>
    <% for column in @model_klass.columns %>
      <%
        if column.name == 'id' or column.name 
           == 'created_at' or column.name == 'updated_at'
          next
        end
      %>
      <%= file_name %>.<%= column.name %> 
           = arg_<%= file_name %>.<%= column.name %>
    <% end %>
    if <%= file_name %>.update
      return "Succeeded"
    else
      return "Failed"
    end
  end

  #------------------------------------------------------------------
  # ~を削除します。
  #------------------------------------------------------------------
  def destroy(arg_<%= file_name %>)
    <%= file_name %>
          = <%= class_name %>.find(arg_<%= file_name %>.id)
    if <%= file_name %>.destroy
      return "Succeeded"
    else
      return "Failed"
    end
  end
end

次のページ
MstWebServiceGeneratorによるWebサービスクラスの生成

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

ryujinseiichi(リュウジンセイイチ)

http://ryujinseiichi.sblo.jp/ RubyやAIRなどの新規技術に興味があり、研究を行っています。 最近、seasar2やBPMの研究も始めました。  

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2659 2008/07/11 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー