[#22815] File.fnmatch が "*?" のパターンを正しく処理しない? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
山本です。
山本です。
山本です。補足します。
なかだです。
山本です。
山本です。
まつもと ゆきひろです
[#22816] YAML.load(time) on OpenBSD3.4 — "Kawaji, Shinya" <kawaji@...>
かわじ、です
In article <20040207005319=tuYR!@hoppeta.com>,
かわじ、です。
[#22832] Dir.glob("**/") のバグ — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
[#22859] Re: io/nonblock — nobu.nakada@...
なかだです。
[#22862] File.fnmatch と Dir.glob — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
まつもと ゆきひろです
山本です。
山本です。誤記がありました。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
まつもと ゆきひろです
わたなべです。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
なかだです。
山本です。
なかだです。
山本です。
なかだです。
山本です。
[#22870] path for RUBY — GOTOU Yuuzou <gotoyuzo@...>
mkmf.rbでMakefileを作ると、$(RUBY)にディレクトリ名が含まれな
[#22877] Process.spawn & IO.popen w/o shell — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
In message <200402141156.i1EBuYFH018029@sharui.nakada.niregi.kanuma.tochigi.jp>
なかだです。
In message <200402160353.i1G3rGNK007935@sharui.nakada.niregi.kanuma.tochigi.jp>
なかだです。
[#22890] rb_glob(i) & constness — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
In article <20040215161805.6541D650.ocean@m2.ccsnet.ne.jp>,
[#22906] bcc32 の makefile — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
なかだです。
山本です。
山本です。
[#22911] core dump with /#{Thread.pass}/o — Tanaka Akira <akr@...17n.org>
ついに捕まえたのですが、次のようにすると core を吐きます。
[#22928] [BUG] make distclean が失敗する — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
こんにちは、なかむら(う)です。
山本です。
なかだです。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
こんにちは、なかむら(う)です。
[#22956] Dir#glob proposal — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
山本です。
山本です。
[#23032] Re: [Oniguruma] Version 2.2.0 — kkosako@...
> -----Original Message-----
斉藤です。
まつもと ゆきひろです
[#23035] Re: [ruby-talk:93584] date/format.rb fix — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
[#23038] Re: [ruby-cvs] ruby: * eval.c (localjump_destination): lambda should not interfere — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
[#23039] rss/dublincore.rb: dc:date format — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
[ruby-dev:23066] Re: rss/dublincore.rb: dc:date format
須藤です.
In <02fe01c3fd91$cc6f5740$04e6a8c0@aaadom.sarion.co.jp>
"[ruby-dev:23051] Re: rss/dublincore.rb: dc:date format" on Sat, 28 Feb 2004 09:26:18 +0900,
"NAKAMURA, Hiroshi" <nakahiro@sarion.co.jp> wrote:
> > 元ネタのdc:dateはW3CDTFなので,今回はtime.rbを使わずRSS
> > Parserの方で自前でW3CDTF用のパーサを用意しようと思います.
>
> 田中さんも書かれているように、いずれtime.rbが持って欲しいメソッド
> ですね。
もちろん,私もそう思います.
ただ,そうなるまでは(バリデーション付きといっているからには)
自前で用意した方がいいかなと思いました.面倒ですけど.
で,time.rbが持ってくれたらうれしいなと思って,
Time.xmlschemaとは別にTime.w3cdtfを追加したらこんな感じかな
というのを書いてみました.
> Time.iso8601がどういう目的で追加されたのか、という経緯を調べて
> いないので強くは主張できませんが、混乱を防ぐため、なひは削除に一票です。
私もaliasしなくてもいいのではないかと思います.
というのも,iso8601というぐらいだから(たとえaliasであっても)
W3CDTFも扱えるだろうと勝手に思い込んでしまったので.
Index: lib/time.rb
===================================================================
RCS file: /src/ruby/lib/time.rb,v
retrieving revision 1.18
diff -u -p -r1.18 time.rb
--- lib/time.rb 11 Feb 2004 17:36:36 -0000 1.18
+++ lib/time.rb 28 Feb 2004 16:46:58 -0000
@@ -272,25 +272,68 @@ class Time
# See #xmlschema for more information on this format.
#
def xmlschema(date)
- if /\A\s*
- (-?\d+)-(\d\d)-(\d\d)
- T
- (\d\d):(\d\d):(\d\d)
- (\.\d*)?
- (Z|[+-]\d\d:\d\d)?
- \s*\z/ix =~ date
- datetime = [$1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i]
- datetime << $7.to_f * 1000000 if $7
- if $8
- Time.utc(*datetime) - zone_offset($8)
- else
- Time.local(*datetime)
- end
+ make_time(date) do |time_data|
+ time_data.sec
+ end
+ end
+ alias iso8601 xmlschema
+
+ #
+ # See http://www.w3.org/TR/NOTE-datetime
+ #
+ def w3cdtf(date)
+ make_time(date) do |time_data|
+ (time_data.min and time_data.zone) or
+ (time_data.min.nil? and time_data.zone.nil?)
+ end
+ end
+
+ private
+ def make_time(date)
+ if (time_data = parse_time(date)) and yield(time_data)
+ datetime = time_data.to_a
+ zone = datetime.pop
+ datetime.compact!
+ if zone
+ Time.utc(*datetime) - zone_offset(zone)
+ else
+ Time.local(*datetime)
+ end
else
raise ArgumentError.new("invalid date: #{date.inspect}")
end
end
- alias iso8601 xmlschema
+
+ def parse_time(str)
+ if md = /\A\s*
+ (-?\d+)-(\d\d)-(\d\d)
+ (?:T
+ (\d\d):(\d\d)(?::(\d\d))?
+ (\.\d+)?
+ (Z|[+-]\d\d:\d\d)?)?
+ \s*\z/ix.match(str)
+ ParsedTime.new(*md.to_a[1..-1])
+ else
+ false
+ end
+ end
+
+ ParsedTimeBase = Struct.new(:year, :mon, :day, :hour, :min,
+ :sec, :usec, :zone)
+ class ParsedTime < ParsedTimeBase
+ def initialize(*args)
+ super
+ self.usec = usec
+ end
+
+ def usec=(new_value)
+ if new_value
+ super(new_value.to_f * 1000000)
+ else
+ super(nil)
+ end
+ end
+ end
end # class << self
#
@@ -512,6 +555,61 @@ if __FILE__ == $0
Time.xmlschema("2000-01-12T12:13:14Z"))
assert_equal(Time.utc(2001, 4, 17, 19, 23, 17, 300000),
Time.xmlschema("2001-04-17T19:23:17.3Z"))
+ end
+
+ # http://www.w3.org/TR/NOTE-datetime
+ def test_w3cdtf
+ assert_equal(Time.utc(1999, 5, 31, 13, 20, 0) + 5 * 3600,
+ Time.w3cdtf("1999-05-31T13:20:00-05:00"))
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2000-01-20T12:00:00")
+ }
+ assert_equal(Time.utc(2000, 1, 20, 12, 0, 0),
+ Time.w3cdtf("2000-01-20T12:00:00Z"))
+ assert_equal(Time.utc(2000, 1, 20, 12, 0, 0) - 12 * 3600,
+ Time.w3cdtf("2000-01-20T12:00:00+12:00"))
+ assert_equal(Time.utc(2000, 1, 20, 12, 0, 0) + 13 * 3600,
+ Time.w3cdtf("2000-01-20T12:00:00-13:00"))
+ assert_equal(Time.utc(2000, 3, 4, 23, 0, 0) - 3 * 3600,
+ Time.w3cdtf("2000-03-04T23:00:00+03:00"))
+ assert_equal(Time.utc(2000, 3, 4, 20, 0, 0),
+ Time.w3cdtf("2000-03-04T20:00:00Z"))
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2000-01-15T00:00:00")
+ }
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2000-02-15T00:00:00")
+ }
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2000-01-15T12:00:00")
+ }
+ assert_equal(Time.utc(2000, 1, 16, 12, 0, 0),
+ Time.w3cdtf("2000-01-16T12:00:00Z"))
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2000-01-01T12:00:00")
+ }
+ assert_equal(Time.utc(1999, 12, 31, 23, 0, 0),
+ Time.w3cdtf("1999-12-31T23:00:00Z"))
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2000-01-16T12:00:00")
+ }
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2000-01-16T00:00:00")
+ }
+ assert_equal(Time.utc(2000, 1, 12, 12, 13, 14),
+ Time.w3cdtf("2000-01-12T12:13:14Z"))
+ assert_equal(Time.utc(2001, 4, 17, 19, 23, 17, 300000),
+ Time.w3cdtf("2001-04-17T19:23:17.3Z"))
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2001-04-17T19:23:17.Z")
+ }
+ assert_equal(Time.local(2001, 4, 17, 0, 0, 0, 0),
+ Time.w3cdtf("2001-04-17"))
+ assert_equal(Time.utc(2001, 4, 17, 19, 23, 0, 0),
+ Time.w3cdtf("2001-04-17T19:23Z"))
+ assert_raise(ArgumentError) {
+ Time.w3cdtf("2001-04-17T19:23")
+ }
end
def test_encode_xmlschema