s21gブログに、過去に書いた記事をまとめて紹介する記事を書くための機能を実装しました。

記事の新規作成画面(下図)から検索を行う事で、 検索結果の記事のタイトルとリンクを生成します。

ss

よろしくお願いします。

posted by Png genki on Thu 8 Jan 2009 at 17:37

このところMerbに関する記事を沢山書いたので、一旦まとめておきます。

posted by Png genki on Thu 8 Jan 2009 at 17:30

当ブログシステムでプロファイル画像のアップロードの為に利用していた、SWFUploadが、flash10以降に動かなくなっていたため、 新しいバージョンにアップデートしました。

ss

よろしくお願いいたします。

See Also

posted by Png genki on Wed 7 Jan 2009 at 08:51

Merbでタイムゾーンを選択するためのプラグインを作りました。

USAGE:

Gem(genki-merb_timezone_select)をインストールして、dependencyを設定し、form_forブッロクの中で、以下のように使います。

   1    <%= timezone_select :timezone %>

以下のような感じの結果が得られます。

ss

posted by Png genki on Tue 6 Jan 2009 at 03:33

tzinfoで使われているTZInfo::TimezoneOffsetInfoクラスの情報が RDocの中に見つからなかったので、置いてある場所をメモ。

ちなみに、以下のようにする事で、所望のTZInfo::Timezoneオブジェクトから、utcに対するオフセット秒を取得できます。

   1  timezone.period_for_utc(Time.now).offset.utc_offset

posted by Png genki on Tue 6 Jan 2009 at 02:13

MerbのコントローラをParts的に利用するプラグイン merb_component を作りました。 Railsのcomponentに似てますが、Railsと比べて大分シンプルに実現できています。

使い方

githubからgenki-merb_componentをインストールし、 config/dependencies.rbの中で、以下のように記述します。

   1  dependency "genki-merb_component", :require_as => "merb_component"

あとは、Viewの中から以下のような感じで呼び出せばOKです

   1  <%= component Users, :show, :id => 1 %>

merb_partsと違って、全てのコントローラに対して利用出来ます。

posted by Png genki on Mon 5 Jan 2009 at 06:28

MerbにはPartsという仕組みがありますが、通常のコントローラのアクションをPartsのように利用する方法を紹介します。

   1  <%= Comments.new(Merb::Request.new({}))._dispatch(:index).render :layout => false %>

この例では、Commentsコントローラに対して空のリクエストオブジェクトを生成し、plugin apiである_dispatchを呼び出した結果に対し、レイアウトを無視して描画しています。

これによって、フィルターの実行なども考慮しつつ、actionのレンダリング結果をParts的に利用する事が出来ます。

posted by Png genki on Mon 5 Jan 2009 at 04:55

merb_babel はmattettiさんが開発しているmerb用のi18n/l9nライブラリです。

オリジナルのmerb_babelは、ブラウザが渡すHTTP_ACCEPT_LANGUAGEを考慮して、ユーザのロケールを自動判別する機能が無かったので、実装を追加してみました。

こんな感じに使います。

img

PokéDia の今日の出来事情報を管理するためのバックエンドとなるサービスの開発に利用しています。

posted by Png genki on Mon 5 Jan 2009 at 01:41

merbのsliceをアプリケーションに組み込むためには、以下の手順を踏みます。

  1. sliceのgemをインストール
  2. config/dependencies.rb 内でdependencyを追加
  3. rake slices::install を実行
  4. config/router.rb に slice用のrouteを追加

アンインストールする場合は、public/slices以下にのディレクトリがあれば削除して、インストール時に記述したものを削除すればOK.

posted by Png genki on Sun 4 Jan 2009 at 14:42

今年は作業ログの前段階の調べてる事についても、yakタグをつけて書いておこうと思います。解決したらshavedタグでもつけようかな。

さて、掲題の件ですが、ruby-localeを使って、

   1  Locale::Tag.parse("ja").country #=> "JP"

が得られたら良いな、という事です。 現状では無情にもnilが返ってきます。

ブラウザが送ってくるHTTP_ACCEPT_LANGUAGEが、お行儀よく ja_JPやja-JPを指定してくれると良いのですが、 そうとは限らないので、"ja"から"JP"を推測するような必要性が出てきます。

もちろん、"en"の場合は"US"だったり"UK"だったり"AU"だったりするわけで、 mappingは単射ではないのですが、そういう言語を使ってる場合は、 最初から"en_US"などと、ちゃんと国コードまで含めたものを送ってくる場合が多いので、そんなに困らなかったりします。


f_{lc}:\mbox{language}\mapsto\mbox{country}

あるいは


f_{cl}:\mbox{country}\mapsto\mbox{language}

を取得する方法無いかなー。

とりあえず、変換テーブルを作ってみた。

   1  {"nn"=>["NO"], "uk"=>["UA"], "it"=>["SM", "GI", "CH", "LY", "IT"], "zh_TW"=>["TT", "VN", "HK"], "no"=>["NO"], "st"=>["ZA"], "tk"=>["TM"], "bn"=>["IN"], "mn"=>["MN"], "ja"=>["JP"], "fr"=>["TT", "CD", "GG", "RW", "CG", "LU", "FR", "CH", "CI", "JE", "SC", "VN", "BE", "MU", "DJ", "BI", "CA"], "hi"=>["TT", "AE", "IN"], "de"=>["AT", "LU", "CH", "LI", "DE", "BE", "RO"], "ne"=>["NP"], "jw"=>["ID"], "ta"=>["IN", "SG"], "tl"=>["PH"], "pt_PT"=>["PT", "GI"], "hu"=>["SK", "HU", "RO"], "sk"=>["SK"], "fi"=>["FI"], "sv"=>["SE", "FI"], "iw"=>["IL"], "az"=>["AZ"], "zh"=>["TW"], "ru"=>["KG", "KZ", "RU", "AZ", "LV", "UA", "TM", "AM", "UZ"], "ky"=>["KG"], "es"=>["EC", "HN", "CU", "PR", "TT", "PA", "VE", "DO", "BO", "GI", "PE", "PY", "NI", "CL", "SV", "CO", "UY", "BZ", "CR", "ES", "GT", "AR", "MX"], "ko"=>["KR"], "pt_BR"=>["BR"], "sw"=>["RW", "KE"], "ga"=>["IE"], "id"=>["ID"], "eu"=>["ES"], "gl"=>["ES"], "xh"=>["ZA"], "uz"=>["TM", "UZ"], "mr"=>["IN"], "fa"=>["AE"], "zu"=>["LS", "ZA"], "af"=>["NA", "ZA"], "pl"=>["PL"], "hy"=>["AM"], "pa"=>["PK"], "te"=>["IN"], "ar"=>["AE", "LY", "SA", "DJ"], "ms"=>["MY", "SG"], "el"=>["GR"], "ro"=>["RO"], "mt"=>["MT"], "ur"=>["AE", "PK"], "da"=>["DK", "GL"], "ca"=>["ES"], "tr"=>["TR"], "zh_CN"=>["SG"], "nl"=>["NL", "BE", "ID"], "vi"=>["VN"], "lt"=>["LT", "LV"], "th"=>["TH"], "fo"=>["DK"], "en"=>["AS", "IE", "NP", "MY", "UK", "FM", "VC", "PR", "TT", "AU", "PA", "NA", "GG", "LS", "RW", "VG", "AE", "GI", "VI", "AG", "TH", "CH", "NF", "JE", "AI", "GL", "PH", "CK", "GM", "LY", "IN", "NZ", "NI", "SC", "PK", "VN", "MS", "TO", "MT", "BE", "PN", "MU", "UG", "SG", "ZA", "BZ", "SH", "MW", "FJ", "CR", "HK", "JM", "KE", "CA", "ID"], "lv"=>["LV"]}

posted by Png genki on Sat 3 Jan 2009 at 17:17