pio 0.10.1 → 0.11.0
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +33 -2
- data/examples/echo_read.rb +1 -1
- data/examples/features_read.rb +1 -1
- data/examples/flow_mod_new.rb +13 -0
- data/examples/flow_mod_read.rb +6 -0
- data/features/echo_read.feature +27 -3
- data/features/features_read.feature +46 -2
- data/features/flow_mod_read.feature +186 -0
- data/features/hello_read.feature +9 -0
- data/features/packet_data/flow_mod_add.raw +0 -0
- data/features/packet_data/flow_mod_delete.raw +0 -0
- data/features/packet_data/flow_mod_delete_strict.raw +0 -0
- data/features/packet_data/flow_mod_modify.raw +0 -0
- data/features/packet_data/flow_mod_modify_strict.raw +0 -0
- data/features/packet_in_read.feature +13 -0
- data/features/packet_out_read.feature +16 -0
- data/features/step_definitions/packet_data_steps.rb +10 -1
- data/lib/pio.rb +1 -0
- data/lib/pio/echo.rb +10 -8
- data/lib/pio/enqueue.rb +1 -1
- data/lib/pio/features.rb +64 -7
- data/lib/pio/flow_mod.rb +86 -0
- data/lib/pio/hello.rb +4 -74
- data/lib/pio/ipv4_address.rb +1 -1
- data/lib/pio/match.rb +167 -0
- data/lib/pio/open_flow.rb +1 -0
- data/lib/pio/open_flow/actions.rb +65 -0
- data/lib/pio/open_flow/flags.rb +12 -9
- data/lib/pio/open_flow/message.rb +105 -21
- data/lib/pio/open_flow/phy_port.rb +31 -27
- data/lib/pio/open_flow/type.rb +1 -0
- data/lib/pio/packet_in.rb +2 -12
- data/lib/pio/packet_out.rb +4 -74
- data/lib/pio/send_out_port.rb +1 -0
- data/lib/pio/type/ip_address.rb +2 -7
- data/lib/pio/version.rb +1 -1
- data/pio.gemspec +8 -8
- data/spec/pio/echo/reply_spec.rb +61 -6
- data/spec/pio/echo/request_spec.rb +61 -6
- data/spec/pio/features/reply_spec.rb +81 -4
- data/spec/pio/features/request_spec.rb +88 -41
- data/spec/pio/flow_mod_spec.rb +151 -0
- data/spec/pio/hello_spec.rb +73 -56
- data/spec/pio/match_spec.rb +194 -0
- data/spec/pio/packet_in_spec.rb +35 -38
- data/spec/pio/packet_out_spec.rb +243 -182
- data/spec/pio/wildcards_spec.rb +115 -0
- metadata +37 -30
- data/features/packet_data/echo.raw +0 -0
- data/lib/pio/echo/message.rb +0 -49
- data/lib/pio/echo/reply.rb +0 -41
- data/lib/pio/echo/request.rb +0 -43
- data/lib/pio/features/reply.rb +0 -88
- data/lib/pio/features/request.rb +0 -68
- data/lib/pio/open_flow/parser.rb +0 -22
- data/spec/pio/echo_spec.rb +0 -49
- data/spec/pio/features_spec.rb +0 -96
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'bindata'
|
2
|
+
require 'pio/match'
|
3
|
+
|
4
|
+
describe Pio::Match::Wildcards do
|
5
|
+
# This class has wildcards field.
|
6
|
+
class WildcardTest < BinData::Record
|
7
|
+
wildcards :wildcards
|
8
|
+
end
|
9
|
+
|
10
|
+
describe '.new' do
|
11
|
+
When(:binary) { WildcardTest.new(wildcards: parameters).to_binary_s }
|
12
|
+
|
13
|
+
context 'with no wildcard' do
|
14
|
+
Given(:parameters) { {} }
|
15
|
+
|
16
|
+
Then { binary == ['00000000000000000000000000000000'].pack('B*') }
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'with in_port: true' do
|
20
|
+
Given(:parameters) { { in_port: true } }
|
21
|
+
|
22
|
+
Then { binary == ['00000000000000000000000000000001'].pack('B*') }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'with nw_src: 0b10101' do
|
26
|
+
Given(:parameters) { { nw_src: 0b10101 } }
|
27
|
+
|
28
|
+
Then { binary == ['00000000000000000001010100000000'].pack('B*') }
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'with nw_src_all: true' do
|
32
|
+
Given(:parameters) { { nw_src_all: true } }
|
33
|
+
|
34
|
+
Then { binary == ['00000000000000000010000000000000'].pack('B*') }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'with nw_dst: 010101' do
|
38
|
+
Given(:parameters) { { nw_dst: 0b10101 } }
|
39
|
+
|
40
|
+
Then { binary == ['00000000000001010100000000000000'].pack('B*') }
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'with nw_dst_all: true' do
|
44
|
+
Given(:parameters) { { nw_dst_all: true } }
|
45
|
+
|
46
|
+
Then { binary == ['00000000000010000000000000000000'].pack('B*') }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'with in_port: false' do
|
50
|
+
Given(:parameters) { { in_port: false } }
|
51
|
+
|
52
|
+
Then { binary == ['00000000000000000000000000000000'].pack('B*') }
|
53
|
+
end
|
54
|
+
|
55
|
+
context 'with INVALID_FLAG: true' do
|
56
|
+
Given(:parameters) { { INVALID_FLAG: true } }
|
57
|
+
|
58
|
+
Then do
|
59
|
+
binary == Failure(KeyError, 'key not found: :INVALID_FLAG')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '.read' do
|
65
|
+
When(:wildcards) { Pio::Match::Wildcards.read(binary) }
|
66
|
+
|
67
|
+
context 'with all 0' do
|
68
|
+
Given(:binary) { ['00000000000000000000000000000000'].pack('B*') }
|
69
|
+
|
70
|
+
Then { wildcards == {} }
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'with in_port: true' do
|
74
|
+
Given(:binary) { ['00000000000000000000000000000001'].pack('B*') }
|
75
|
+
|
76
|
+
Then { wildcards == { in_port: true } }
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'with dl_vlan: true' do
|
80
|
+
Given(:binary) { ['00000000000000000000000000000010'].pack('B*') }
|
81
|
+
|
82
|
+
Then { wildcards == { dl_vlan: true } }
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'with nw_src: 010101' do
|
86
|
+
Given(:binary) { ['00000000000000000001010100000000'].pack('B*') }
|
87
|
+
|
88
|
+
Then { wildcards == { nw_src: 0b10101 } }
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'with nw_src: 100000' do
|
92
|
+
Given(:binary) { ['00000000000000000010000000000000'].pack('B*') }
|
93
|
+
|
94
|
+
Then { wildcards == { nw_src_all: true } }
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'with nw_dst: 010101' do
|
98
|
+
Given(:binary) { ['00000000000001010100000000000000'].pack('B*') }
|
99
|
+
|
100
|
+
Then { wildcards == { nw_dst: 0b10101 } }
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'with nw_dst: 100000' do
|
104
|
+
Given(:binary) { ['00000000000010000000000000000000'].pack('B*') }
|
105
|
+
|
106
|
+
Then { wildcards == { nw_dst_all: true } }
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'with in_port: true, nw_src: 010101, nw_tos: true' do
|
110
|
+
Given(:binary) { ['00000000001000000001010100000001'].pack('B*') }
|
111
|
+
|
112
|
+
Then { wildcards == { in_port: true, nw_src: 0b10101, nw_tos: true } }
|
113
|
+
end
|
114
|
+
end
|
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.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yasuhito Takamiya
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bindata
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.7.
|
47
|
+
version: 1.7.12
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.7.
|
54
|
+
version: 1.7.12
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: pry
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.
|
75
|
+
version: 2.11.1
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2.
|
82
|
+
version: 2.11.1
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: guard-bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -198,14 +198,14 @@ dependencies:
|
|
198
198
|
requirements:
|
199
199
|
- - ~>
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: 0.5.
|
201
|
+
version: 0.5.10
|
202
202
|
type: :development
|
203
203
|
prerelease: false
|
204
204
|
version_requirements: !ruby/object:Gem::Requirement
|
205
205
|
requirements:
|
206
206
|
- - ~>
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version: 0.5.
|
208
|
+
version: 0.5.10
|
209
209
|
- !ruby/object:Gem::Dependency
|
210
210
|
name: yard
|
211
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -226,14 +226,14 @@ dependencies:
|
|
226
226
|
requirements:
|
227
227
|
- - ~>
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version: 0.4.
|
229
|
+
version: 0.4.5
|
230
230
|
type: :development
|
231
231
|
prerelease: false
|
232
232
|
version_requirements: !ruby/object:Gem::Requirement
|
233
233
|
requirements:
|
234
234
|
- - ~>
|
235
235
|
- !ruby/object:Gem::Version
|
236
|
-
version: 0.4.
|
236
|
+
version: 0.4.5
|
237
237
|
- !ruby/object:Gem::Dependency
|
238
238
|
name: coveralls
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -268,42 +268,42 @@ dependencies:
|
|
268
268
|
requirements:
|
269
269
|
- - ~>
|
270
270
|
- !ruby/object:Gem::Version
|
271
|
-
version: 2.
|
271
|
+
version: 2.6.0
|
272
272
|
type: :development
|
273
273
|
prerelease: false
|
274
274
|
version_requirements: !ruby/object:Gem::Requirement
|
275
275
|
requirements:
|
276
276
|
- - ~>
|
277
277
|
- !ruby/object:Gem::Version
|
278
|
-
version: 2.
|
278
|
+
version: 2.6.0
|
279
279
|
- !ruby/object:Gem::Dependency
|
280
280
|
name: flog
|
281
281
|
requirement: !ruby/object:Gem::Requirement
|
282
282
|
requirements:
|
283
283
|
- - ~>
|
284
284
|
- !ruby/object:Gem::Version
|
285
|
-
version: 4.3.
|
285
|
+
version: 4.3.1
|
286
286
|
type: :development
|
287
287
|
prerelease: false
|
288
288
|
version_requirements: !ruby/object:Gem::Requirement
|
289
289
|
requirements:
|
290
290
|
- - ~>
|
291
291
|
- !ruby/object:Gem::Version
|
292
|
-
version: 4.3.
|
292
|
+
version: 4.3.1
|
293
293
|
- !ruby/object:Gem::Dependency
|
294
294
|
name: reek
|
295
295
|
requirement: !ruby/object:Gem::Requirement
|
296
296
|
requirements:
|
297
297
|
- - ~>
|
298
298
|
- !ruby/object:Gem::Version
|
299
|
-
version: 1.
|
299
|
+
version: 1.6.2
|
300
300
|
type: :development
|
301
301
|
prerelease: false
|
302
302
|
version_requirements: !ruby/object:Gem::Requirement
|
303
303
|
requirements:
|
304
304
|
- - ~>
|
305
305
|
- !ruby/object:Gem::Version
|
306
|
-
version: 1.
|
306
|
+
version: 1.6.2
|
307
307
|
- !ruby/object:Gem::Dependency
|
308
308
|
name: rspec
|
309
309
|
requirement: !ruby/object:Gem::Requirement
|
@@ -324,14 +324,14 @@ dependencies:
|
|
324
324
|
requirements:
|
325
325
|
- - ~>
|
326
326
|
- !ruby/object:Gem::Version
|
327
|
-
version: 3.
|
327
|
+
version: 3.6.0
|
328
328
|
type: :development
|
329
329
|
prerelease: false
|
330
330
|
version_requirements: !ruby/object:Gem::Requirement
|
331
331
|
requirements:
|
332
332
|
- - ~>
|
333
333
|
- !ruby/object:Gem::Version
|
334
|
-
version: 3.
|
334
|
+
version: 3.6.0
|
335
335
|
- !ruby/object:Gem::Dependency
|
336
336
|
name: rubocop
|
337
337
|
requirement: !ruby/object:Gem::Requirement
|
@@ -370,6 +370,8 @@ files:
|
|
370
370
|
- examples/echo_read.rb
|
371
371
|
- examples/features_new.rb
|
372
372
|
- examples/features_read.rb
|
373
|
+
- examples/flow_mod_new.rb
|
374
|
+
- examples/flow_mod_read.rb
|
373
375
|
- examples/hello_new.rb
|
374
376
|
- examples/hello_read.rb
|
375
377
|
- examples/icmp_new.rb
|
@@ -384,6 +386,7 @@ files:
|
|
384
386
|
- features/dhcp_read.feature
|
385
387
|
- features/echo_read.feature
|
386
388
|
- features/features_read.feature
|
389
|
+
- features/flow_mod_read.feature
|
387
390
|
- features/hello_read.feature
|
388
391
|
- features/icmp_read.feature
|
389
392
|
- features/lldp_read.feature
|
@@ -396,7 +399,6 @@ files:
|
|
396
399
|
- features/packet_data/desc_stats_reply.raw
|
397
400
|
- features/packet_data/desc_stats_request.raw
|
398
401
|
- features/packet_data/dhcp.pcap
|
399
|
-
- features/packet_data/echo.raw
|
400
402
|
- features/packet_data/echo_reply.raw
|
401
403
|
- features/packet_data/echo_request.raw
|
402
404
|
- features/packet_data/error.raw
|
@@ -404,6 +406,9 @@ files:
|
|
404
406
|
- features/packet_data/features_request.raw
|
405
407
|
- features/packet_data/flow_mod_add.raw
|
406
408
|
- features/packet_data/flow_mod_delete.raw
|
409
|
+
- features/packet_data/flow_mod_delete_strict.raw
|
410
|
+
- features/packet_data/flow_mod_modify.raw
|
411
|
+
- features/packet_data/flow_mod_modify_strict.raw
|
407
412
|
- features/packet_data/flow_removed.raw
|
408
413
|
- features/packet_data/flow_stats_reply.raw
|
409
414
|
- features/packet_data/flow_stats_request.raw
|
@@ -457,13 +462,9 @@ files:
|
|
457
462
|
- lib/pio/dhcp/parameter_list.rb
|
458
463
|
- lib/pio/dhcp/request.rb
|
459
464
|
- lib/pio/echo.rb
|
460
|
-
- lib/pio/echo/message.rb
|
461
|
-
- lib/pio/echo/reply.rb
|
462
|
-
- lib/pio/echo/request.rb
|
463
465
|
- lib/pio/enqueue.rb
|
464
466
|
- lib/pio/features.rb
|
465
|
-
- lib/pio/
|
466
|
-
- lib/pio/features/request.rb
|
467
|
+
- lib/pio/flow_mod.rb
|
467
468
|
- lib/pio/hello.rb
|
468
469
|
- lib/pio/icmp.rb
|
469
470
|
- lib/pio/icmp/format.rb
|
@@ -487,14 +488,15 @@ files:
|
|
487
488
|
- lib/pio/lldp/system_name_value.rb
|
488
489
|
- lib/pio/lldp/ttl_tlv.rb
|
489
490
|
- lib/pio/mac.rb
|
491
|
+
- lib/pio/match.rb
|
490
492
|
- lib/pio/message_type_selector.rb
|
491
493
|
- lib/pio/monkey_patch/integer.rb
|
492
494
|
- lib/pio/monkey_patch/integer/ranges.rb
|
493
495
|
- lib/pio/open_flow.rb
|
496
|
+
- lib/pio/open_flow/actions.rb
|
494
497
|
- lib/pio/open_flow/flags.rb
|
495
498
|
- lib/pio/open_flow/message.rb
|
496
499
|
- lib/pio/open_flow/open_flow_header.rb
|
497
|
-
- lib/pio/open_flow/parser.rb
|
498
500
|
- lib/pio/open_flow/phy_port.rb
|
499
501
|
- lib/pio/open_flow/port_number.rb
|
500
502
|
- lib/pio/open_flow/type.rb
|
@@ -531,11 +533,10 @@ files:
|
|
531
533
|
- spec/pio/dhcp_spec.rb
|
532
534
|
- spec/pio/echo/reply_spec.rb
|
533
535
|
- spec/pio/echo/request_spec.rb
|
534
|
-
- spec/pio/echo_spec.rb
|
535
536
|
- spec/pio/enqueue_spec.rb
|
536
537
|
- spec/pio/features/reply_spec.rb
|
537
538
|
- spec/pio/features/request_spec.rb
|
538
|
-
- spec/pio/
|
539
|
+
- spec/pio/flow_mod_spec.rb
|
539
540
|
- spec/pio/hello_spec.rb
|
540
541
|
- spec/pio/icmp/reply_spec.rb
|
541
542
|
- spec/pio/icmp/request_spec.rb
|
@@ -544,6 +545,7 @@ files:
|
|
544
545
|
- spec/pio/lldp/options_spec.rb
|
545
546
|
- spec/pio/lldp_spec.rb
|
546
547
|
- spec/pio/mac_spec.rb
|
548
|
+
- spec/pio/match_spec.rb
|
547
549
|
- spec/pio/open_flow/phy_port_spec.rb
|
548
550
|
- spec/pio/open_flow/type_spec.rb
|
549
551
|
- spec/pio/packet_in_spec.rb
|
@@ -559,6 +561,7 @@ files:
|
|
559
561
|
- spec/pio/set_vlan_priority_spec.rb
|
560
562
|
- spec/pio/set_vlan_vid_spec.rb
|
561
563
|
- spec/pio/strip_vlan_header_spec.rb
|
564
|
+
- spec/pio/wildcards_spec.rb
|
562
565
|
- spec/spec_helper.rb
|
563
566
|
homepage: http://github.com/trema/pio
|
564
567
|
licenses:
|
@@ -597,11 +600,10 @@ test_files:
|
|
597
600
|
- spec/pio/dhcp_spec.rb
|
598
601
|
- spec/pio/echo/reply_spec.rb
|
599
602
|
- spec/pio/echo/request_spec.rb
|
600
|
-
- spec/pio/echo_spec.rb
|
601
603
|
- spec/pio/enqueue_spec.rb
|
602
604
|
- spec/pio/features/reply_spec.rb
|
603
605
|
- spec/pio/features/request_spec.rb
|
604
|
-
- spec/pio/
|
606
|
+
- spec/pio/flow_mod_spec.rb
|
605
607
|
- spec/pio/hello_spec.rb
|
606
608
|
- spec/pio/icmp/reply_spec.rb
|
607
609
|
- spec/pio/icmp/request_spec.rb
|
@@ -610,6 +612,7 @@ test_files:
|
|
610
612
|
- spec/pio/lldp/options_spec.rb
|
611
613
|
- spec/pio/lldp_spec.rb
|
612
614
|
- spec/pio/mac_spec.rb
|
615
|
+
- spec/pio/match_spec.rb
|
613
616
|
- spec/pio/open_flow/phy_port_spec.rb
|
614
617
|
- spec/pio/open_flow/type_spec.rb
|
615
618
|
- spec/pio/packet_in_spec.rb
|
@@ -625,11 +628,13 @@ test_files:
|
|
625
628
|
- spec/pio/set_vlan_priority_spec.rb
|
626
629
|
- spec/pio/set_vlan_vid_spec.rb
|
627
630
|
- spec/pio/strip_vlan_header_spec.rb
|
631
|
+
- spec/pio/wildcards_spec.rb
|
628
632
|
- spec/spec_helper.rb
|
629
633
|
- features/arp_read.feature
|
630
634
|
- features/dhcp_read.feature
|
631
635
|
- features/echo_read.feature
|
632
636
|
- features/features_read.feature
|
637
|
+
- features/flow_mod_read.feature
|
633
638
|
- features/hello_read.feature
|
634
639
|
- features/icmp_read.feature
|
635
640
|
- features/lldp_read.feature
|
@@ -642,7 +647,6 @@ test_files:
|
|
642
647
|
- features/packet_data/desc_stats_reply.raw
|
643
648
|
- features/packet_data/desc_stats_request.raw
|
644
649
|
- features/packet_data/dhcp.pcap
|
645
|
-
- features/packet_data/echo.raw
|
646
650
|
- features/packet_data/echo_reply.raw
|
647
651
|
- features/packet_data/echo_request.raw
|
648
652
|
- features/packet_data/error.raw
|
@@ -650,6 +654,9 @@ test_files:
|
|
650
654
|
- features/packet_data/features_request.raw
|
651
655
|
- features/packet_data/flow_mod_add.raw
|
652
656
|
- features/packet_data/flow_mod_delete.raw
|
657
|
+
- features/packet_data/flow_mod_delete_strict.raw
|
658
|
+
- features/packet_data/flow_mod_modify.raw
|
659
|
+
- features/packet_data/flow_mod_modify_strict.raw
|
653
660
|
- features/packet_data/flow_removed.raw
|
654
661
|
- features/packet_data/flow_stats_reply.raw
|
655
662
|
- features/packet_data/flow_stats_request.raw
|
Binary file
|
data/lib/pio/echo/message.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
require 'pio/open_flow'
|
2
|
-
|
3
|
-
module Pio
|
4
|
-
class Echo
|
5
|
-
# Base class of Echo request and reply.
|
6
|
-
class Message < Pio::OpenFlow::Message
|
7
|
-
# Message body of Echo
|
8
|
-
class Body < BinData::Record
|
9
|
-
endian :big
|
10
|
-
|
11
|
-
string :body
|
12
|
-
|
13
|
-
def length
|
14
|
-
body.length
|
15
|
-
end
|
16
|
-
|
17
|
-
def empty?
|
18
|
-
length == 0
|
19
|
-
end
|
20
|
-
|
21
|
-
def ==(other)
|
22
|
-
body == other
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# rubocop:disable MethodLength
|
27
|
-
# rubocop:disable AbcSize
|
28
|
-
# This method smells of :reek:FeatureEnvy
|
29
|
-
def initialize(user_options = {})
|
30
|
-
if user_options.respond_to?(:to_i)
|
31
|
-
options = { open_flow_header: { transaction_id: user_options.to_i } }
|
32
|
-
elsif user_options.respond_to?(:fetch)
|
33
|
-
header_options = { transaction_id: user_options[:transaction_id] ||
|
34
|
-
user_options[:xid] || 0 }
|
35
|
-
options = { open_flow_header: header_options,
|
36
|
-
body: { body: user_options[:user_data] } }
|
37
|
-
else
|
38
|
-
fail TypeError
|
39
|
-
end
|
40
|
-
if options[:open_flow_header][:transaction_id] >= 2**32
|
41
|
-
fail ArgumentError, 'Transaction ID >= 2**32'
|
42
|
-
end
|
43
|
-
@format = self.class.const_get(:Format).new(options)
|
44
|
-
end
|
45
|
-
# rubocop:enable AbcSize
|
46
|
-
# rubocop:enable MethodLength
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|