iplogic 0.1.0 → 0.1.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.
data/iplogic.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'iplogic'
3
- s.version = '0.1.0'
3
+ s.version = '0.1.1'
4
4
 
5
5
  s.authors = ["Jay Adkisson"]
6
6
  s.date = '2010-11-13'
@@ -9,10 +9,11 @@ Gem::Specification.new do |s|
9
9
  desc
10
10
 
11
11
  s.email = %q{jay@causes.com}
12
- s.extra_rdoc_files = [
13
- "LICENSE",
14
- "README.md"
15
- ]
12
+ s.extra_rdoc_files = %w(
13
+ LICENSE
14
+ README.md
15
+ )
16
+
16
17
  s.files = %w(
17
18
  Rakefile
18
19
  LICENSE
@@ -35,10 +36,11 @@ Gem::Specification.new do |s|
35
36
 
36
37
  s.test_files = %w(
37
38
  spec/ip_spec.rb
39
+ spec/cidr_spec.rb
38
40
  spec/spec_helper.rb
39
41
  spec/radix_spec.rb
40
42
  )
41
43
 
42
- s.add_development_dependency('rspec')
44
+ s.add_development_dependency('rspec', '~> 1.0')
43
45
  end
44
46
 
data/lib/iplogic/cidr.rb CHANGED
@@ -54,7 +54,7 @@ module IPLogic
54
54
  end
55
55
 
56
56
  def inspect
57
- "#<CIDR [ #{ip}/#{bits} ]>"
57
+ "#<CIDR [ #{self} ]>"
58
58
  end
59
59
 
60
60
  def netmask
@@ -67,6 +67,10 @@ module IPLogic
67
67
  @size ||= (1 << inv_bits)
68
68
  end
69
69
 
70
+ def include?(ip)
71
+ IP.wrap(ip).min(bits) == min
72
+ end
73
+
70
74
  def min
71
75
  @min ||= IP.wrap(
72
76
  (ip.to_i >> inv_bits) << inv_bits
@@ -87,6 +91,11 @@ module IPLogic
87
91
  end
88
92
  alias rest rest_field
89
93
 
94
+ def to_s
95
+ "#{ip}/#{bits}"
96
+ end
97
+ alias to_str to_s
98
+
90
99
  def significant_octets
91
100
  4 - (bits / 8)
92
101
  end
data/lib/iplogic/ip.rb CHANGED
@@ -91,6 +91,10 @@ module IPLogic
91
91
  "#<IP [ #{self} ]>"
92
92
  end
93
93
 
94
+ def hash
95
+ self.to_s.hash
96
+ end
97
+
94
98
  def eql?(other)
95
99
  self.int == IP(other).int
96
100
  end
data/spec/cidr_spec.rb ADDED
@@ -0,0 +1,126 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe CIDR do
4
+ it "parses an IP-ish and netmask-ish" do
5
+ r = CIDR('4.33.222.111', '255.255.240.0')
6
+ r.should be_a CIDR
7
+ r.inspect.should include '4.33.222.111/20'
8
+
9
+ r = CIDR(IP('4.33.222.111'), 20)
10
+ r.should be_a CIDR
11
+ r.inspect.should include '4.33.222.111/20'
12
+
13
+ r = CIDR('4.33.222.111', IP('255.255.240.0'))
14
+ r.should be_a CIDR
15
+ r.inspect.should include '4.33.222.111/20'
16
+ end
17
+
18
+ it "parses slash notation" do
19
+ r = CIDR('11.22.33.44/8')
20
+ r.should be_a CIDR
21
+ r.inspect.should include '11.22.33.44/8'
22
+ end
23
+
24
+ it "knows its bits" do
25
+ i = rand(33)
26
+ CIDR("1.1.1.1/#{i}").bits.
27
+ should == i
28
+ end
29
+
30
+ it "knows its ip" do
31
+ CIDR('11.22.33.44/20').ip.
32
+ should == IP('11.22.33.44')
33
+ end
34
+
35
+ it "knows its netmask" do
36
+ CIDR('11.22.33.44/20').netmask.
37
+ should == IP('255.255.240.0')
38
+
39
+ CIDR('11.22.33.44/8').netmask.
40
+ should == IP('255.0.0.0')
41
+
42
+ CIDR('11.22.33.44/32').netmask.
43
+ should == IP('255.255.255.255')
44
+
45
+ CIDR('1.1.1.1/0').netmask.
46
+ should == IP('0.0.0.0')
47
+ end
48
+
49
+ it "knows its min" do
50
+ CIDR('11.22.33.44/20').min.
51
+ should == IP('11.22.32.0')
52
+
53
+ CIDR('11.22.33.44/8').min.
54
+ should == IP('11.0.0.0')
55
+
56
+ CIDR('11.22.33.44/32').min.
57
+ should == IP('11.22.33.44')
58
+
59
+ CIDR('11.22.33.44/0').min.
60
+ should == IP('0.0.0.0')
61
+ end
62
+
63
+ it "knows its max" do
64
+ CIDR('11.22.33.44/20').max.
65
+ should == IP('11.22.47.255')
66
+
67
+ CIDR('11.22.33.44/8').max.
68
+ should == IP('11.255.255.255')
69
+
70
+ CIDR('11.22.33.44/32').max.
71
+ should == IP('11.22.33.44')
72
+
73
+ CIDR('11.22.33.44/0').max.
74
+ should == IP('255.255.255.255')
75
+ end
76
+
77
+ it "knows its rest field" do
78
+ CIDR('11.22.33.44/20').rest_field.
79
+ should == IP('0.0.1.44')
80
+
81
+ CIDR('11.22.33.44/8').rest_field.
82
+ should == IP('0.22.33.44')
83
+
84
+ CIDR('11.22.33.44/32').rest_field.
85
+ should == IP('0.0.0.0')
86
+
87
+ CIDR('11.22.33.44/0').rest_field.
88
+ should == IP('11.22.33.44')
89
+ end
90
+
91
+ it "knows its size" do
92
+ CIDR('11.22.33.44/20').size.
93
+ should == 0x1000
94
+
95
+ CIDR('11.22.33.44/8').size.
96
+ should == 0x1000000
97
+
98
+ CIDR('11.22.33.44/32').size.
99
+ should == 1
100
+
101
+ CIDR('11.22.33.44/0').size.
102
+ should == 0x100000000
103
+ end
104
+
105
+ it "is enumerable" do
106
+ r = CIDR('11.22.33.44/24')
107
+ r.should respond_to :each
108
+ CIDR.included_modules.should include Enumerable
109
+
110
+ a = r.to_a
111
+
112
+ a.size.should == r.size
113
+ a.first.should == r.first
114
+ a.last.should == r.last
115
+ end
116
+
117
+ it "tests inclusion" do
118
+ r = CIDR('11.22.33.44/24')
119
+ r.should respond_to :include?
120
+ r.should include '11.22.33.0'
121
+ r.should include IP('11.22.33.255')
122
+ r.should_not include IP('11.22.32.44').to_i
123
+ r.should_not include '11.22.34.44'
124
+ end
125
+
126
+ end
data/spec/ip_spec.rb CHANGED
@@ -103,120 +103,4 @@ describe IP do
103
103
  IP('1.2.3.4').should_not be_netmask
104
104
  IP('0.255.0.0').should_not be_netmask
105
105
  end
106
-
107
- describe CIDR do
108
- it "parses an IP-ish and netmask-ish" do
109
- r = CIDR('4.33.222.111', '255.255.240.0')
110
- r.should be_a CIDR
111
- r.inspect.should include '4.33.222.111/20'
112
-
113
- r = CIDR(IP('4.33.222.111'), 20)
114
- r.should be_a CIDR
115
- r.inspect.should include '4.33.222.111/20'
116
-
117
- r = CIDR('4.33.222.111', IP('255.255.240.0'))
118
- r.should be_a CIDR
119
- r.inspect.should include '4.33.222.111/20'
120
- end
121
-
122
- it "parses slash notation" do
123
- r = CIDR('11.22.33.44/8')
124
- r.should be_a CIDR
125
- r.inspect.should include '11.22.33.44/8'
126
- end
127
-
128
- it "knows its bits" do
129
- i = rand(33)
130
- CIDR("1.1.1.1/#{i}").bits.
131
- should == i
132
- end
133
-
134
- it "knows its ip" do
135
- CIDR('11.22.33.44/20').ip.
136
- should == IP('11.22.33.44')
137
- end
138
-
139
- it "knows its netmask" do
140
- CIDR('11.22.33.44/20').netmask.
141
- should == IP('255.255.240.0')
142
-
143
- CIDR('11.22.33.44/8').netmask.
144
- should == IP('255.0.0.0')
145
-
146
- CIDR('11.22.33.44/32').netmask.
147
- should == IP('255.255.255.255')
148
-
149
- CIDR('1.1.1.1/0').netmask.
150
- should == IP('0.0.0.0')
151
- end
152
-
153
- it "knows its min" do
154
- CIDR('11.22.33.44/20').min.
155
- should == IP('11.22.32.0')
156
-
157
- CIDR('11.22.33.44/8').min.
158
- should == IP('11.0.0.0')
159
-
160
- CIDR('11.22.33.44/32').min.
161
- should == IP('11.22.33.44')
162
-
163
- CIDR('11.22.33.44/0').min.
164
- should == IP('0.0.0.0')
165
- end
166
-
167
- it "knows its max" do
168
- CIDR('11.22.33.44/20').max.
169
- should == IP('11.22.47.255')
170
-
171
- CIDR('11.22.33.44/8').max.
172
- should == IP('11.255.255.255')
173
-
174
- CIDR('11.22.33.44/32').max.
175
- should == IP('11.22.33.44')
176
-
177
- CIDR('11.22.33.44/0').max.
178
- should == IP('255.255.255.255')
179
- end
180
-
181
- it "knows its rest field" do
182
- CIDR('11.22.33.44/20').rest_field.
183
- should == IP('0.0.1.44')
184
-
185
- CIDR('11.22.33.44/8').rest_field.
186
- should == IP('0.22.33.44')
187
-
188
- CIDR('11.22.33.44/32').rest_field.
189
- should == IP('0.0.0.0')
190
-
191
- CIDR('11.22.33.44/0').rest_field.
192
- should == IP('11.22.33.44')
193
- end
194
-
195
- it "knows its size" do
196
- CIDR('11.22.33.44/20').size.
197
- should == 0x1000
198
-
199
- CIDR('11.22.33.44/8').size.
200
- should == 0x1000000
201
-
202
- CIDR('11.22.33.44/32').size.
203
- should == 1
204
-
205
- CIDR('11.22.33.44/0').size.
206
- should == 0x100000000
207
- end
208
-
209
- it "is enumerable" do
210
- r = CIDR('11.22.33.44/24')
211
- r.should respond_to :each
212
- CIDR.included_modules.should include Enumerable
213
-
214
- a = r.to_a
215
-
216
- a.size.should == r.size
217
- a.first.should == r.first
218
- a.last.should == r.last
219
- end
220
-
221
- end
222
106
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iplogic
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jay Adkisson
@@ -24,12 +24,13 @@ dependencies:
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ">="
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
- hash: 3
29
+ hash: 15
30
30
  segments:
31
+ - 1
31
32
  - 0
32
- version: "0"
33
+ version: "1.0"
33
34
  type: :development
34
35
  version_requirements: *id001
35
36
  description: An IPv4 swiss-army chainsaw
@@ -52,6 +53,7 @@ files:
52
53
  - lib/iplogic/cidr.rb
53
54
  - lib/iplogic/ip.rb
54
55
  - spec/ip_spec.rb
56
+ - spec/cidr_spec.rb
55
57
  - spec/spec_helper.rb
56
58
  - spec/radix_spec.rb
57
59
  has_rdoc: true
@@ -90,5 +92,6 @@ specification_version: 3
90
92
  summary: Because it's just a 32-bit integer.
91
93
  test_files:
92
94
  - spec/ip_spec.rb
95
+ - spec/cidr_spec.rb
93
96
  - spec/spec_helper.rb
94
97
  - spec/radix_spec.rb