[#10467] Module re-inclusion in 1.9 vs 1.8 — "Rick DeNatale" <rick.denatale@...>
Some months ago I noticed that the semantics of module inclusion had
[#10468] Floats that are NaN have strange behavior — Jonas Kongslund <jonas@...>
Hi
[#10478] Plan to add ext/digest/lib/digest/hmac.rb to 1.8.6 or 1.8.7? — "Zev Blut" <rubyzbibd@...>
Hello,
[#10480] Ruby 1.8.6 delayed for seven days — "Akinori MUSHA" <knu@...>
I am afraid I have to announce that Ruby 1.8.6 final release will be
[#10490] Join with block — "Farrel Lifson" <farrel.lifson@...>
This patch adds the ability to give the Array#join method a block like so
[#10492] Ruby 1.8.6 preview3 has been released — "Akinori MUSHA" <knu@...>
Hi,
Akinori MUSHA wrote:
On Mon, 5 Mar 2007, Akinori MUSHA wrote:
On Mar 5, 2007, at 04:16, Hugh Sasse wrote:
On Tue, 6 Mar 2007, Eric Hodel wrote:
On Mar 5, 2007, at 10:46, Hugh Sasse wrote:
On Tue, 6 Mar 2007, Eric Hodel wrote:
On Mar 5, 2007, at 12:07, Hugh Sasse wrote:
On Tue, 6 Mar 2007, Eric Hodel wrote:
Hi,
On Tue, 6 Mar 2007, Nobuyoshi Nakada wrote:
Hi,
[#10494] make check for 1.8.6-preview3: TestDBM: DBMError: dbm_store failed — <noreply@...>
Bugs item #9031, was opened at 2007-03-04 12:57
[#10507] Dynamic Array#join with block — <noreply@...>
Patches item #9055, was opened at 2007-03-05 19:57
Hi,
On 06/03/07, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
On 06/03/07, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
Hi,
On 09/03/07, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
[#10536] DRb freezes YARV? — "Meinrad Recheis" <meinrad.recheis@...>
dear all,
[#10552] ruby 1.8.5p12: default IO object for gets() ? — Unknown <borg@...3.net>
Hello..
[#10563] Ruby 1.8.6 has been released — "Akinori MUSHA" <knu@...>
Hello,
[#10575] 'rescue' with non-exception class — Brian Candler <B.Candler@...>
I was just caught out by this odd behaviour: a 'rescue' clause doesn't
[#10580] Kernel#exec on OSX — "Kent Sibilev" <ksruby@...>
Does anyone know how to explain this:
[#10585] Bugfix: Extension Compile Error with 1.8.6 — Lothar Scholz <mailinglists@...>
Hello,
[#10594] grave bug in 1.8.6's thread implementation — Sylvain Joyeux <sylvain.joyeux@...4x.org>
In ext/thread/thread.c, remove_one leaves the list in an inconsistent state.
On Thu, 15 Mar 2007 00:15:57 +0900, Sylvain Joyeux <sylvain.joyeux@m4x.org> wrote:
> > The fix is in thread-mutex-remove_one.diff.
On Thu, 15 Mar 2007 01:19:04 +0900, Sylvain Joyeux <sylvain.joyeux@m4x.org> wrote:
On Wednesday 14 March 2007 17:29, MenTaLguY wrote:
On Thu, 15 Mar 2007 01:48:42 +0900, Sylvain Joyeux <sylvain.joyeux@m4x.org> wrote:
Here the next one (hopefully the last)
On Thu, 15 Mar 2007 03:11:41 +0900, Sylvain Joyeux <sylvain.joyeux@m4x.org> wrote:
On Wednesday 14 March 2007, MenTaLguY wrote:
On Thu, 15 Mar 2007 06:07:30 +0900, Sylvain Joyeux <sylvain.joyeux@m4x.org> wrote:
At Thu, 15 Mar 2007 10:18:19 +0900,
> Which set of patches do you think should be committed? The former to
[#10615] Multiton in standard library — TRANS <transfire@...>
Hi--
On 3/15/07, Tom Pollard <tomp@earthlink.net> wrote:
On Mar 15, 2007, at 11:46 PM, TRANS wrote:
On 3/16/07, James Edward Gray II <james@grayproductions.net> wrote:
[#10646] Marshal.dump shouldn't complain about singletons if the _dump method is defined — <noreply@...>
Bugs item #9376, was opened at 2007-03-19 15:58
noreply@rubyforge.org wrote:
On Monday 19 March 2007 18:01, Urabe Shyouhei wrote:
Hi,
On 3/19/07, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
Hi,
> |But what if that singleton class just contained a method that allowed
Hi,
[#10701] Discrepancy between GetoptLong.new and documentation — <noreply@...>
Bugs item #8384, was opened at 2007-02-02 10:06
> -----Original Message-----
[#10705] Google Summer of Code proposal. — "Pedro Del Gallego" <pedro.delgallego@...>
Hi,
On 3/21/07, Pedro Del Gallego <pedro.delgallego@gmail.com> wrote:
[#10711] Re: Extensions to ipaddr.rb — Brian Candler <B.Candler@...>
> Is this your intention?
[#10712] Ruby Method Signatures (was Re: Multiton in standard library) — "Rick DeNatale" <rick.denatale@...>
On 3/19/07, TRANS <transfire@gmail.com> wrote:
On 3/19/07, TRANS <transfire@gmail.com> wrote:
On 3/21/07, Jos Backus <jos@catnook.com> wrote:
On 3/21/07, TRANS <transfire@gmail.com> wrote:
On Thu, Mar 22, 2007 at 10:26:38PM +0900, Rick DeNatale wrote:
On 3/22/07, Paul Brannan <pbrannan@atdesk.com> wrote:
On 3/23/07, Rick DeNatale <rick.denatale@gmail.com> wrote:
[#10729] BUGS in metaclasses inheritance — <noreply@...>
Bugs item #9462, was opened at 22/03/2007 11:19
noreply@rubyforge.org wrote:
[#10746] sub-process with Test::Unit does not exit error code as expected — <noreply@...>
Bugs item #9300, was opened at 2007-03-15 03:35
Hi,
[#10749] class_extension — TRANS <transfire@...>
I'm just following up to find out the status of consideration for
[#10768] Lastest Version IRHG - Technical Review Requested — Charles Thornton <ceo@...>
TO: CORE
[#10798] Virtual classes and 'real' classes -- why? — "John Lam (CLR)" <jflam@...>
I was wondering if someone could help me understand why there's a parallel =
On Thu, 29 Mar 2007 04:44:16 +0900, "John Lam (CLR)" <jflam@microsoft.com> wrote:
Thanks for sharing the eigenclass hack.
John Lam (CLR) wrote:
[#10818] Bug in Net::HTTP#keep_alive? — Aaron Patterson <aaron@...>
Sometimes Apache will send a connection header like this:
Should I submit a bug for this? I guess I'm not sure what proper
[#10826] Comparable module and values of <=> operator — David Flanagan <david@...>
The rdoc for the Comparable module and its methods consistently indicate
Replying to my own post...
I think there's nothing wrong with the implementation and documentation.
Extensions to ipaddr.rb
I'd like to contribute the following extensions to ipaddr.rb
They allow the following constructs:
puts IPAddr.new("192.168.0.0") + 1 # => 192.168.0.1
puts IPAddr.new("192.168.0.0") - 1 # => 192.167.255.255
puts IPAddr.new("192.168.0.0/24").netmask # => 255.255.255.0
puts IPAddr.new("192.168.0.0/24").prefixlen # => 24
puts IPAddr.new("192.168.0.0/24").size # => 256
Regards,
Brian Candler.
Attachments (1)
--- /usr/lib/ruby/1.8/ipaddr.rb 2006-08-04 23:00:21.000000000 +0100
+++ ipaddr.rb 2007-03-21 10:11:55.000000000 +0000
@@ -125,6 +125,16 @@
return self.clone.set(addr_mask(@addr << num))
end
+ # Returns a new ipaddr built by addition.
+ def +(other)
+ return self.clone.set(@addr + other.to_i)
+ end
+
+ # Returns a new ipaddr built by subtraction.
+ def -(other)
+ return self.clone.set(@addr - other.to_i)
+ end
+
# Returns a new ipaddr built by bitwise negation.
def ~
return self.clone.set(addr_mask(~@addr))
@@ -331,6 +341,37 @@
af, _to_string(@addr), _to_string(@mask_addr))
end
+ # Return just the netmask.
+ def netmask
+ _to_string(@mask_addr)
+ end
+
+ # Return just the prefix length.
+ def prefixlen
+ m = case @family
+ when Socket::AF_INET
+ IN4MASK
+ when Socket::AF_INET6
+ IN6MASK
+ else
+ raise "unsupported address family"
+ end
+ return $1.length if /\A(1*)(0*)\z/ =~ (@mask_addr & m).to_s(2)
+ raise "bad addr_mask format"
+ end
+
+ # Return the number of IP addresses in the block.
+ def size
+ case @family
+ when Socket::AF_INET
+ ((~@mask_addr) & IN4MASK) + 1
+ when Socket::AF_INET6
+ ((~@mask_addr) & IN6MASK) + 1
+ else
+ raise "unsupported address family"
+ end
+ end
+
protected
def set(addr, *family)
@@ -547,6 +588,9 @@
a = IPAddr.new("0123:4567:89ab:cdef:0ABC:DEF0:1234:5678")
assert_equal("123:4567:89ab:cdef:abc:def0:1234:5678", a.to_s)
assert_equal("0123:4567:89ab:cdef:0abc:def0:1234:5678", a.to_string)
+ assert_equal("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", a.netmask)
+ assert_equal(128, a.prefixlen)
+ assert_equal(1, a.size)
assert_equal(Socket::AF_INET6, a.family)
a = IPAddr.new("3ffe:505:2::/48")
@@ -556,6 +600,9 @@
assert_equal(false, a.ipv4?)
assert_equal(true, a.ipv6?)
assert_equal("#<IPAddr: IPv6:3ffe:0505:0002:0000:0000:0000:0000:0000/ffff:ffff:ffff:0000:0000:0000:0000:0000>", a.inspect)
+ assert_equal("ffff:ffff:ffff:0000:0000:0000:0000:0000", a.netmask)
+ assert_equal(48, a.prefixlen)
+ assert_equal(1 << 80, a.size)
a = IPAddr.new("3ffe:505:2::/ffff:ffff:ffff::")
assert_equal("3ffe:505:2::", a.to_s)
@@ -566,6 +613,16 @@
assert_equal("0.0.0.0", a.to_s)
assert_equal("0.0.0.0", a.to_string)
assert_equal(Socket::AF_INET, a.family)
+ assert_equal("#<IPAddr: IPv4:0.0.0.0/255.255.255.255>", a.inspect)
+ assert_equal("255.255.255.255", a.netmask)
+ assert_equal(32, a.prefixlen)
+ assert_equal(1, a.size)
+
+ a = IPAddr.new("0.0.0.0/0")
+ assert_equal("#<IPAddr: IPv4:0.0.0.0/0.0.0.0>", a.inspect)
+ assert_equal("0.0.0.0", a.netmask)
+ assert_equal(0, a.prefixlen)
+ assert_equal(1 << 32, a.size)
a = IPAddr.new("192.168.1.2")
assert_equal("192.168.1.2", a.to_s)
@@ -579,11 +636,17 @@
assert_equal("192.168.1.0", a.to_string)
assert_equal(Socket::AF_INET, a.family)
assert_equal("#<IPAddr: IPv4:192.168.1.0/255.255.255.0>", a.inspect)
+ assert_equal("255.255.255.0", a.netmask)
+ assert_equal(24, a.prefixlen)
+ assert_equal(256, a.size)
a = IPAddr.new("192.168.1.2/255.255.255.0")
assert_equal("192.168.1.0", a.to_s)
assert_equal("192.168.1.0", a.to_string)
assert_equal(Socket::AF_INET, a.family)
+ assert_equal("255.255.255.0", a.netmask)
+ assert_equal(24, a.prefixlen)
+ assert_equal(256, a.size)
assert_equal("0:0:0:1::", IPAddr.new("0:0:0:1::").to_s)
assert_equal("2001:200:300::", IPAddr.new("2001:200:300::/48").to_s)
@@ -728,6 +791,16 @@
assert_equal("3ffe:505:2::", @a.to_s)
end
+ def test_add
+ a = IPAddr.new("3ffe:505:2:1:ffff:ffff:ffff:fffd")
+ assert_equal("3ffe:505:2:1:ffff:ffff:ffff:fffe", (a + 1).to_s)
+ assert_equal("3ffe:505:2:2::", (a + 3).to_s)
+ end
+
+ def test_sub
+ assert_equal("3ffe:505:1:ffff:ffff:ffff:ffff:ffff", (@a - 1).to_s)
+ end
+
def test_carrot
a = ~@in6_addr_any
assert_equal(IN6MASK128, a.to_s)