Tenarai::CGI::Query

URI のクエリーをハッシュのように [], []= メソッドで操作するクラス

概要

CGI でプログラムのパラメータとしてよく使われる、URI のクエリー文字列や、HTTP の POST メソッドで HTML のフォームなどから渡される Content-Type: application/x-www-form-urlencoded のデータを扱うクラス。

例えば、こんなふうにクエリー文字列を元にして Tenarai::CGI::Query オブジェクトを作成します。

  1. require 'tenarai/cgi'
  2. query = Tenarai::CGI::Query.decode('a=a1&b=b1&b=b2&b=%e6%bc%a2%e5%ad%97%e5%85%a5%e5%8a%9b&c=c1');
  3. query.each do |key, val|
  4. p [key, val]
  5. end

実行するとこうなります。パラメータの名前と値はアンエスケープされ、同じ名前のパラメータは配列に変換されます。

  1. ["a", "a1"]
  2. ["b", ["b1", "b2", "漢字入力"]]
  3. ["c", "c1"]

query オブジェクトでは、ハッシュのように [], []= メソッドを使ってパラメータの値を操作することが出来ます。ハッシュと異なるのが []= メソッドです。既に key が存在している項目に対して代入した場合、値は上書きされずに配列オブジェクトに変換されます。

引き続き、さっきの query オブジェクトを操作すると、

[]メソッドを使って値の参照

  1. p query['a']
  2. p query['b']
  3. p query['c']

実行結果、

  1. "a1"
  2. ["b1", "b2", "漢字入力"]
  3. "c1"

[]= メソッドを使って、値の代入

  1. query['b'] = 'B1'
  2. query['c'] = 'C1'
  3. query.each do |key, val|
  4. p [key, val]
  5. end

この通り、実行結果は 'b' と 'c' に対しての代入が値の上書きではなく配列への追加になっています。

  1. ["a", "a1"]
  2. ["b", ["B1", "b1", "b2", "漢字入力"]]
  3. ["c", ["C1", "c1"]]

また、to_s メソッドでクエリー文字列へ変換することが出来ます。

  1. p query.to_s

実行結果、

"a=a1&b=B1&b=b1&b=b2&b=%e6%bc%a2%e5%ad%97%e5%85%a5%e5%8a%9b&c=C1&c=c1"

インクルードしているモジュール

  • Enumerable

クラスメソッド

encode(q)

ハッシュオブジェクトからオブジェクトを作成します。

  1. require 'tenarai/cgi'
  2. query = Tenarai::CGI::Query.encode('a' => 'a1', 'b' => 'b1', 'c' => 'c1')
  3. p query.to_s

実行結果

  1. "a=a1&b=b1&c=c1"

decode(s)

クエリー文字列からオブジェクトを作成します。同じ名前のパラメータは配列に変換されます。また、パラメータの名前と値はアンエスケープされます。

  1. require 'tenarai/cgi'
  2. query = Tenarai::CGI::Query.decode('a=a1&b=b1&b=b2&b=%e6%bc%a2%e5%ad%97%e5%85%a5%e5%8a%9b&c=c1');
  3. p query['a']
  4. p query['b']
  5. p query['c']

実行結果

  1. "a1"
  2. ["b1", "b2", "漢字入力"]
  3. "c1"

new

オブジェクトを作成します。作成されたオブジェクトの中身は空です。

メソッド

[](key)

key で指定された値を返します。一つの key に複数の値が割り当てられている場合、複数の値を配列として返します。

[]=(key, val)

key で指定された項目に、値を割り当てます。既に key で指定される値が存在する場合、既存の値を配列の項目に変換して新しい値を追加します。これにより、ひとつの key に複数の値が割り当てられます。

to_s

オブジェクトをクエリー文字列に変換して返します。この際、パラメータの名前と値に対してRFC2396 で定義されている URI エスケープ処理が実施されます。

empty?

オブジェクトが空の場合 true を返します。それ以外は false を返します。

each { |key, val| ... }

オブジェクトの各パラメータの名前と値がブロック引数に代入されます。

merge(query)

引数に指定されたオブジェクトをマージしたオブジェクトを新しく作成して返します。


AdSense is disabled. Please check setting.