[#38988] Re: [ruby-cvs:31575] Ruby:r24357 (trunk): * bootstraptest/runner.rb: made executable. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#38996] [Bug #1872] [ruby_1_8] Kernel#system doesn't work in forked process — Hidetoshi Nagai <redmine@...>
Bug #1872: [ruby_1_8] Kernel#system doesn't work in forked process
[#39006] [Bug #1787] URI ライブラリの正規表現パターン — Yui NARUSE <redmine@...>
チケット #1787 が更新されました。 (by Yui NARUSE)
[#39029] [bug:trunk] Re: [ruby-cvs:31633] Ruby:r24415 (trunk): * ext/digest/sha2/sha2.[ch]: Update to 1.0 RELEASE which fixes an — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
At Thu, 6 Aug 2009 14:07:19 +0900,
こんにちは、なかむら(う)です。
[#39035] [Bug #1904] cmp required? — Kazuhiro NISHIYAMA <redmine@...>
Bug #1904: cmp required?
[#39038] [Feature:1.9] How about IPAddr#<=> to take care of mask_addr? — Nobuhiro IMAI <nov@...>
いまいです。
いまいです。
いまいです。
[#39052] Fwd: [redmine4ruby-lang:253] [Bug #1914] ruby-1.9.1-p243 failed to build from source on aix 5.3 with gcc 4.2.0 — Yugui <yugui@...>
Redmine管理用プロジェクトに報告されてしまったので転送します。
金本と申します。
なかだです。
金本と申します。
[#39065] ChangeLog for r2004 (ruby-mode.el) — TAKAHASHI Kaoru <kaoru-ml@...>
高橋@TNTです。
[#39090] Re: [ruby-cvs:31774] Ruby:r24556 (trunk): * lib/date/format.rb: reverted. — "NARUSE, Yui" <naruse@...>
tadf@ruby-lang.org wrote:
> これですが、[ruby-dev:39089]との事なので修正お願いします。
Tadayoshi Funaba wrote:
[#39096] Re: [ruby-cvs:31781] Ruby:r24563 (trunk): * numeric.c (flo_pow,fix_pow): may return complex number. — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#39106] [Feature #1951] openのBOM指定拡張 — Yui NARUSE <redmine@...>
Feature #1951: openのBOM指定拡張
[#39107] [Bug #1952] cannot stop with Ctrl+C — Usaku NAKAMURA <redmine@...>
Bug #1952: cannot stop with Ctrl+C
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#39109] StopIteration#result — Tanaka Akira <akr@...>
StopIteration#result を新設するのはどうでしょう?
In article <877hx1nmkp.fsf@fsij.org>,
まつもと ゆきひろです
In article <E1MdWX5-0000CL-4f@x61.netlab.jp>,
[#39146] [Bug #1967] Segmentation fault at test_qsort1 and test_qsort2 in test/dl/test_func.rb running on sparc-solaris-2.10 — Naohisa Goto <redmine@...>
Bug #1967: Segmentation fault at test_qsort1 and test_qsort2 in test/dl/test_func.rb running on sparc-solaris-2.10
[#39148] [Bug #1969] irb will be stuck with long variable name with completion.rb — Yoshimasa Niwa <redmine@...>
Bug #1969: irb will be stuck with long variable name with completion.rb
[#39150] [Bug #1976] Errors in test/fileutils/test_fileutils.rb — Kazuhiro NISHIYAMA <redmine@...>
Bug #1976: Errors in test/fileutils/test_fileutils.rb
[#39152] [Bug #1977] test failed in test_isdigit in test/dl/test_func.rb on sparc-solaris-2.10 (64bit) — Naohisa Goto <redmine@...>
Bug #1977: test failed in test_isdigit in test/dl/test_func.rb on sparc-solaris-2.10 (64bit)
チケット #1977 が更新されました。 (by Aaron Patterson)
[#39167] [Bug #2000] Change the license to "GPLv2+ or Ruby's original". — Mamoru Tasaka <redmine@...>
Bug #2000: Change the license to "GPLv2+ or Ruby's original".
[#39183] defining {file,line,name} methods for each backtrace entry — "Akinori MUSHA" <knu@...>
バックトレースの各行は整形済み文字列になっていますが、それを
[#39184] URI.escape_component — "Akinori MUSHA" <knu@...>
JavaScript の escapeURIComponent() 相当の関数ってありましたっけ?
[#39193] Re: [ruby-cvs:31917] Ruby:r24699 (trunk): * lib/tmpdir.rb (Dir.mktmpdir): removed thread race condition. — Tanaka Akira <akr@...>
In article <200908281827.n7SIRbaX003476@ci.ruby-lang.org>,
なかだです。
In article <4a988633.9553f10a.4496.483e@mx.google.com>,
なかだです。
In article <4a989f76.1602be0a.3de4.1131@mx.google.com>,
まつもと ゆきひろです
なかだです。
In article <4a9b9f29.1cba720a.7bf1.369b@mx.google.com>,
なかだです。
In article <4a9f873c.22035a0a.40fb.2740@mx.google.com>,
小崎と申します
In article <20090904093921.9132.A69D9226@jp.fujitsu.com>,
[#39203] [Feature #2017] String#/(sep) — Yui NARUSE <redmine@...>
Feature #2017: String#/(sep)
[ruby-dev:39038] [Feature:1.9] How about IPAddr#<=> to take care of mask_addr?
いまいです。
#1877 はありがとうございました。
IPAddr のインスタンスがハッシュのキーに出来るようになったので、簡単な
Access Control List を書いてみたのですが、
>> RUBY_DESCRIPTION
=> "ruby 1.9.2dev (2009-08-07 trunk 24440) [i686-linux]"
>> acl = {
?> IPAddr.new("192.168.2.0/29") => :admin,
?> IPAddr.new("192.168.2.0/24") => :user,
?> }
=> {#<IPAddr: IPv4:192.168.2.0/255.255.255.248>=>:admin, #<IPAddr: IPv4:192.168.2.0/255.255.255.0>=>:user}
>> acl.select{|r, | r === "192.168.2.56"}.max.last
=> :user
>> acl.select{|r, | r === "192.168.2.1"}.max.last
=> :user
と、ちょっと残念な感じです。<=> で、@addr が同じ場合は @mask_addr の大
きい方が IPAddr として大きいとすると、ネットマスクの長い方が採用される
ようなイメージでうれしい気がするのですが、どうでしょうか?
また、これで(というか元から?) IPAddr#== は不要な気がするのですが、何
か見落としてるでしょうか?
IPAddr.new("192.168.2.0/24") == IPAddr.new("192.168.2.0/32")
が true から false に変わるという仕様変更なのですが、どうでしょうか?
--
Nobuhiro IMAI <nov@yo.rim.or.jp>
Key fingerprint = F39E D552 545D 7C64 D690 F644 5A15 746C BD8E 7106
Index: lib/ipaddr.rb
===================================================================
--- lib/ipaddr.rb (revision 24440)
+++ lib/ipaddr.rb (working copy)
@@ -133,16 +133,10 @@ class IPAddr
# Returns a new ipaddr built by bitwise negation.
def ~
return self.clone.set(addr_mask(~@addr))
end
- # Returns true if two ipaddrs are equal.
- def ==(other)
- other = coerce_other(other)
- return @family == other.family && @addr == other.to_i
- end
-
# Returns a new ipaddr built by masking IP address with the given
# prefixlen/netmask. (e.g. 8, 64, "255.255.255.0", etc.)
def mask(prefixlen)
return self.clone.mask!(prefixlen)
end
@@ -325,11 +319,11 @@ class IPAddr
def <=>(other)
other = coerce_other(other)
return nil if other.family != @family
- return @addr <=> other.to_i
+ return [@addr, @mask_addr] <=> [other.to_i, other.mask_addr]
end
include Comparable
# Checks equality used by Hash.
def eql?(other)
@@ -372,10 +366,12 @@ class IPAddr
af, _to_string(@addr), _to_string(@mask_addr))
end
protected
+ attr_reader :mask_addr
+
def set(addr, *family)
case family[0] ? family[0] : @family
when Socket::AF_INET
if addr < 0 || addr > IN4MASK
raise ArgumentError, "invalid address"
@@ -789,15 +785,24 @@ class TC_Operator < Test::Unit::TestCase
a = ~@in6_addr_any
assert_equal(IN6MASK128, a.to_s)
assert_equal("::", @in6_addr_any.to_s)
end
- def test_equal
- assert_equal(true, @a == IPAddr.new("3ffe:505:2::"))
+ def test_compare
+ assert_equal(true, @a == IPAddr.new("3ffe:505:2::/48"))
+ assert_equal(false, @a == IPAddr.new("3ffe:505:2::"))
assert_equal(false, @a == IPAddr.new("3ffe:505:3::"))
assert_equal(true, @a != IPAddr.new("3ffe:505:3::"))
- assert_equal(false, @a != IPAddr.new("3ffe:505:2::"))
+ assert_equal(false, @a != IPAddr.new("3ffe:505:2::/48"))
+ x = IPAddr.new("3ffe:505:3::/48")
+ y = IPAddr.new("3ffe:505:2::/64")
+ assert_equal(true, @a < x)
+ assert_equal(true, @a < y)
+ assert_equal(false, x < y)
+ min, max = [y, x, @a].minmax
+ assert_equal(@a, min)
+ assert_equal(x, max)
end
def test_mask
a = @a.mask(32)
assert_equal("3ffe:505::", a.to_s)