furnish-ip 0.0.2 → 0.0.3

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.
@@ -1,3 +1,10 @@
1
+ * 0.0.3 (03/25/2013)
2
+ * Several fixes around the encoding of IP addresses -- fixes Ruby 2.0.0-p0
3
+ issues.
4
+ * Furnish::IP#allocate and Furnish::IP#allocated? exist to assist with direct
5
+ allocations.
6
+ * Documentation is generated with RDoc 4
7
+ * Depend on Furnish 0.0.4
1
8
  * 0.0.2 (03/20/2013)
2
9
  * Migration to and exploitation of furnish 0.0.2
3
10
  * 0.0.1 (03/20/2013)
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in furnish-ip.gemspec
4
4
  gemspec
5
+
6
+ gem 'guard-rake', :git => "https://github.com/erikh/guard-rake", :branch => "failure_ok"
data/Rakefile CHANGED
@@ -10,7 +10,8 @@ end
10
10
 
11
11
  RDoc::Task.new do |rdoc|
12
12
  rdoc.title = "Generic IP allocator for the Furnish provisioning system"
13
- rdoc.rdoc_files.include("lib/**/*.rb")
13
+ rdoc.main = "README.md"
14
+ rdoc.rdoc_files.include("README.md", "lib/**/*.rb")
14
15
  rdoc.rdoc_files -= ["lib/furnish/ip/version.rb"]
15
16
  if ENV["RDOC_COVER"]
16
17
  rdoc.options << "-C"
@@ -17,14 +17,14 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency 'furnish', '~> 0.0.2'
20
+ gem.add_dependency 'furnish', '~> 0.0.4'
21
21
  gem.add_dependency 'palsy', '~> 0.0.2'
22
22
 
23
23
  gem.add_development_dependency 'rake'
24
24
  gem.add_development_dependency 'minitest', '~> 4.5.0'
25
25
  gem.add_development_dependency 'guard-minitest'
26
26
  gem.add_development_dependency 'guard-rake'
27
- gem.add_development_dependency 'rdoc'
27
+ gem.add_development_dependency 'rdoc', '~> 4'
28
28
  gem.add_development_dependency 'rb-fsevent'
29
29
  gem.add_development_dependency 'simplecov'
30
30
  end
@@ -46,6 +46,23 @@ module Furnish # :nodoc:
46
46
  @groups = Palsy::Map.new('furnish_ip_groups', name)
47
47
  end
48
48
 
49
+ #
50
+ # Allocates an IP without putting it in a group. Useful for placeholders.
51
+ #
52
+ # Makes no attempt to check if something's allocated already.
53
+ #
54
+
55
+ def allocate(ip)
56
+ allocated.add(ip.encode("UTF-8"))
57
+ end
58
+
59
+ #
60
+ # Predicate to determine whether or not an IP is already allocated.
61
+ #
62
+ def allocated?(ip)
63
+ allocated.include?(ip.encode("UTF-8"))
64
+ end
65
+
49
66
  #
50
67
  # Determine, based on allocations already made, what the next available
51
68
  # un-used IP is. Will raise ArgumentError if #new is not provided with an
@@ -63,7 +80,7 @@ module Furnish # :nodoc:
63
80
  net = subnet
64
81
 
65
82
  subnet_range.count.times do
66
- this_ip = net.to_s
83
+ this_ip = net.to_s.encode("UTF-8")
67
84
 
68
85
  return this_ip unless allocated.include?(this_ip)
69
86
 
@@ -93,8 +110,9 @@ module Furnish # :nodoc:
93
110
  group = group_ips(name)
94
111
 
95
112
  ips.each do |ip|
96
- allocated.add(ip)
97
- group.add(ip)
113
+ utf8_ip = ip.encode("UTF-8")
114
+ allocated.add(utf8_ip)
115
+ group.add(utf8_ip)
98
116
  end
99
117
 
100
118
  groups[name] = group
@@ -1,6 +1,6 @@
1
1
  module Furnish
2
2
  class IP
3
3
  # Version for furnish-ip
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
6
6
  end
@@ -19,7 +19,7 @@ class TestIPLib < Furnish::TestCase
19
19
  assert_equal("127.0.0.0", ip.unused_ip, "picks the next available ip")
20
20
  assert_equal("127.0.0.0", ip.unused_ip, "has no side effects -- returns the same IP on the second call")
21
21
 
22
- ip.allocated.add("127.0.0.0") # add something to get it to choose the next thing.
22
+ ip.allocate("127.0.0.0") # add something to get it to choose the next thing.
23
23
 
24
24
  assert_equal("127.0.0.1", ip.unused_ip, "picks the next unavailable ip")
25
25
 
@@ -27,6 +27,31 @@ class TestIPLib < Furnish::TestCase
27
27
  assert_raises(ArgumentError, "Furnish::IP#unused_ip requires an IPAddr object to work") { ip.unused_ip }
28
28
  end
29
29
 
30
+ def test_encoding
31
+ ip = Furnish::IP.new(IPAddr.new("127.0.0.1/24"))
32
+
33
+ %w[ASCII-8BIT UTF-8].each_with_index do |enc, i|
34
+ ip.allocate("127.0.0.#{i}".encode(enc))
35
+ assert(ip.allocated?("127.0.0.#{i}".encode(enc)), "127.0.0.#{i} is allocated with a string with encoding #{enc}")
36
+ end
37
+
38
+ ip.allocate("127.0.0.42".encode("ASCII-8BIT"))
39
+ assert(ip.allocated?("127.0.0.42".encode("UTF-8")), "127.0.0.42 was allocated encoding-agnostic")
40
+
41
+ ip.assign_group_ips("foo", "127.0.0.23".encode("ASCII-8BIT"))
42
+ assert_equal("UTF-8", ip.group_ips("foo").first.encoding.to_s, "encoding always comes back UTF-8")
43
+ end
44
+
45
+ def test_allocated
46
+ ip = Furnish::IP.new(IPAddr.new("127.0.0.1/24"))
47
+ ip.allocate("127.0.0.0")
48
+ assert(ip.allocated?("127.0.0.0"), "127.0.0.0 is allocated")
49
+
50
+ ip.assign_group_ips("foo", "127.0.0.1")
51
+
52
+ assert(ip.allocated?("127.0.0.1"), "127.0.0.1 is allocated by way of a group")
53
+ end
54
+
30
55
  def test_cycle_detection
31
56
  ip = Furnish::IP.new(IPAddr.new("127.0.0.1/31"))
32
57
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: furnish-ip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-20 00:00:00.000000000 Z
12
+ date: 2013-03-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: furnish
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 0.0.2
21
+ version: 0.0.4
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- version: 0.0.2
29
+ version: 0.0.4
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: palsy
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -112,17 +112,17 @@ dependencies:
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  none: false
114
114
  requirements:
115
- - - ! '>='
115
+ - - ~>
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '4'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  none: false
122
122
  requirements:
123
- - - ! '>='
123
+ - - ~>
124
124
  - !ruby/object:Gem::Version
125
- version: '0'
125
+ version: '4'
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: rb-fsevent
128
128
  requirement: !ruby/object:Gem::Requirement