Ruby-YAML形式ファイルを操作する
RubyのYAML(YAML Ain't Markup Language)について
YAML を Ruby で使う
Ruby 1.8以降では、YAMLを利用するためのライブラリが標準添付されています。
以下のライブラリを要求します。( 「require 'yaml/store'」でもかまいません )
require 'yaml'
YAMLファイルの読み込み
YAML形式で記述されたファイルを読み込むには、以下のメソッドを呼び出します。
data = YAML.load_file(filename)
YAMLファイルの出力
ファイルにYAML形式でデータを出力するには、以下のメソッドを呼び出します。
open(filename,"w") do |e|
YAML.dump(data, e)
end
YAMLに変換する
Rubyのオブジェクトは、YAML文字列へ簡単に変換することができます。
# YAMLへ変換
obj.to_yaml
Ruby YAMLサンプル
ユーザとパスワード情報をYAML形式で扱います。
#!/usr/bin/ruby
require 'yaml'
class Usrmgr
def initialize(infofile)
@infofile = infofile
@infodata = read_infofile()
end
#!
# @brief ユーザを追加する
# @param[in] username ユーザ名
# @param[in] password パスワード
#
def useradd(username, password)
return(false) if(is_exist_user(username))
@infodata << {"username" => username, "password" => password}
return(true)
end
#!
# @brief ユーザを削除する
# @param[in] username ユーザ名
# @param[in] password パスワード
#
def userdel(username, password)
@infodata.each_with_index do |e, i|
if(e["username"] == username)
@infodata.delete_at(i)
return(true)
end
end
return(false)
end
#!
# @brief パスワードを取得する
# @param[in] username ユーザ名
#
def get_password(username)
@infodata.each do |e|
return(e["password"]) if(e["username"] == username)
end
return("")
end
#!
# @brief ユーザ情報ファイルを出力する
#
def update()
swapfile = "#{@infofile}.swap"
open(swapfile,"w") do |e|
YAML.dump(@infodata, e)
end
# 元ファイルを削除して置き換える
File.delete(@infofile) if(FileTest.exist?(@infofile))
File.rename(swapfile, @infofile)
end
private
#!
# @brief ユーザ情報ファイルを読み込み
#
def read_infofile()
if(FileTest.exist?(@infofile))
infodata = YAML.load_file(@infofile)
else
infodata = []
end
return(infodata)
end
#!
# @brief ユーザが存在するか確認する
# @param[in] username ユーザ名
# @return true ユーザは登録済み
# @return false ユーザは未登録
#
def is_exist_user(username)
@infodata.each do |e|
return(true) if(e["username"] == username)
end
return(false)
end
end
if(__FILE__ == $0)
umgr = Usrmgr.new("./passwd")
umgr.useradd("user1", "password1")
umgr.useradd("user2", "password2")
umgr.update
p umgr.get_password("user2")
end
関連ページ
- Ruby
- Ruby-ファイルロック
- Ruby-OpenSSL暗号化
- Ruby-zlibファイル圧縮
- Ruby-ハッシュを作成する
- Ruby-ログのローテーション
- Ruby-YAML形式ファイルを操作する
- Ruby-WEBrickでwebサーバ
- Ruby-CGIでパラメータを受け取る
- Ruby-CGIセッション