Coder Social home page Coder Social logo

ipaddress's People

Contributors

asomers avatar bluemonk avatar brohee avatar brona avatar codegoalie avatar eahlstrom avatar francisluong avatar gdlx avatar ghg avatar havenwood avatar icy-arctic-fox avatar jwillemsen avatar kachick avatar kaoudis avatar koic avatar krpk1900 avatar mikemackintosh avatar mikerodrigues avatar nicolasleger avatar nrk avatar paudam avatar pedro-nonfree avatar sandstrom avatar smortex avatar stevschmid avatar vanderhoorn avatar weppos avatar wpiekutowski avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ipaddress's Issues

Regexp for IPv6 addresses

I noticed you have a REGEXP constant for ipv4 addresses. Do you have an equivalent for ipv6 addresses? Seems like that would be good to have too.

Ranges support

Please provide way to use ip addresses with ranges.

ip1 = IPAddress('192.168.10.10')
ip2 = IPAddress('192.168.30.40')

ip = IPAddress('192.168.15.20')

(ip1..ip2).include? ip

Publish 0.8.2

Seems 0.8.0 is the latest I can depend on, can you publish the newer ones? Thank you for this gem!

Add address_scope methods

Add an address_scope method (or possibly 'scope') which will return a text string describing the type of ip address (Looback, autoconfigured, Multicast, RFC1918 etc)

Anyone have objections

IPv? and Prefix? classes don't work as expected in hashes and sets

In the following examples I would expect the set to only have one entry and the hash to only have one key (note: if it's the same object instance you won't see this behaviour).

require 'set'
require 'ipaddress'

# works as expected
net =  IPAddress.parse('192.168.0.0/24')
s = Set.new
s.add net
s.add net
puts s.length # => 1

# doesn't work as expected
s = Set.new
s.add IPAddress.parse('192.168.0.0/24')
s.add IPAddress.parse('192.168.0.0/24')
puts s.length # => 2, should be 1?

# likewise with hashes
# works as expected
net =  IPAddress.parse('192.168.0.0/24')
h = {}
h[net] = true
h[net] = false
puts h.length # => 1

# doesn't work as expected
h = {}
h[IPAddress.parse('192.168.0.0/24')] = true
h[IPAddress.parse('192.168.0.0/24')] = false
puts h.length # => 2, should be 1?

using split() fails if you request more than 32 networks

a Class B network, like "10.13.0.0/16" contains 256 Class C networks [1]. consider the example code:

require 'ipaddress'
x = IPAddress('10.13.0.0/16')
c_class_count = (x.hosts.length / 256) + 1
x.split(c_class_count)

this results in the following error:

ArgumentError: New prefix must be between 16 and 32
from PATH/vendor/cache/ruby/1.9.1/gems/ipaddress-0.8.0/lib/ipaddress/ipv4.rb:684:in `subnet'

I also used "10.0.0.0/8" and reproduced the same behavior.

[1] http://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#IPv4_CIDR_blocks

undefined method `link_local?' for #<IPAddress::IPv4:0x007fbd8353e880>

To reproduce

> ip_adr = IPAddress('192.168.0.1')
> ip_adr.link_local?

or

> ip_adr = IPAddress::IPv4.new('192.168.0.1')
> ip_adr.link_local?

I get this error:

NoMethodError: undefined method `link_local?' for #<IPAddress::IPv4:0x007f9c7c790a70>
  from (irb):19
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/railties-4.2.8/lib/rails/commands/console.rb:110:in `start'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/railties-4.2.8/lib/rails/commands/console.rb:9:in `start'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/railties-4.2.8/lib/rails/commands/commands_tasks.rb:68:in `console'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/railties-4.2.8/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/railties-4.2.8/lib/rails/commands.rb:17:in `<top (required)>'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:274:in `require'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:274:in `block in require'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:240:in `load_dependency'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:274:in `require'
  from /Users/redapc/Sites/INSPINIA-WB0R5L90S/easyforce/bin/rails:9:in `<top (required)>'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:268:in `load'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:268:in `block in load'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:240:in `load_dependency'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/activesupport-4.2.8/lib/active_support/dependencies.rb:268:in `load'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/commands/rails.rb:6:in `call'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/command_wrapper.rb:38:in `call'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/application.rb:201:in `block in serve'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/application.rb:171:in `fork'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/application.rb:171:in `serve'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/application.rb:135:in `run'
  from /Users/redapc/.rvm/gems/ruby-2.3.1/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>'
  from /Users/redapc/.rvm/rubies/ruby-2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  from /Users/redapc/.rvm/rubies/ruby-2.3.1/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
  from -e:1:in `<main>'

ipaddress gem breaks aws-sdk RESTXMLClient

ipaddress is used with the Chef Ohai component, which caused a really bizarre problem: When aws-sdk (1.51.0, the newest atm) is used to do a create_health_check request it can't correctly send xml property named "IPAddress" to the aws api.

How to reproduce with irb:

require 'ipaddress'
require 'aws-sdk'
r53 = AWS::Route53.new(:access_key_id => "....",:secret_access_key => "...",:http_wire_trace => true)
options = {:caller_reference => "foo",:health_check_config => {:ip_address => "54.84.217.101",:type => "HTTP",:resource_path => "/check"}}
r53.client.create_health_check(options)

This prints that the following data is sent to the api:
"<CreateHealthCheckRequest xmlns=\"https://route53.amazonaws.com/doc/2013-04-01/\">\n <CallerReference>foo</CallerReference>\n <HealthCheckConfig>\n <Type>HTTP</Type>\n <ResourcePath>/check</ResourcePath>\n </HealthCheckConfig>\n</CreateHealthCheckRequest>"
(notice that there's no <IPAddress>54.84.217.101</IPAddress> tag)

Now another irb session without ipaddress gem:

require 'aws-sdk'
r53 = AWS::Route53.new(:access_key_id => "....",:secret_access_key => "...",:http_wire_trace => true)
options = {:caller_reference => "foo",:health_check_config => {:ip_address => "54.84.217.101",:type => "HTTP",:resource_path => "/check"}}
r53.client.create_health_check(options)

prints:
"<CreateHealthCheckRequest xmlns=\"https://route53.amazonaws.com/doc/2013-04-01/\">\n <CallerReference>foo</CallerReference>\n <HealthCheckConfig>\n <IPAddress>54.84.217.101</IPAddress>\n <Type>HTTP</Type>\n <ResourcePath>/check</ResourcePath>\n </HealthCheckConfig>\n</CreateHealthCheckRequest>"

So the ipaddress module is somehow monkey-patching something which breaks the aws-cli. the aws-cli builds the requests based on a yaml config which maps ruby property names into xml tags. Editing this yml and replacing the "IPAddress" tag definition with another name, say "IPAddress2" will result that the tag is rendered correctly.

There's at least one other user who was struct with this very same bug: https://forums.aws.amazon.com/thread.jspa?threadID=128785

ipv4 abbreviation not supported

IPAddress::valid_ipv4? '10.1'
=> false

$ ping 10.1
PING 10.1 (10.0.0.1): 56 data bytes

to be honest, not that critical, but still for completenes...

Comparing an IPv4-address with IPv6-address failed

Hi there,
I'm tried the gem and the latest version of IPAddress from the git repository. In both cases I got an error when comparing an IPv4-address with an IPv6-address. Can you help me with suggestions to work around the problem?

[1] pry(#<ApplProxyMgt::ForwardingEntry>)> IPAddress.parse('127.0.0.1').include? IPAddress.parse('::1')
NoMethodError: undefined method `to_u32' for #<IPAddress::IPv6:0x00000005e46a38>
from /home/user/.gem/ruby/2.2.0/bundler/gems/ipaddress-ce5b52474875/lib/ipaddress/ipv4.rb:537:in `include?'

Extra files in the gem

Hello:

I'm packaging this up as an RPM for Fedora (and in the future, EPEL) as a dependency for Chef, and during the packaging process I noticed that the gem has several unneeded files in it, namely .document and (arguably) the gemspec. I'm manually excluding them in the RPM but I thought I'd bring it to your attention for your next release.

IPAddress.parse("1") => doesn't fail.

Is this really correct behaviour? It certainly wasn't the parse exception I expected.

IPAddress::parse "1"
=> #<IPAddress::IPv6:0xb73ba5bc @compressed="1::", @Prefix=128, @address="0001:0000:0000:0000:0000:0000:0000:0000", @groups=[1, 0, 0, 0, 0, 0, 0, 0]>

As a comparison,

IPAddress::parse "111111"
ArgumentError: Invalid IP "111111"

Feature request to allow counting backwards on a network.

I would like a new feature.

Currently NetAddr::CIDR.create('10.0.0.1/31')[0] would give us 10.0.0.0/32 and likewise [1] gives us 10.0.0.1/32.
But I feel that NetAddr::CIDR.create('10.0.0.1/31')[-1] should also give us 10.0.0.1/32. I'm already writing code above NetAddr in a project I'm working on to do this but it would be nice to see the Gem itself support it.

Having the ability to count backwards from the end like Ruby allows us with Arrays is handy for calculating gateways and other kinds of reserved addresses.

Can we get something like this added?

Add Travis CI for this repo

As maintainer or contributor for this repo, I would like branches to be automatically tested using Travis CI.

NoMethodError: undefined method `loopback?' for 127.0.0.1:IPAddress::IPv4

I'm trying to check if my IP is a loopback ip, I get this:

ip = IPAddress('127.0.0.1').loopback?
NoMethodError: undefined method `loopback?' for 127.0.0.1:IPAddress::IPv4
    from (irb):9
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.8/lib/rails/commands/console.rb:47:in `start'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.8/lib/rails/commands/console.rb:8:in `start'
    from /usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.8/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

Any ideas?

Gem was built in 2011

The latest version of this gem was released on May 16, 2011, but I can see that there have been several commits since then.

Should we be using the gem or would it be better to use the Github repo in our Gemfiles? Is there any reason why the latest commits have not been bundled into the official gem?

.first and .last method of an IPv4 /32 address is not working properly

In version 0.8.0

I get following result using .first and .last on an IPv4 /32 address:
[66] pry(main)> ip = IPAddress('192.168.1.2/32')
=> #<IPAddress::IPv4:0xc001e58
@address="192.168.1.2",
@Octets=[192, 168, 1, 2],
@Prefix=32,
@u32=3232235778>
[67] pry(main)> ip.first
=> #<IPAddress::IPv4:0xc02fed4
@address="192.168.1.3",
@Octets=[192, 168, 1, 3],
@Prefix=32,
@u32=3232235779>
[68] pry(main)> ip.last
=> #<IPAddress::IPv4:0xc052498
@address="192.168.1.1",
@Octets=[192, 168, 1, 1],
@Prefix=32,
@u32=3232235777>

issue in version 0.6.0

as I said before, here is the bug

using ipaddress version 0.6.0

001:0> require 'ipaddress'
==> true

002:0> ip = IPAddress '192.168.1.101/255.255.255.248'
==> #<IPAddress::IPv4:0x82dff64 @address="192.168.1.101", @Prefix=29, @Octets=[192, 168, 1, 101]>

003:0> ip.first.to_s
NoMethodError: undefined method to_u32' for 29:IPAddress::Prefix from /usr/lib/ruby/gems/1.9.1/gems/ipaddress-0.6.0/lib/ipaddress/ipv4.rb:510:innetwork_u32'
from /usr/lib/ruby/gems/1.9.1/gems/ipaddress-0.6.0/lib/ipaddress/ipv4.rb:356:in `first'
from (irb):3

from /usr/bin/irb:12:in `'

while if I use /29 as subnet mask prefix, it works fine

=> ip = IPAddress '192.168.1.101/29'

=> ip.first.to_s

 #=> "192.168.1.97"

Wording in IPv4#include? documentation

The following sentence is in the IPAddress::IPv4#include? documentation: "Accepts either string with the IP or and IPAddress::IPv4 object." In addition to the typo ("or and"), the sentence doesn't seem accurate (the source makes it look like it needs an object, not a simple string containing the IP).

Add Contributing.md to this repo

As a contributor to this repo, I would like guidelines to be identified in the root of this repo in a file named contributing.md

derive host address from network

given a network and a host portion, is it possible for IPAddress to generate the full host address in that network? for example, if i've got an IPAddress('1.1.1.0/24'), can i ask it for the full address of a host whose host bits are 123 (i.e. 1.1.1.123)?

i searched various methods and did not see anything direct (yes, you can splice octets, but that only works reliably for /8, /16, and /24 networks). there are useful applications in templating, e.g. "i'm planning IPs for a new network, and hosts of a given role always have the host bits 123, so please give me the full address of that host in this network"

`link_local?` defined twice in `lib/ipaddress/ipv6.rb`

Noticed this error during tests in an unrelated project:

/usr/local/rvm/gems/ruby-2.3.0/gems/ipaddress-0.8.3/lib/ipaddress/ipv6.rb:437: warning: method redefined; discarding old link_local?
/usr/local/rvm/gems/ruby-2.3.0/gems/ipaddress-0.8.3/lib/ipaddress/ipv6.rb:405: warning: previous definition of link_local? was here

Seems link_local? is defined twice in lib/ipaddress/ipv6.rb

https://github.com/ipaddress-gem/ipaddress/blob/master/lib/ipaddress/ipv6.rb#L405

    #
    # Returns true if the address is a link local address
    #
    def link_local?
      @groups[0] == 0xfe80
    end

https://github.com/ipaddress-gem/ipaddress/blob/master/lib/ipaddress/ipv6.rb#L437

    #
    # Checks if an IPv6 address objects belongs
    # to a link-local network RFC4291
    #
    # Example:
    #
    #   ip = IPAddress "fe80::1"
    #   ip.link_local?
    #     #=> true
    #
    def link_local?
      [self.class.new("fe80::/64")].any? {|i| i.include? self}
    end

Implement NetAddr::CIDR#allocate_rfc3531

Hi,

We're currently using the NetAddr gem to provide our software with supernet, subnet and IP Address management. An example of this as follows:

ruby-1.9.2-p180 :004 > Supernet.create(:network => '192.168.0.0', :cidr => '20')
 => 192.168.0.0/20 
ruby-1.9.2-p180 :005 > Vlan.first.allocate_subnet(29)
 => 192.168.0.0/29 
ruby-1.9.2-p180 :006 > Vlan.first.allocate_subnet(28)
 => 192.168.0.16/28 
ruby-1.9.2-p180 :007 > Vlan.first.allocate_subnet(27)
 => 192.168.0.32/27 
ruby-1.9.2-p180 :008 > Vlan.first.allocate_subnet(29)
 => 192.168.0.8/29 
ruby-1.9.2-p180 :009 > 

We use the allocate_rfc351 function in NetADDR::CIDR to do this currently, but would like to use your library as it has a lot nicer API. Would you be able to duplicate the functionality in your better API?

Thanks

When the new gem version will be issued?

Some changes have been made to a gem since v0.8.3. One of them is fixing the issue with IPv4#<=> (#76) which is important for what I'm currently doing (I'm forced to put a hack in my code to avoid it). So when do you plan to issue a new gem version?

Wrong broadcast address

Hello community,

i got a problem with the IPAddress lib, i dont know if it's a bug, or just a mistake from me.

I have this address ' 46.17.68.76/31 ', i want to have the broadcast addess, then i make :

network = "46.17.68.76/31"
@ip     = IPAddress.parse(network)
puts @ip.broadcast 

the output : @address="255.255.255.255"

but for me the broadcast address for ' 46.17.68.76/31 ' is : 46.17.68.77

Thank's for your help!

IPAddress.parse("<mac_address>") results in IPv6 address object

Hi,

I'm not sure if this is the expected behavior:

> IPAddress.parse("01:1c:43:10:20:0a")
 => #<IPAddress::IPv6:0x007fd780b9a1b8 @groups=[1, 28, 67, 16, 32, 10, 0, 0], @address="0001:001c:0043:0010:0020:000a:0000:0000", @compressed="1:1c:43:10:20:a::", @prefix=128>

In my understanding, the representation of an IPv6 address must either be fully qualified (7 colons) or there must be two consecutive colons (::) for zero padding. The mac address has only 5 colons and parse() pads it with trailing zeros.

So shouldn't it better fail?

I'm using ipaddress 0.8.0 with ruby 2.1.5.

Thanks,
Oliver

Changing octets doesn't change address

When I change a value in .octets I expect the .address to be changes. Than doesn't occur.
Version 0.8.0 is used.

realloc@support01:/var/tmp$ irb
1.9.3-p194 :001 > require 'ipaddress'
 => true 
1.9.3-p194 :002 > ip = IPAddress("172.16.10.1/24")
 => 172.16.10.1 
1.9.3-p194 :003 > ip.address
 => "172.16.10.1" 
1.9.3-p194 :004 > ip.octets[2]=11
 => 11 
1.9.3-p194 :005 > ip.address
 => "172.16.10.1" 
1.9.3-p194 :006 > ip[2]
 => 11 
1.9.3-p194 :007 > 

Invalid IPv6 handling

Hi guys,

i have found a bug.

It is allowed to use dot notation in ipv6. The following address is not a mapped ipv6 address.

IPAddress.parse('abcd:9234::1.2.3.4/96').to_string

I got a wrong output
=> ::ffff:9.2.3.4/96

But the correct output must be:
=> abcd:9234::102:304/96

Same problem here:

IPAddress.parse('::1.2.3.4/120').to_string
=> "::ffff:1.2.3.4/120"

Correct output is
=> ::102:304/120

Only
IPAddress.parse('::ffff:1.2.3.4/120') is a mapped ipv6 value!
Only here it is allowed to handle it as an Mapped IPv6 Object with the following output:
=> "::ffff:1.2.3.4/120"

Stack overflow doing IPAddress#as_json

The IPAddress gem abuses the Enumerable mixin. One example is the each method. That method will always yield at least one value, which causes problems for other Ruby code that assumes an Enumerable cannot contain itself. For example, the following snippet will trigger a stack overflow:

require 'ipaddress'
require 'active_support/json'
IPAddress.parse("1.2.3.4/32").as_json

The best solution would be to draw a distinction between an address and a network, like Python3's ipaddress module. If that were the case, then IPNetwork#each would yield a bunch of IPAddress objects, which would not implement #each.

A smaller change that wouldn't break compatibility with existing IPAddress users to be to define an as_json method which would simply call to_string.

IPv4#self_assigned? and IPv4#global?

I think checking 169.254.*.* for self_assigned? would be useful.

Also ideally, global? to find out if the IP is reachable from Internet would be awesome, if possible.

What do you think?

each_host function too slow

Hi,

I encountered an issue about the execution time of each_host in ipv4 (I have not checked for ipv6)

If you replace the code of each_host by tu same one as the one from each, the execution time is twice faster. Indeed, each_hosts uses "hosts" which itself calls each. Therefore, the array is iterated over twice.

By replacing the code likewise, the array is just iterated over once:

def each_host
    (network_u32 + 1..broadcast_u32 - 1).each do |i|
        yield self.class.parse_u32(i, @prefix)
    end
end

Here is the example code. Just replace each_host by host and see the execution time difference:

require 'rubygems'
require 'ipaddress'
ip = IPAddress "10.8.0.0/14"
ip.each_host do |ip|
    ip
end

Random IPv6

Thanks for this gem. I have an IPv6 /64 where I want to get a random IP from, what's the most efficient way to do this?

Replicating IPAddr functionality (from_u32)

We store IP addresses in our database as integers. I am looking at replacing IPAddr with IPAddress, but I can not find a method to convert fixnum to dot notation. Does one exist? If not, is one on the roadmap?

The IPAddr way to achieve dot notation from integer:
IPAddr.new([fixnum], Socket::AF_INET).to_s

Avoid Ruby 1.8 compatibility when using Ruby 2.1.8

There's a small problem in https://github.com/bluemonk/ipaddress/blob/master/lib/ipaddress.rb#L217.
This regular expression is matching not only Ruby 1.8, but also 2.1.8. Because of that, when you upgrade to any Ruby with a version similar to x.1.8, you'll get a ton of warnings similar to:

.rbenv/versions/2.1.8/lib/ruby/gems/2.1.0/gems/sprockets-2.11.3/lib/sprockets/mime.rb:25: warning: Hash#index is deprecated; use Hash#key

That code is correctly using Hash#key, but due to the alias made in

https://github.com/bluemonk/ipaddress/blob/master/lib/ipaddress.rb#L219

Hash#key becomes an alias to Hash#index and actually Hash#index is called, which results in a lot of depreciation warnings.

Is this gem still under active development?

The last commit was almost 9 months ago, and there are 26 open issues, many of which have no response, and some of which provide pull-requests that have not been incorporated.

Is there an alternative gem for handling IP addresses or does IPAddr make this one redundant?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.