pio 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b195270747468aaa2b80432c46510f55f1454f48
4
- data.tar.gz: 2a2ee7694241f4b47f7c55fa29c1fb749a0ef448
3
+ metadata.gz: 5b896a5fa15f8f59ec3e46d6fcb80aacf0dc8d96
4
+ data.tar.gz: 02c3e94ecc0f3850632d3ce7454a65f78946d231
5
5
  SHA512:
6
- metadata.gz: dfcc2a3f9db6f8e70ea6212883ce08dbfb3a274ed85ab71cc39383cb7a6be32bc2da936b658b80e89618b9788b37f3028c0b7859d455d3f32b672bafaa82f932
7
- data.tar.gz: 8e87ff8d652dc724a1f64de6bcc65655ed732f60a0ea700e2e63e5a72aa8498192c1d40bf0972d3b13932ef622535bf38fecf3f5b1dc95c18fac12b9e6f1feee
6
+ metadata.gz: dad2f7aa5d1fa30237e1d6ec906cf705c42e446b9fbb3b62e957fedfc984e5f4ab95f8232ee5e96e3e88ba8289f8b896fe91f59c66be5192c7ed26b8f6c722e3
7
+ data.tar.gz: 6a43c94a49bac807d8f867f88fd5b4005cb8bafa9315f6841e894c15ab24c8876e9d924b2e9160d80efeb0f10318576d0fe06e7a85c870c560b4803782ad6081
data/Gemfile CHANGED
@@ -5,25 +5,25 @@ gemspec
5
5
 
6
6
 
7
7
  group :development, :test do
8
- gem "coveralls", "~> 0.6.7", :require => false
8
+ gem "coveralls", "~> 0.7.0", :require => false
9
9
  gem "flay", "~> 2.4.0"
10
- gem "flog", "~> 4.1.1"
10
+ gem "flog", "~> 4.1.2"
11
11
  gem "fuubar", "~> 1.2.1"
12
- gem "guard", "~> 1.8.2"
12
+ gem "guard", "~> 1.8"
13
13
  gem "guard-bundler", "~> 1.0.0"
14
- gem "guard-rspec", "~> 3.0.2"
14
+ gem "guard-rspec", "~> 3.1.0"
15
15
  gem "json", "~> 1.8.0"
16
16
  gem "rake", "~> 10.1.0"
17
17
  gem "rb-fchange", "~> 0.0.6", :require => false
18
18
  gem "rb-fsevent", "~> 0.9.3", :require => false
19
- gem "rb-inotify", "~> 0.9.1", :require => false
19
+ gem "rb-inotify", "~> 0.9.2", :require => false
20
20
  gem "redcarpet", "~> 2.3.0" if RUBY_VERSION < "1.9.0"
21
21
  gem "redcarpet", "~> 3.0.0" if RUBY_VERSION >= "1.9.0"
22
22
  gem "reek", "~> 1.3.3"
23
23
  gem "rspec", "~> 2.14.1"
24
24
  gem "rspec-instafail", "~> 0.2.4"
25
25
  gem "terminal-notifier-guard", "~> 1.5.3"
26
- gem "yard", "~> 0.8.7"
26
+ gem "yard", "~> 0.8.7.2"
27
27
  end
28
28
 
29
29
 
@@ -46,7 +46,7 @@ module Pio
46
46
  def option_hash
47
47
  mandatory_options.inject( {} ) do | opt, each |
48
48
  klass = option_to_klass[ each ]
49
- opt_pair = { each => klass.new( user_options[ each ] ).to_ary }
49
+ opt_pair = { each => klass.new( user_options[ each ] ).to_a }
50
50
  opt.merge opt_pair
51
51
  end.merge default_options
52
52
  end
@@ -9,8 +9,8 @@ module Pio
9
9
  class Request < Message
10
10
  OPERATION = 1
11
11
 
12
- BROADCAST_MAC_ADDRESS = Mac.new( 0xffffffffffff ).to_ary
13
- ALL_ZERO_MAC_ADDRESS = Mac.new( 0 ).to_ary
12
+ BROADCAST_MAC_ADDRESS = Mac.new( 0xffffffffffff ).to_a
13
+ ALL_ZERO_MAC_ADDRESS = Mac.new( 0 ).to_a
14
14
 
15
15
 
16
16
  ########################################################################
data/lib/pio/mac.rb CHANGED
@@ -3,9 +3,13 @@ require "forwardable"
3
3
 
4
4
  module Pio
5
5
  #
6
- # Ethernet address class
6
+ # Ethernet address (MAC address) class.
7
7
  #
8
8
  class Mac
9
+ # Raised when Ethernet address is invalid.
10
+ class InvalidValueError < StandardError; end
11
+
12
+
9
13
  extend Forwardable
10
14
  def_delegator :@value, :hash
11
15
 
@@ -15,50 +19,51 @@ module Pio
15
19
  #
16
20
  # @example address as a hexadecimal string
17
21
  # Mac.new("11:22:33:44:55:66")
18
- #
19
22
  # @example address as a hexadecimal number
20
23
  # Mac.new(0xffffffffffff)
21
24
  #
25
+ # @param value [#to_str, #to_int] the value converted to an
26
+ # Ethernet address.
27
+ #
22
28
  def initialize value
23
- if value.respond_to?( :to_str )
24
- @value = parse_mac_string( value.to_str )
25
- elsif value.respond_to?( :to_int )
26
- @value = value.to_int
27
- validate_value_range
28
- else
29
- raise TypeError, "Invalid MAC address: #{ value.inspect }"
29
+ begin
30
+ if value.respond_to?( :to_str )
31
+ @value = parse_mac_string( value.to_str )
32
+ elsif value.respond_to?( :to_int )
33
+ @value = value.to_int
34
+ validate_value_range
35
+ else
36
+ raise TypeError
37
+ end
38
+ rescue ArgumentError, TypeError
39
+ raise InvalidValueError, "Invalid MAC address: #{ value.inspect }"
30
40
  end
31
41
  end
32
42
 
33
43
 
44
+ # @!group Converters
45
+
34
46
  #
35
47
  # Returns an Ethernet address in its numeric presentation.
36
48
  #
37
49
  # @example
38
50
  # Mac.new("11:22:33:44:55:66").to_i #=> 18838586676582
39
51
  #
52
+ # @return [Integer]
53
+ #
40
54
  def to_i
41
55
  @value
42
56
  end
43
57
 
44
58
 
45
- #
46
- # @see to_i
47
- #
48
- # @example
49
- # Mac.new("11:22:33:44:55:66").to_int #=> 18838586676582
50
- #
51
- def to_int
52
- to_i
53
- end
54
-
55
-
56
59
  #
57
60
  # Returns the Ethernet address as 6 pairs of hexadecimal digits
58
61
  # delimited by colons.
59
62
  #
60
63
  # @example
61
- # Mac.new(18838586676582).to_s #=> "11:22:33:44:55:66"
64
+ # Mac.new(0x112233445566).to_s #=> "11:22:33:44:55:66"
65
+ #
66
+ # @return [String]
62
67
  #
63
68
  def to_s
64
69
  sprintf( "%012x", @value ).unpack( "a2" * 6 ).join( ":" )
@@ -66,10 +71,15 @@ module Pio
66
71
 
67
72
 
68
73
  #
69
- # @see to_s
74
+ # Implicitly converts +obj+ to a string.
70
75
  #
71
76
  # @example
72
- # Mac.new(18838586676582).to_str #=> "11:22:33:44:55:66"
77
+ # mac = Mac.new("11:22:33:44:55:66")
78
+ # puts "MAC = " + mac #=> "MAC = 11:22:33:44:55:66"
79
+ #
80
+ # @see #to_s
81
+ #
82
+ # @return [String]
73
83
  #
74
84
  def to_str
75
85
  to_s
@@ -77,11 +87,13 @@ module Pio
77
87
 
78
88
 
79
89
  #
80
- # Returns an array of decimal numbers converted from Ethernet's
90
+ # Returns an Array of decimal numbers converted from Ethernet's
81
91
  # address string format.
82
92
  #
83
93
  # @example
84
- # Mac.new("11:22:33:44:55:66").to_a #=> [ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 ]
94
+ # Mac.new("11:22:33:44:55:66").to_a #=> [0x11, 0x22, 0x33, 0x44, 0x55, 0x66]
95
+ #
96
+ # @return [Array]
85
97
  #
86
98
  def to_a
87
99
  to_s.split( ":" ).collect do | each |
@@ -89,53 +101,116 @@ module Pio
89
101
  end
90
102
  end
91
103
 
104
+ # @!endgroup
105
+
106
+
107
+ # @!group Predicates
108
+
109
+ #
110
+ # Returns true if Ethernet address is a multicast address.
111
+ #
112
+ # @example
113
+ # Mac.new("01:00:00:00:00:00").multicast? #=> true
114
+ # Mac.new("00:00:00:00:00:00").multicast? #=> false
115
+ #
116
+ def multicast?
117
+ to_a[ 0 ] & 1 == 1
118
+ end
119
+
92
120
 
93
121
  #
94
- # @see to_a
122
+ # Returns true if Ethernet address is a broadcast address.
95
123
  #
96
124
  # @example
97
- # Mac.new("11:22:33:44:55:66").to_ary #=> [ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 ]
125
+ # Mac.new("ff:ff:ff:ff:ff:ff").broadcast? #=> true
98
126
  #
99
- def to_ary
100
- to_a
127
+ def broadcast?
128
+ to_a.all? { | each | each == 0xff }
101
129
  end
102
130
 
103
131
 
104
132
  #
105
- # @private
133
+ # Returns +true+ if Ethernet address is an IEEE 802.1D or 802.1Q
134
+ # reserved address. See
135
+ # http://standards.ieee.org/develop/regauth/grpmac/public.html for
136
+ # details.
137
+ #
138
+ # @example
139
+ # Mac.new("01:80:c2:00:00:00").reserved? #=> true
140
+ # Mac.new("11:22:33:44:55:66").reserved? #=> false
141
+ #
142
+ def reserved?
143
+ ( to_i >> 8 ) == 0x0180c20000
144
+ end
145
+
146
+ # @!endgroup
147
+
148
+
149
+ # @!group Equality
150
+
151
+ #
152
+ # Returns +true+ if +other+ can be converted to a {Mac}
153
+ # object and its numeric representation is equal to +obj+'s.
154
+ #
155
+ # @example
156
+ # mac_address = Mac.new("11:22:33:44:55:66")
157
+ #
158
+ # mac_address == Mac.new("11:22:33:44:55:66") #=> true
159
+ # mac_address == "11:22:33:44:55:66" #=> true
160
+ # mac_address == 0x112233445566 #=> true
161
+ # mac_address == "INVALID_MAC_ADDRESS" #=> false
162
+ #
163
+ # @param other [#to_str, #to_int] a {Mac} object or an object
164
+ # that can be converted to an Ethernet address.
165
+ #
166
+ # @return [Boolean]
106
167
  #
107
168
  def == other
108
169
  begin
109
170
  to_i == Mac.new( other ).to_i
110
- rescue
171
+ rescue InvalidValueError
111
172
  false
112
173
  end
113
174
  end
114
- alias :eql? :==
115
175
 
116
176
 
117
177
  #
118
- # Returns true if Ethernet address is a multicast address.
178
+ # Returns +true+ if +obj+ and +other+ refer to the same hash key.
179
+ # +#==+ is used for the comparison.
119
180
  #
120
181
  # @example
121
- # Mac.new("01:00:00:00:00:00").multicast? #=> true
122
- # Mac.new("00:00:00:00:00:00").multicast? #=> false
182
+ # fdb = {
183
+ # Mac.new("11:22:33:44:55:66") => 1,
184
+ # Mac.new("66:55:44:33:22:11") => 2
185
+ # }
123
186
  #
124
- def multicast?
125
- to_a[ 0 ] & 1 == 1
187
+ # fdb[ Mac.new("11:22:33:44:55:66")] #=> 1
188
+ # fdb["11:22:33:44:55:66"] #=> 1
189
+ # fdb[0x112233445566] #=> 1
190
+ #
191
+ # @see #==
192
+ #
193
+ def eql? other
194
+ self.== other
126
195
  end
127
196
 
197
+ # @!endgroup
198
+
199
+
200
+ # @!group Debug
128
201
 
129
202
  #
130
- # Returns true if Ethernet address is a broadcast address.
203
+ # Returns a string containing a human-readable representation of
204
+ # {Mac} for debugging.
131
205
  #
132
- # @example
133
- # Mac.new("ff:ff:ff:ff:ff:ff").broadcast? #=> true
206
+ # @return [String]
134
207
  #
135
- def broadcast?
136
- to_a.all? { | each | each == 0xff }
208
+ def inspect
209
+ %{#<#{ self.class }:#{ __id__ } "#{ to_s }">}
137
210
  end
138
211
 
212
+ # @!endgroup
213
+
139
214
 
140
215
  ################################################################################
141
216
  private
@@ -147,14 +222,14 @@ module Pio
147
222
  if /^(#{ octet_regex }:){5}(#{ octet_regex })$/=~ mac
148
223
  mac.gsub( ":", "" ).hex
149
224
  else
150
- raise ArgumentError, %{Invalid MAC address: "#{ mac }"}
225
+ raise ArgumentError
151
226
  end
152
227
  end
153
228
 
154
229
 
155
230
  def validate_value_range
156
231
  unless ( @value >= 0 and @value <= 0xffffffffffff )
157
- raise ArgumentError, "Invalid MAC address: #{ @value }"
232
+ raise ArgumentError
158
233
  end
159
234
  end
160
235
  end
data/lib/pio/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # Base module.
2
2
  module Pio
3
3
  # gem version.
4
- VERSION = "0.2.5"
4
+ VERSION = "0.2.6"
5
5
  end
6
6
 
7
7
 
data/pio.org CHANGED
@@ -43,10 +43,16 @@ http:///www.asahi-net.or.jp/~aa4t-nngk/ipttut/output/icmpheaders.html
43
43
  BinData での optional TLV の使い方
44
44
 
45
45
  ** Trema/Pioでパケットを作ろう(1) :NOTE:
46
+ :PROPERTIES:
47
+ :ID: BA8B555C-1FBE-4FDD-BFAC-D80EE9366643
48
+ :END:
46
49
  [2013-10-06 日 15:55]
47
50
 
48
51
  http://d.hatena.ne.jp/stereocat/20131005/1380977633
49
52
  ** Trema/Pioでパケットを作ろう(2) :NOTE:
53
+ :PROPERTIES:
54
+ :ID: 29F0265C-BF73-4749-A93D-20B0BF62C45E
55
+ :END:
50
56
  [2013-10-06 日 15:55]
51
57
 
52
58
  http://d.hatena.ne.jp/stereocat/20131006/1381028321
@@ -58,22 +64,20 @@ http://d.hatena.ne.jp/stereocat/20131006/1381028321
58
64
  [2013-09-05 木 21:32]
59
65
  ** TODO 各 OpenFlow メッセージのパーサを作る
60
66
  [2013-09-06 金 19:27]
67
+ *** TODO Trema::Hello の spec を見直し
61
68
  ** TODO Nick さんに README の英語をチェックしてもらう
62
69
  [2013-09-18 水 12:01]
63
70
  ** TODO phost を Pio で書き直す
64
71
  [2013-09-24 火 15:36]
72
+
73
+ 関連するタスク:
74
+ - [[*Trema/Pio%E3%81%A7%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86(1)][Trema/Pioでパケットを作ろう(1)]]
75
+ - [[*Trema/Pio%E3%81%A7%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86(2)][Trema/Pioでパケットを作ろう(2)]]
65
76
  ** TODO DHCP パーサを作る
66
77
  [2013-08-02 金 17:17]
67
78
 
68
79
  近藤さんがすでにコーディング中。Pull-Request が来たらいっしょにリファ
69
80
  クタリングして取り込む予定。
70
- ** TODO おかしな MAC アドレスはすべて InvalidMAC 例外にまとめる
71
- :LOGBOOK:
72
- CLOCK: [2013-10-07 月 10:22]--[2013-10-07 月 10:23] => 0:01
73
- :END:
74
- [2013-10-07 月 10:22]
75
-
76
- ファイルは lib/pio/mac.rb
77
81
  * Releases
78
82
  ** DONE 0.2.2 リリース
79
83
  CLOSED: [2013-09-26 木 15:34]
@@ -165,6 +169,27 @@ CLOCK: [2013-10-07 月 10:23]--[2013-10-07 月 10:24] => 0:01
165
169
  =#to_a= と =#to_ary= のコメントとか.
166
170
  ** TODO 0.2.6 リリース
167
171
  [2013-10-10 木 13:37]
172
+ *** DONE Pio::Mac のリファクタリング
173
+ CLOSED: [2013-10-11 金 13:31] SCHEDULED: <2013-10-11 金>
174
+ :LOGBOOK:
175
+ CLOCK: [2013-10-11 金 09:39]--[2013-10-11 金 12:16] => 2:37
176
+ :END:
177
+ [2013-10-11 金 09:37]
178
+
179
+ - YARD コメント
180
+ - RSpec
181
+ - いらないメソッドの削除
182
+ など.
183
+ *** DONE おかしな MAC アドレスはすべて InvalidMAC 例外にまとめる
184
+ CLOSED: [2013-10-11 金 13:31]
185
+ :LOGBOOK:
186
+ CLOCK: [2013-10-07 月 10:22]--[2013-10-07 月 10:23] => 0:01
187
+ :END:
188
+ [2013-10-07 月 10:22]
189
+
190
+ ファイルは lib/pio/mac.rb
191
+ ** TODO 0.2.7 リリース
192
+ [2013-10-11 金 14:32]
168
193
  *** TODO 鈴木さんルータの ARP 部分を Pio で書き直してもらう
169
194
  - State "TODO" from "WAITING" [2013-09-19 木 14:18]
170
195
  - State "WAITING" from "TODO" [2013-09-18 水 12:04] \\
@@ -177,7 +202,7 @@ CLOCK: [2013-09-14 土 10:20]--[2013-09-14 土 10:21] => 0:01
177
202
  GitHub のチケットはこちら:
178
203
  https://github.com/trema/pio/issues/1
179
204
  **** NEXT 鈴木さんルータの ARP 部分を試しに自分で書き直してみる
180
- SCHEDULED: <2013-10-04 金>
205
+ SCHEDULED: <2013-10-10 木>
181
206
  :PROPERTIES:
182
207
  :Effort: 1:00
183
208
  :END:
data/spec/pio/mac_spec.rb CHANGED
@@ -9,65 +9,107 @@ module Pio
9
9
 
10
10
  context %{with "11:22:33:44:55:66"} do
11
11
  let( :value ) { "11:22:33:44:55:66" }
12
- it { should eq Mac.new( "11:22:33:44:55:66" ) }
13
- its( :to_int ) { should eq 0x112233445566 }
14
- its( :to_str ) { should eq "11:22:33:44:55:66" }
15
- its( :to_ary ) { should eq [ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 ] }
12
+
13
+ describe "#==" do
14
+ it { should eq Mac.new( "11:22:33:44:55:66" ) }
15
+ it { should eq "11:22:33:44:55:66" }
16
+ it { should_not eq Mac.new( "66:55:44:33:22:11" ) }
17
+ it { should_not eq "66:55:44:33:22:11" }
18
+ it { should eq 0x112233445566 }
19
+ it { should_not eq 42 }
20
+ it { should_not eq "INVALID_MAC_ADDRESS" }
21
+ end
22
+ describe "#eql?" do
23
+ it { expect( subject ).to eql Mac.new( "11:22:33:44:55:66" ) }
24
+ it { expect( subject ).to eql "11:22:33:44:55:66" }
25
+ it { expect( subject ).not_to eql Mac.new( "66:55:44:33:22:11" ) }
26
+ it { expect( subject ).not_to eql "66:55:44:33:22:11" }
27
+ it { expect( subject ).to eql 0x112233445566 }
28
+ it { expect( subject ).not_to eql 42 }
29
+ it { expect( subject ).not_to eql "INVALID_MAC_ADDRESS" }
30
+ end
31
+
32
+ its( :hash ) { should eq Mac.new( "11:22:33:44:55:66" ).hash }
33
+
34
+ its( :to_i ) { should eq 0x112233445566 }
35
+ its( :to_a ) { should eq [ 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 ] }
36
+ its( :to_s ) { should eq "11:22:33:44:55:66" }
37
+ describe "#to_str" do
38
+ context %{when "MAC = " + subject} do
39
+ it { expect( "MAC = " + subject ).to eq "MAC = 11:22:33:44:55:66" }
40
+ end
41
+ end
42
+
16
43
  its( :multicast? ){ should be_true }
17
44
  its( :broadcast? ){ should be_false }
45
+ its( :reserved? ){ should be_false }
46
+ end
47
+
48
+
49
+ context "with reserved address" do
50
+ ( 0x0..0xf ).each do | each |
51
+ octet = "%02x" % each
52
+ reserved_address = "01:80:c2:00:00:#{ octet }"
53
+
54
+ context "when #{ reserved_address }" do
55
+ let( :value ) { reserved_address }
56
+ its( :reserved? ) { should be_true }
57
+ end
58
+ end
18
59
  end
19
60
 
20
61
 
21
62
  context "with 0" do
22
63
  let( :value ) { 0 }
64
+
23
65
  it { should eq Mac.new( 0 ) }
24
- its( :to_int ) { should eq 0 }
25
- its( :to_str ) { should eq "00:00:00:00:00:00" }
26
- its( :to_ary ) { should eq [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] }
66
+ its( :to_i ) { should eq 0 }
67
+ its( :to_a ) { should eq [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ] }
68
+ its( :to_s ) { should eq "00:00:00:00:00:00" }
27
69
  its( :multicast? ){ should be_false }
28
70
  its( :broadcast? ){ should be_false }
71
+ its( :reserved? ){ should be_false }
29
72
  end
30
73
 
31
74
 
32
75
  context "with 0xffffffffffff" do
33
76
  let( :value ) { 0xffffffffffff }
77
+
34
78
  it { should eq Mac.new( 0xffffffffffff ) }
35
- its( :to_int ) { should eq 0xffffffffffff }
36
- its( :to_str ) { should eq "ff:ff:ff:ff:ff:ff" }
37
- its( :to_ary ) { should eq [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ] }
79
+ its( :to_i ) { should eq 0xffffffffffff }
80
+ its( :to_a ) { should eq [ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff ] }
81
+ its( :to_s ) { should eq "ff:ff:ff:ff:ff:ff" }
38
82
  its( :multicast? ){ should be_true }
39
83
  its( :broadcast? ){ should be_true }
84
+ its( :reserved? ){ should be_false }
40
85
  end
41
86
 
42
87
 
43
88
  context %{with "INVALID MAC ADDRESS"} do
44
89
  let( :value ) { "INVALID MAC ADDRESS" }
45
- it { expect { subject }.to raise_error( ArgumentError ) }
90
+
91
+ it { expect { subject }.to raise_error( Mac::InvalidValueError ) }
46
92
  end
47
93
 
48
94
 
49
95
  context "with -1" do
50
96
  let( :value ) { -1 }
51
- it { expect { subject }.to raise_error( ArgumentError ) }
97
+
98
+ it { expect { subject }.to raise_error( Mac::InvalidValueError ) }
52
99
  end
53
100
 
54
101
 
55
102
  context "with 0x1000000000000" do
56
103
  let( :value ) { 0x1000000000000 }
57
- it { expect { subject }.to raise_error( ArgumentError ) }
104
+
105
+ it { expect { subject }.to raise_error( Mac::InvalidValueError ) }
58
106
  end
59
107
 
60
108
 
61
109
  context "with [ 1, 2, 3 ]" do
62
110
  let( :value ) { [ 1, 2, 3 ] }
63
- it { expect { subject }.to raise_error( TypeError ) }
64
- end
65
-
66
111
 
67
- context %{with "00:00:00:00:00:01"} do
68
- let( :value ) { "00:00:00:00:00:01" }
69
- it { expect( subject ).to eql Mac.new( "00:00:00:00:00:01" ) }
70
- its( :hash ) { should eq Mac.new( "00:00:00:00:00:01" ).hash }
112
+ it { expect { subject }.to raise_error( Mac::InvalidValueError ) }
71
113
  end
72
114
  end
73
115
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yasuhito Takamiya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-10 00:00:00.000000000 Z
11
+ date: 2013-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bindata