ipconverter 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 35d504928af695671d8144143e89352318257797
4
- data.tar.gz: 2209fc9ad9a7198c04e7432f1082dfc9baa49467
3
+ metadata.gz: fb58eea08d7c5c456e4e104201be99be367d3001
4
+ data.tar.gz: 99fef017ef4f71cfde3b8f7c0e210e3e48878abe
5
5
  SHA512:
6
- metadata.gz: 801b267b6b1316cc979a26d78662d0ecef5579aa160c90925488174783af33920eef1c7e3d1b7c164fe3126f646e561dabf8ff937d7d0c79ac656c3ea69d5789
7
- data.tar.gz: 8a39dd4ec289ae550de076791d58ce113886baa4602091d302f7b13fcf32f3fca765cc68f9f40dca3267742b31ec4c59940222cf02bc7e0b5143eb201c348e39
6
+ metadata.gz: 7b37510036d6ca814507b484fc505e3de596f9eea574828f94be0faf6ee54a7bb0a2971d54d5803bd9d955b894e627cdbf5d162621a99aebe63f113390af1d78
7
+ data.tar.gz: 0bae9046ceed9f63c5de6ee3259f9fce79b291832bf55bb224ec29b7c67045f68ecaa7df36bdc4c0e13988b650211db6f2c334c8327f322c5f1ad5d866af5d98
@@ -0,0 +1 @@
1
+ lib/**/*.rb ext/**/*.c README
data/Rakefile CHANGED
@@ -2,6 +2,8 @@ require 'bundler/gem_tasks'
2
2
  require 'rake/testtask'
3
3
  require 'rake/extensiontask'
4
4
 
5
+ ROOT = File.expand_path('..', __FILE__)
6
+
5
7
  Rake::TestTask.new do |t|
6
8
  t.libs << 'test'
7
9
  t.pattern = 'test/test_*.rb'
@@ -12,3 +14,9 @@ Rake::ExtensionTask.new 'ipconverter' do |ext|
12
14
  end
13
15
 
14
16
  task default: [:compile, :test]
17
+
18
+ desc "Run benchmarks"
19
+ task benchmark: [:compile] do
20
+ sh "ruby #{ROOT}/benchmark/str_to_int.rb"
21
+ sh "ruby #{ROOT}/benchmark/int_to_str.rb"
22
+ end
@@ -2,7 +2,7 @@ require 'benchmark'
2
2
  require 'ipaddr'
3
3
  require 'ipconverter'
4
4
 
5
- def ruby_shift(ip)
5
+ def self.ruby_shift(ip)
6
6
  [
7
7
  (ip >> 24) & 255,
8
8
  (ip >> 16) & 255,
@@ -11,13 +11,13 @@ def ruby_shift(ip)
11
11
  ].join('.')
12
12
  end
13
13
 
14
- ips = 0..999999
14
+ ips = 0..999_999
15
15
 
16
16
  puts 'iterations: 1,000,000'
17
17
 
18
18
  Benchmark.bmbm do |x|
19
19
  x.report('IPAddr#to_s') { ips.each { |ip| IPAddr.new(ip, Socket::AF_INET).to_s } }
20
20
  x.report('Ruby shifts') { ips.each { |ip| ruby_shift(ip) } }
21
- x.report('C shifts') { ips.each { |ip| IpConverter.int_to_str(ip) } }
21
+ x.report('IpConverter') { ips.each { |ip| IpConverter.int_to_str(ip) } }
22
22
  x.report('noop') { ips.each { |ip| ip } }
23
23
  end
@@ -2,11 +2,12 @@ require 'benchmark'
2
2
  require 'ipaddr'
3
3
  require 'ipconverter'
4
4
 
5
- def ip_to_i(ip)
5
+ def self.pack_unpack(ip)
6
6
  ip.split('.').collect(&:to_i).pack('C*').unpack('N').first
7
7
  end
8
8
 
9
- def ip_to_i2(ip)
9
+ # rubocop:disable AbcSize
10
+ def self.split_multiply(ip)
10
11
  octets = ip.split('.').map(&:to_i)
11
12
  octets[3] +
12
13
  octets[2] * 256 +
@@ -14,7 +15,7 @@ def ip_to_i2(ip)
14
15
  octets[0] * 256 * 256 * 256
15
16
  end
16
17
 
17
- def ipaddr_to_i(ip)
18
+ def self.ipaddr_to_i(ip)
18
19
  IPAddr.new(ip).to_i
19
20
  end
20
21
 
@@ -33,8 +34,8 @@ puts 'iterations: 1,000,000'
33
34
 
34
35
  Benchmark.bmbm do |x|
35
36
  x.report('IPAddr#to_i') { ips.each { |ip| IPAddr.new(ip).to_i } }
36
- x.report('pack/unpack') { ips.each { |ip| ip_to_i(ip) } }
37
- x.report('split/multiply') { ips.each { |ip| ip_to_i2(ip) } }
38
- x.report('C split/multiply') { ips.each { |ip| IpConverter.str_to_int(ip) } }
37
+ x.report('pack/unpack') { ips.each { |ip| pack_unpack(ip) } }
38
+ x.report('split/multiply') { ips.each { |ip| split_multiply(ip) } }
39
+ x.report('IpConverter') { ips.each { |ip| IpConverter.str_to_int(ip) } }
39
40
  x.report('noop') { ips.each { |ip| ip } }
40
41
  end
@@ -14,9 +14,9 @@ void Init_ipconverter() {
14
14
 
15
15
  /*
16
16
  * call-seq:
17
- * IpConverter.str_to_int(ip_addr_string) -> Fixnum
17
+ * IpConverter.str_to_int(ip_addr_string) -> Integer
18
18
  *
19
- * Converts the passed IP address String into a Fixnum.
19
+ * Converts the passed IP address String into an Integer.
20
20
  *
21
21
  * Raises ArgumentError if ip address is not valid. Leading and trailing
22
22
  * whitespace is ignored.
@@ -36,7 +36,7 @@ VALUE method_str_to_int(VALUE _module_, VALUE ip_string) {
36
36
  int success = ip_string_to_long(c_string, &result);
37
37
 
38
38
  if (success) {
39
- // Convert the uint32_t back to a ruby Fixnum.
39
+ // Convert the uint32_t back to a ruby Integer.
40
40
  return UINT2NUM(result);
41
41
  } else {
42
42
  rb_raise(rb_eArgError, "Invalid IP Address String");
@@ -86,9 +86,9 @@ ip_string_to_long(char c_string[], uint32_t *result) {
86
86
  *
87
87
  */
88
88
  VALUE
89
- method_int_to_str(VALUE _module_, VALUE ip_fixnum) {
89
+ method_int_to_str(VALUE _module_, VALUE ip_integer) {
90
90
  char c_string[16];
91
- int64_t ip = NUM2LL(ip_fixnum);
91
+ int64_t ip = NUM2LL(ip_integer);
92
92
  if (ip > MAX_IP_INT || ip < 0) {
93
93
  rb_raise(rb_eArgError, "IP address integer out of range");
94
94
  }
@@ -11,8 +11,8 @@ Gem::Specification.new do |spec|
11
11
  spec.authors = ['Joshua Scott']
12
12
  spec.email = ['joshua.scott@gmail.com']
13
13
  spec.summary = 'Utilities for working with IP addresses'
14
- spec.description = %q(Fast C extension for converting IP addresses from
15
- string to integer)
14
+ spec.description = 'Fast C extension for converting IP addresses from
15
+ string to integer'
16
16
  spec.homepage = 'http://github.com/joshuawscott/ipconverter'
17
17
  spec.license = 'MIT'
18
18
 
@@ -26,4 +26,5 @@ string to integer)
26
26
  spec.add_development_dependency 'rake', '~> 10'
27
27
  spec.add_development_dependency 'minitest', '~> 5'
28
28
  spec.add_development_dependency 'rake-compiler', '~> 0.9'
29
+ spec.add_development_dependency 'rubocop', '~> 0.47'
29
30
  end
@@ -1,3 +1,3 @@
1
1
  module IpConverter
2
- VERSION = '0.3.0'
2
+ VERSION = '0.3.1'.freeze
3
3
  end
@@ -2,9 +2,8 @@ require 'ipconverter'
2
2
  require 'minitest/autorun'
3
3
 
4
4
  class TestIpConverter < MiniTest::Test
5
- MAX_IP_INT = 4294967295
6
- def setup
7
- end
5
+ MAX_IP_INT = 4_294_967_295
6
+ def setup; end
8
7
 
9
8
  def test_smallest_ip
10
9
  int = IpConverter.str_to_int '0.0.0.0'
@@ -43,11 +42,11 @@ class TestIpConverter < MiniTest::Test
43
42
  end
44
43
 
45
44
  def test_int_to_str_max
46
- assert_equal "255.255.255.255", IpConverter.int_to_str(MAX_IP_INT)
45
+ assert_equal "255.255.255.255", IpConverter.int_to_str(MAX_IP_INT)
47
46
  end
48
47
 
49
48
  def test_int_to_str_negative
50
- assert_raises(ArgumentError) { IpConverter.int_to_str -1 }
49
+ assert_raises(ArgumentError) { IpConverter.int_to_str(-1) }
51
50
  end
52
51
 
53
52
  def test_int_to_str_too_big
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ipconverter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Scott
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-22 00:00:00.000000000 Z
11
+ date: 2017-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.47'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.47'
69
83
  description: |-
70
84
  Fast C extension for converting IP addresses from
71
85
  string to integer
@@ -77,6 +91,7 @@ extensions:
77
91
  extra_rdoc_files: []
78
92
  files:
79
93
  - ".gitignore"
94
+ - ".yardopts"
80
95
  - Gemfile
81
96
  - LICENSE.txt
82
97
  - README.md
@@ -111,10 +126,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
126
  version: '0'
112
127
  requirements: []
113
128
  rubyforge_project:
114
- rubygems_version: 2.2.3
129
+ rubygems_version: 2.6.8
115
130
  signing_key:
116
131
  specification_version: 4
117
132
  summary: Utilities for working with IP addresses
118
133
  test_files:
119
134
  - test/test_ipconverter.rb
120
- has_rdoc: