[前][次][番号順一覧][スレッド一覧]

ruby:549

From: Hiroshi Takagi <gollum@h...>
Date: Sun, 31 Oct 2004 17:17:19 +0900
Subject: [ruby:549] るびまネタ: わたしのライブラリ

たかぎ@ログ解析屋%今日はおうちです。

先日の関西オープンソース2004ではいろいろとありがとうございました。
ミーハーなので、あの高橋さん、前田さんを見られただけで
満足して帰っちゃいましたが^^;


ところで、会場で話題になってた るびまの今後のネタ、という話でひとつ提案があります。

#私のライブラリ(always 'required' libs)公開、ってのどうでしょうか?


Ruby を使われている方なら、
自分の仕事分野でよく使う、自作のカスタムメソッドクラスなどを、
自分のライブラリファイルに集めておいて、スクリプトの先頭で

require 'mylib'
require 'myclasses'

とかしてる方が多いんではないかと。

わたしは、メソッドの細かいパラメータとかフォーマットを
すぐに忘れてしまうような浅いスタックの揮発性メモリしか頭脳に有しておりません。
一度、調べたことはメソッド化しておいておかないと忘れてしまいます。
(フォーマット文字列なんて、どれがなんだを入れておけないんですよね〜(恥

クラス・メソッド、インスタンス・メソッドの活用事例としても参考になるでしょうし、
カスタムで作られているクラスなどの事例がいろいろあれば、
これも、OOP を学ぶときのいい教材になるのではないかと思います。

いいだしべぇのわたしのものはこんな mylib.rb です。
私はログ解析屋なんで、
Date オブジェクト(これがあるからruby に転んだのかも)まわりのものがやたらと多い。
「先月の」「今月の」「先週の」ログを扱うために
しょっちゅう使うメソッドばっかりですが。

### working with Date object

require 'date'

def last_month
    # return previous month in string form 'yyyy-mm'

    today = Date.today
    last_day_of_prev_month = today - today.day
    last_day_of_prev_month.to_s[0, 7]
end

def last_month_start_end
    # return fist day and last day of last month

    today = Date.today
    last_day_of_prev_month = today - today.day
    first_day_of_prev_month = last_day_of_prev_month - last_day_of_prev_month.day + 1
    return first_day_of_prev_month, last_day_of_prev_month
end

def this_month_start_end
    # return fist day and last day of this month

    today = Date.today
    first_day_of_this_month = today - today.day + 1
    first_day_of_next_month = first_day_of_this_month >> 1
    last_day_of_this_month = first_day_of_next_month -1
    return first_day_of_this_month, last_day_of_this_month
end

def sunday_of_last_week
    # return "last Sunday" as Date object

    today = Date.today
    sunday = today - today.wday # Sunday of this week
    sunday - 7                  # Last Sunday
end

### working with Time object

class Time
    def iso8601
        self.strftime("%y-%m-%d %H:%M:%S")
    end
end

def time_stamp(msg)
    print "#{Time.now.iso8601} #{msg}"
end


ruby-list:39826 で中田さんに考案していただいた
以下のモジュールも重宝しているものです。

(要素がString, Fixnum  以外のカスタムオブジェクトで
  配列の集合演算可能にするためのモジュール。)


module Hash::ReadyMade
        def eql?(other)
            self.class == other.class and
            (sv = instance_variables).size == (ov = other.instance_variables).size and
                sv.all? do |v| ov.include?(v) and
                instance_variable_get(v).eql?(other.instance_variable_get(v))
        end
        end
        def hash
                instance_variables.inject(self.class.hash) {|h, v|
                    h ^ instance_variable_get(v).hash
                }
        end
end

Ruby っぽくないスクリプトをいっぱい並べ立ててすみません^^

ではでは、また。
-- 
Hiroshi Takagi <gollum@h...>



--
ML: ruby@m...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]