タグ

ブックマーク / zariganitosh.hatenablog.jp (20)

  • URL書式のチェックをもうちょっと考えてみる。 - ザリガニが見ていた...。

    今のURLのチェックは下記の1行で行っているが、http:、https:、ftp:で始まっていれば、その後は、ほぼ、どんな文字が来てもOKで通ってしまう。今になってそれがちょっと気になってきたので、見直してみた。 validates_format_of :url, :with => URI.regexp(['http', 'https', 'ftp']) 生成される正規表現については意味を追いきれないので、何がOKで、何がNGなのかは確認していないが...。 そもそも、rubyのURIライブラリの存在を知った時には、こんな風にメソッド定義しておくと、簡単にHTTPの書式チェックが出来ると知ったことからだ。 URIのパターンマッチとURIクラスより、タイムリーな話題に感謝です。 def http?(str) begin uri = URI.parse(str) rescue URI::Inv

    URL書式のチェックをもうちょっと考えてみる。 - ザリガニが見ていた...。
    iR3
    iR3 2014/05/14
    ふむふむ
  • ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた...。

    いつも、いざ使う時になって、どうやるんだっけ?と探し回ってしまうので、忘れないようにメモ。(以前の日記でも、所々分散して書いているかもしれないが、ここで総括的に記録することにした) シェルスクリプト $ fpath='/a/b/c.d.e' # ファイル名を取り出す(拡張子あり) $ fname_ext="${fpath##*/}" $ echo $fname_ext c.d.e # ファイル名を取り出す(拡張子なし) $ fname="${fname_ext%.*}" $ echo $fname c.d # 拡張子を取り出す $ fext="${fpath##*.}" $ echo $fext e # ディレクトリを取り出す $ fdir="${fpath%/*}" $ echo $fdir /a/b なるほど! そして、仕組みとしては、以下のルールしたがって変換されているようだ。 ${

    ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた...。
    iR3
    iR3 2014/01/24
    復習 有り難いGJ!
  • なるべく書かないawkの使い方 - ザリガニが見ていた...。

    awkという、古くからのスクリプト言語がある。(1977年生まれ。読み方は「オーク」である。エイ・ダブリュ・ケイではない)man awkをPDFに変換してみると、たったの3ページ強しかない。 $ man -t awk|pstopdf -i -o ~/Downloads/awk.pdf とてもシンプルな言語仕様ではあるが、awkには必要十分な表現力がある。特にテキストを処理する場面においては、最小限のシンプルな記述で、気の利いた処理を素早くこなす。無駄のないawkワンライナーを見ると、ある種の感動を覚える。awk以降に生まれたスクリプト言語は、少なからずawkの影響を受けていると思われる。 awkを知ることで、間違いなく幸福度は上がると思う。いつかきっと「知ってて良かった」と思える時が来るはず。もっともっと、awkを知りたくなってきた。 基動作 awkの基動作は、とってもシンプルである。

    なるべく書かないawkの使い方 - ザリガニが見ていた...。
    iR3
    iR3 2013/12/10
  • よりシンプルに日付と時刻の表示書式を整えるには... - ザリガニが見ていた...。

    Rails 2.1からの日付と時刻の表示はUTCが標準になり、そのままの環境では以下のように表示されてしまう...。 <%= user.updated_at %> 2008-08-08 04:52:49 UTC 以前に比べれば日人にとっては分かり易い表示だが、決定的に問題なのは日の時刻と9時間ずれていること。 タイムゾーン その環境を決めているのは、config/environment.rbの以下の部分。 その部分をコメントアウトしてみると... # ---------- config/environment.rb ---------- Rails::Initializer.run do |config| ...(中略)... config.time_zone = 'UTC' ...(中略)... <%= user.updated_at %> Fri Aug 08 04:52:49 +

    よりシンプルに日付と時刻の表示書式を整えるには... - ザリガニが見ていた...。
    iR3
    iR3 2013/07/12
    ふむふむ.to_s(:db)という技もあるのね
  • validateのバリエーション - ザリガニが見ていた...。

    たった1行のvalidates_presence_ofが入力値の検証とエラー表示を行っているが、それを実現するためにはいろいろな機能が絡み合っていることが分かった。 validateに関連することで分かったこと データベースへの追加または更新の前に検証される。一つでもエラーが発生すると、そのレコードは一切保存されない。 モデルはerrorsという看板を持っていて、エラーが発生すると、エラーフィールド名とエラーメッセージがその看板に保存される。 手軽にvalidateを活用するためには、入力フォームの描画はRailsが用意したメソッド*1を利用するべき*2。 validates_のバリエーション メソッド 検証方法 validates_presence_of 値が入力済であること検証 validates_uniqueness_of 同じ値が存在しないことの検証 validates_lengt

    validateのバリエーション - ザリガニが見ていた...。
    iR3
    iR3 2012/04/18
  • :disable_withで処理中を明確にして二重送信を防止 - ザリガニが見ていた...。

    フォームに入力した内容をサーバー送信する時、送信ボタンを押してから処理に時間がかかると不安になる。(特にファイルをアップロードする時など。)ユーザーによっては、2回、3回と送信ボタンを押しまくるかもしれない...。不要な操作は、サーバーにも負荷がかかるし、きっとユーザーもイライラしているはず。そんな時は、submit_tagの:disable_withオプションで手軽に解決できた! 以下のように:disable_with=>'アップロード処理中...'と設定しておけば... ボタンを押すと、操作できない状態に変化して、二重送信が防止できる。 同時にボタンの表示が[アップロード処理中...]に変更され、ユーザーにフィードバックできる。 <%= start_form_tag({:action => 'create'}, :multipart => true) %> <%= render :pa

  • 1アクションで複数のモデルを同時に保存するには? - ザリガニが見ていた...。

    今更ながら基的なことかもしれないが(自分では今も悩み続けている)、業務システムで入力する部分を作っていると、しばしば2つ以上のモデルを同時に保存したい状況に陥る。例えば、伝票を入力する場合であれば、伝票は複数の明細行を持っているので、共通情報を保持する伝票(Slip)クラスと、明細行情報を保持する明細行(Journal)クラスに分けている。そのようなシステムで、Submitボタンを押した後の処理は、模範的にはどのようにすべきなのだろうか? 保存する時には、以下の仕様を満たしておきたい。 class Slip {has_many :journals}; class Journal {belongs_to :slip}; な関連である。 検証エラーが発生したら... 保存は一切しない。 すべてのモデルの検証エラー情報を表示する。 Journalモデルの件数は可変である。 悩みのポイントは、S

    1アクションで複数のモデルを同時に保存するには? - ザリガニが見ていた...。
  • restful_authentication + ruby-gettext + form_forで権限管理付きログインページの雛形を作る(日本語版) - ザリガニが見ていた...。

    restful_authenticationに権限(role)管理を追加して、実用的に利用するカスタマイズ例として、Restful Authentication with all the bells and whistlesを参考にいろいろ考えてみた。コードを読みながら、次第に以下のような疑問や考えが浮かんできた。 メール送信処理のきっかけに、なぜobserverを利用するだろうか? observerはコールバック(before_createとかafter_save等)を外部のオブザーバーオブジェクトで処理するようなもの。 モデル自身のコールバックとして処理しても良いはず。 restful_authenticationの実装を見ると、コールバックの中で条件によって処理を分岐するために、モデルの状態をインスタンス変数にわざわざ保存している。 例:@activated = true、@forg

    restful_authentication + ruby-gettext + form_forで権限管理付きログインページの雛形を作る(日本語版) - ザリガニが見ていた...。
  • restful_authenticationで認証メールをgmailから送信して、エイリアスアドレスで受信する - ザリガニが見ていた...。

    現状は動作確認のため自分の.Mac(MobileMe)を利用して認証メールを送信するようにしているが、当はgmailを利用して送信したかった...。.Macメールでちゃんと送信できれば、そのまま設定を置き換えればgmailでも送信できそうなのもだが、何度やってもgmailからは送信してくれない...。調べていくと、gmailの場合はSMTPにTSLで接続する必要があるらしい。 しかし、RubyがSSL/TSLに対応しているのは1.9系かららしい。そのため、1.8系でgmailを利用するためには、以下のコードで拡張する必要があるようだ。 lib/smtp_tls.rbによる拡張 以下のコードをRailsプロジェクトのlibフォルダ以下にsmtp_tls.rbとして保存した。 # ---------- lib/smtp_tls.rb ---------- require "openssl"

    restful_authenticationで認証メールをgmailから送信して、エイリアスアドレスで受信する - ザリガニが見ていた...。
  • Rails2.0から2.1への移行を試してみる - ザリガニが見ていた...。

    ここ最近、MacBookの作業環境改善に努めている間に、Railsは2.1にバージョンアップしていた。相変わらずの進化のスピード。すでに出遅れた感はあるが、自分のRails環境も2.1にしてみた。Railsの複数バージョン環境は共存できることが分かっているので結構気軽に。でも、2.1環境でちゃんと稼働させるまでには、それなりの試練が待っていた。 gemでアップデート 視野の狭い自分は、いきなりgem update railsとやってしまったが、これではちゃんとアップデートされなかった。まずはgem自体のアップデートが必要なことが多いのであった...。(以前の日記Rails2.0.2を使ってみるにも書いていたのに、すっかり忘れている。)もう一度仕切り直しで、以下のようにしてみた。 gemのバージョンが1.0.1から1.1.1に上がった。 $ sudo gem update --system

    Rails2.0から2.1への移行を試してみる - ザリガニが見ていた...。
  • assert_selectの使い方 - ザリガニが見ていた...。

    webアプリケーションは、結局のところ適切なHTML文書を返すサーバーなので、最終的にはレスポンスとして返すHTMLが予想通りであれば良いということになる。ところが、HTMLを比較する時には単純に文字列として比較するのは問題がある。ブラウザの描画には影響しないコメントや改行、スペース、タブが含まれているからだ。確認したいのはwebブラウザの描画結果が適切なこと、つまりHTMLの構造が適切かどうか。 その確認をするために、Railsには「assert_select」メソッドが用意されていた。assert_selecteを利用すると、CSSのセレクタで指定する要領でHTMLの構造が適切かどうか、効率よく調べることができる。assert_selectは幅広い応用力を持っている!が、ちゃんと理解して使いこなすのはちょっと大変そうだ。以下は自分がひたすら試してみた、例題とその動き。 書式 現在表示し

    assert_selectの使い方 - ザリガニが見ていた...。
  • Subversionでファイルのバージョン管理をしてみる。 - ザリガニが見ていた...。

    プラグインをSubversionを利用してインストールしたついでに、バージョン管理の方法も調べてみた。自分の場合はバージョン管理といってもファイルの更新履歴を管理するだけなのだが、過去のどの時点の状態にも戻ることが出来る、というのはすごく魅力を感じる。いちいちファイル名の後に数字を付けてバックアップする、なんていう煩わしさが無くなるのだ。 ローカルヒストリーの利用 Subversionでバージョン管理と書いたが、実はRadRailsを使っていればSubversionを利用するまでもなく、戻りたい過去にいつでも戻ることが可能だった...。一人で作業して更新履歴を保管しておく目的なら、既に環境は整っていたのだ。ただ今まで知らなかっただけ。素晴らしい機能があるのに、ずいぶん勿体無いことをしてきた...。(RadRailsを日語化していろいろ見ているうちに気付いた) ファイルの更新履歴を確認した

    Subversionでファイルのバージョン管理をしてみる。 - ザリガニが見ていた...。
  • 2.0のcookie session storeを体感する - ザリガニが見ていた...。

    Rails2.0の変更点で、セッション(session)データの保存先がクッキー(cookie)になったということを、よく目にする。確認してみると、確かに以前はtmp/sessionsフォルダの中に常にセッションファイルがあり、増え続けていたが、2.0環境にしてからはいつも空っぽだ。そうなると、当にクッキーに保存されているのか?どのように保存されているのか?実際に覗いてみたくなった...。 クッキーを確認する MacOS X版のFirefox2.0のクッキーは、Firefoxの環境設定 >> プライバシー タブ >> Cookieを表示 ボタン、で表示される。 想像以上のクッキーの多さに驚く。一つずつ見ていてはキリが無いので、検索で「localhast」と入力してみる。 すると一気に絞り込まれ、Cookie名から「_test_slip202_session」が求めるクッキーだと予想できる

    2.0のcookie session storeを体感する - ザリガニが見ていた...。
  • 2.0のmap.resourcesのオプション設定いろいろ - ザリガニが見ていた...。

    今までおろそかにしていた「ルート設定」ではあるが、Rails2.0からは避けて通ることができない*1と今更ながら思い直し、いろいろ試してみた。以下はその実験結果。 基 追加オプションなしの基ルート設定map.resources :slipsによって、以下のルート規則が生成される。 ルート規則は上にあるものが優先される。 .:formatが付属する偶数No.の行は、http://XXXX.XXX/slips.xml等の拡張子付きのリクエストを、respond_toブロックで適切に処理するために存在する。 # ルート設定: config/routes.rb ActionController::Routing::Routes.draw do |map| map.resources :slips end No. 名前付きルート名 メソッド URLパス書式 処理されるコントローラー、アクション

    2.0のmap.resourcesのオプション設定いろいろ - ザリガニが見ていた...。
  • 2.0のPUTにハマる - ザリガニが見ていた...。

    test_slip202プロジェクトは、Rails1.2.6環境で作り始めた明細行を持つ伝票入力のサンプルプロジェクトだ。1.2.6環境までは調子よく動いている。最近、Rails2.0.2環境にしてから、明細行の挿入・削除・コピーがeditページの時だけ機能しなくなっていることに気付いた。(newページでは正常に動作する。不思議...。)伝票を表示するビューは、おおよそ以下と同等のコードになっている。 以下で伝票の共通情報を描画する。 明細行はテーブルの中でrender :partial=>'journals/form'を呼び出して描画している。 # ビュー: app/views/slips/edit.html.erb <div class="slip" id="slip"> <h1><%= _('Editing slip') %></h1> <% form_for @slip do |f

    2.0のPUTにハマる - ザリガニが見ていた...。
  • 2.0のscaffoldから書き直してみる - ザリガニが見ていた...。

    Rails2.0.2環境にして試行錯誤中。前回までにRails1.2.6の既存プロジェクトを2.0.2環境で稼働出来るようにはなった。しかし、プロジェクトを新規作成してから始めようとすると、また勝手が違っていることに気付く。ここは基に返って、scaffoldから同じプロジェクトtest_slip202を作り直してみることに。 作業環境 MacBook OSX10.5 Leopard RadRails0.7.2 現在は配布を終了したのかダウンロード出来ない状態になっている。これからRadRailsを使いたい方は、最新のaptana使うしかなさそう...。(以前、導入に試行錯誤して、結局諦めて0.7.2を使い続けることにした。) 最近は、シンプルにターミナルと自分好みのエディタで十分な気がしてきた。(動作が鈍い&バージョンアップ対応の遅れがちな統合開発環境よりも) sqlite3.4.0 M

    2.0のscaffoldから書き直してみる - ザリガニが見ていた...。
    iR3
    iR3 2008/02/17
  • ツリー構造をマウスで並べ替える。 - ザリガニが見ていた...。

    会社には組織がつきもので、組織はOSのファイルシステムのような階層構造を持っている。そして、会社組織というものは、しょっちゅう変更される運命だ。この変更に迅速、柔軟に対応するために、OSのファイルシステムのように、データベース上のツリー構造をマウスで自在に操作できるようにしたい。Railsにはツリー構造を扱うための仕組み、acts_as_treeがある。これと、前回使ったsortable_elementを組み合わせて、マウスによるツリー構造の操作に対応してみた。 acts_as_treeの組込み parent_idフィールドの追加。(前回のマイグレーションファイルにオレンジ色の1行を追加した。) # マイグレーション:db/migrate/001_create_locks.rb class CreateLocks < ActiveRecord::Migration def self.up

    ツリー構造をマウスで並べ替える。 - ザリガニが見ていた...。
    iR3
    iR3 2008/02/17
  • Amrita2のフィルター色々 - ザリガニが見ていた...。

    Amrita2のフィルターを調べてみた。以下は自分で試したものだけ。この他にもまだ素晴らしいフィルターがたくさんある。 フィルターとは? <<:data | フィルター名称 ...な書式を利用して、:dataの内容に対し、様々な加工をして出力することができる。 前回の「サニタイズの制御」もフィルターの機能によるもの。 フィルター記号「|」で区切って、複数のフィルターを続けて書くことができる。 <<{:index_link => link_to("Index", :action=>:index)}< <<:index_link | NoSanitize | Repeat[3]>> <%# 結果 %> => <a href="/slips">Index</a> <a href="/slips">Index</a> <a href="/slips">Index</a> デフォルト値の設定 nil

    Amrita2のフィルター色々 - ザリガニが見ていた...。
    iR3
    iR3 2008/02/17
  • Mac OSX 10.5 LeopardでRails環境を整える〜RadRails 0.7.2とSubclipse - ザリガニが見ていた...。

    RadRails 0.7.2に戻して一つ悩んでしまったのが、Subversionとの連携がうまく機能しなかったこと。「プロジェクトの共用」を実行しても最後は必ずエラーになってしまい、リポジトリに登録することができない...。調べてみると、これはRadRailsのSubclipseプラグインを最新版にアップデートすれば解決するようなのだが、「ヘルプ >> RadRails更新」で見つかったSubsclipseプラグインも、エラーでインストールできないという状況だった...。 この問題は、「帯に短し・襷に長し」なこと: RadRails Subclipseプラグインのページでも紹介されていて、まさに同じ状況だ。早速、紹介されている手順通りにやってみると...無事subversionとの連携ができるようになりました! 作業内容 radrails/features/org.radrails.fea

    Mac OSX 10.5 LeopardでRails環境を整える〜RadRails 0.7.2とSubclipse - ザリガニが見ていた...。
    iR3
    iR3 2007/12/18
  • Mac OSX 10.5 LeopardでRails環境を整える〜Tracのインストール - ザリガニが見ていた...。

    前回に引き続き、今度はTracというプロジェクト管理ツールを導入してみた。(以前から憧れていたのです。)個人で開発している時でも、開発の手順や必要な機能をリストアップしておくと、今何をするべきかわかりやすくて、無駄な遠回りをしなくても済むのだ。bsjournalの時は、スティッキーズでメモしたり、ノートに書き出したりしていたのでした。これをwebベースで効率的に管理してくれるのがTracなのだと思って、期待して、今回インストールしてみることに。 Tracのインストール方法は、Trac家のTracOnOsxNoFinkやTracOnOsxFromSourcesにかなり詳しく書いてある。(英語の情報ですが...。)試しにOSX 10.4 Tiger環境にインストールした時は、ちゃんと動くようになった。ところが、OSX 10.5環境ではmakeでことごとくエラーになり、正常にインストールするこ

    Mac OSX 10.5 LeopardでRails環境を整える〜Tracのインストール - ザリガニが見ていた...。
    iR3
    iR3 2007/12/18
  • 1