« 2008年07月 | メイン | 2008年09月 »

2008年08月 アーカイブ

2008年08月07日

NetBeansのRuby用プラグイン

NetBeansのRuby用プラグイン。
愛用しているものは次の2つ。

Tabsプラグインは、タブ文字をハイライト表示するようにしてくれるプラグイン。
タブ文字をホワイトスペース(半角の空白)に変換する機能もあります。

Trailing Whitespaceプラグインは、行末のホワイトスペース(半角空白、全角空白、タブ文字)をハイライト表示するようにしてくれるプラグイン。
一括して、行末のホワイトスペース(半角空白、全角空白、タブ文字)を削除する機能もあります。

NetBeansのかゆいところに手が届くプラグインです。

NetBeans(Rubyプラグイン)のTODOの書き方

NetBeans(Rubyプラグイン)のTODOの書き方

Rubyスクリプトの中では「#」の後にTODOを書く。

#TODO やること

.erbファイルにTODOを書くときは、HTMLのコメントの中にTODOを書けばよさそう。

<!-- TODO やること -->

2008年08月16日

NetBeansでソースコード行末の不要なスペースやタブを除去するプラグイン

Rubyに限った話ではないが、自動整形機能を備えたエディタでソースコードを編集をすると、行末に無駄なスペースやタブなどがどんどん増えてくる。特にNetBeansやEclipseを利用するとその傾向が顕著である。

ソースコード行末の不要なスペースやタブを除去する

NetBeansには行末の無駄なスペースやタブをハイライト表示してくれるプラグインがあります。

RubyPluginsにあるTrailing Whitespaceプラグインです。

行末の半角スペース、全角スペース、タブ文字をハイライト表示します。

このプラグインには、ファイル中の行末のホワイトスペース(半角空白、全角空白、タブ文字)を一括削除する機能もあります。

行末の無駄なスペースやタブが見えるようになると、どうしても気になりますので、こまめに削除するようになります。

開発チーム全体でこのプラグインを導入すると、行末の無駄なスペースに悩まされることも少なくなるのではないでしょうか。

2008年08月17日

ブログの目次を更新

久しぶりに、ブログの目次を更新しました。

記事の数がかなり多くなってきたので、レイアウトを買えて見やすくした方が良いかもしれないですね。

拙作のブログ目次作成ソフト Blomokuも手を加えたいのですが、なかなか時間がとれません。

2008年08月18日

Rubyのクラスメソッドをprivateにする方法

次のソースコードでは、Foo#foo()はprivateなクラスメソッドにはなりません。

class Foo
  private
  def self.foo
    return 'foo'
  end
end

Foo.foo #=> 'foo'

そこで、Rubyでクラスメソッドをprivateにする方法です。

1.private_class_methodを使う方法

private_class_methodはその名の通り、指定したメソッドをprivateなクラスメソッドにします。

class Foo
  def self.foo
    return 'foo'
  end
  def self.bar
    return 'bar'
  end
  private_class_method :foo
end

Foo.bar #=> 'bar'
Foo.foo #=> エラー

2.特異クラスでprivateを使う方法

複数のクラスメソッドをまとめて登録するときは、特異クラスで登録することが多いと思います。

特異クラスでprivateを使うと、privateなクラスメソッドになります。

class Foo
  class << self
    def bar
      return 'bar'
    end

    private
    def foo
      return 'foo'
    end
  end
end

Foo.bar #=> 'bar'
Foo.foo #=> エラー

2008年08月19日

REXML::Element.writeの代わりにREXML::Formattersを使う

Rubyでxmlを編集するために、REXMLで

xml = ''
doc.root.write(xml)

と、REXML::Element.writeを使ったら、

REXML::Element.write is deprecated.  See REXML::Formatters

といわれたので、REXML::Formattersを使ってみました。

xml = ''
formatter = REXML::Formatters::Default.new
formatter.write(doc.root, xml)

REXML::Formatters::Defaultは、XMLをそのまま出力します。

REXML::Formatters::Prettyは、XMLを整形して出力します。

xml = ''
formatter = REXML::Formatters::Pretty.new
formatter.write(doc.root, xml)

REXML::Formatters::Prettyの標準のインデントの空白の数は2です。
コンストラクタに引数を与えることで、空白の数を変更できます。

formatter = REXML::Formatters::Pretty.new(4) #=> インデントの空白の数は4

write()メソッドの引数は、nodeとoutputの2つ。

REXML::Formatters::Default#write(node, output)

nodeのXMLをoutputに出力することになります。
outputはメソッド <<(value) が定義されている必要があります。

2008年08月20日

Rubyのクラスメソッドの別名定義(alias)

特異クラスでaliasを使うと、クラスメソッドの別名を定義することができます。

class Foo
  class << self
    def bar
      return 'bar'
    end
    alias foo bar
  end
end

Foo.bar #=> 'bar'
Foo.foo #=> 'foo'

Rubyの特異クラスのメソッドの振る舞いのまとめ

Rubyの特異クラスのメソッドの振る舞いのまとめ

特異クラスでprivateを使うと、privateなクラスメソッドにすることができます。

class Foo
  class << self
    def bar
      return 'bar'
    end

    private
    def foo
      return 'foo'
    end
  end
end

Foo.bar #=> 'bar'
Foo.foo #=> エラー

特異クラスでaliasを使うと、クラスメソッドの別名を定義することができます。

class Foo
  class << self
    def bar
      return 'bar'
    end
    alias foo bar
  end
end

Foo.bar #=> 'bar'
Foo.foo #=> 'foo'

2008年08月25日

Ruby on Railsで関連テーブルの情報をまとめて読み込む:includeオプションのまとめ

ActiveRecordのfind()では、:includeオプションを指定することで、関連テーブルの情報をまとめて読み込むことができます。

:includeオプションの指定方法をまとめました。

1つの関連先テーブルを読み込む

:include => :foo

複数の関連先テーブルを読み込む

:include => [:foo, :bar]

多段の関連を一度に読み込む

:include => {:foo => :bar}

さらに多段の関連を一度に読み込む

:include => {:foo => {:bar => :baz}}

関連先テーブルから複数の関連テーブルを読み込む

:include => {:foo => [:bar, :baz]}

以上を組み合わせて読み込む

:include => [{:foo => {:bar => :baz}}, :hoge]

2008年08月27日

REXMLのDoS脆弱性

RailsでXMLリクエストのパースに使用されているREXMLに、DoS脆弱性が発見されました。XML entity explosion attackと呼ばれる攻撃手法により、ユーザから与えられたXMLを解析するようなアプリケーションをサービス不能(DoS)状態にすることができます。大部分のRailsアプリケーションはこの攻撃に対して脆弱です。

REXMLのDoS脆弱性

Ruby on Railsを使用しているほとんどのWebアプリケーションで問題が発生します。

対策は公式サイトで配布されているモンキーパッチを適用することです。

submit_to_button

Ruby on Rails入門―優しいRailsの育て方の246ページに「submit_to_button」についての説明があります。

submit_to_button

"link_to_function"に対する"buttton_to_function"のように、"link_to_remote"のボタン版である"submit_to_remote"メソッドも存在します。"button_to_remote"ではありませんので、名前に注意しましょう。これは、単なるボタンだけではなくFORMタグも生成されるため、このような名前になっています。

何を言っているのかわかりませんでした。

どうやら、「submit_to_button」は「submit_to_remote」の間違いのようです。

そう考えると納得できます。

正誤表には記載されていませんね。

2008年08月30日

RailRoadを試してみた

RailRoadを試してみたところ、名前空間に対応していないようだ。
# モデルもコントローラも。

たとえば、次のようなモデルは、

class Blog::Entry < ActiveRecord::Base
end

以下のようなエラーメッセージが出力される。

`load_missing_constant': uninitialized constant Entry (NameError)

ついでにインストール方法と使い方

インストール方法は、RubyGemsを使って、

gem install railroad

あと、Graphvizもインストールしておく。

使い方は、SVGファイルを出力するとき

C:\ruby\bin\railroad.bat -M | "C:\Program Files\Graphviz2.20\bin\dot.exe" -Tsvg > model.svg
C:\ruby\bin\railroad.bat -C | "C:\Program Files\Graphviz2.20\bin\dot.exe" -Tsvg > controller.svg

PNGファイルを出力するとき

C:\ruby\bin\railroad.bat -M | "C:\Program Files\Graphviz2.20\bin\dot.exe" -Tpng > model.png
C:\ruby\bin\railroad.bat -C | "C:\Program Files\Graphviz2.20\bin\dot.exe" -Tpng > controller.png

About 2008年08月

2008年08月にブログ「山本隆の開発日誌」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2008年07月です。

次のアーカイブは2008年09月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35