cisco_acl_intp 0.0.3 → 0.0.4
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/.gitignore +3 -0
- data/.rubocop.yml +2 -2
- data/.travis.yml +4 -2
- data/Gemfile +7 -6
- data/README.md +23 -18
- data/Rakefile +11 -13
- data/cisco_acl_intp.gemspec +7 -7
- data/lib/cisco_acl_intp/acc.rb +111 -0
- data/lib/cisco_acl_intp/{ace.rb → ace_base.rb} +9 -8
- data/lib/cisco_acl_intp/{extended_ace.rb → ace_extended.rb} +8 -10
- data/lib/cisco_acl_intp/{standard_ace.rb → ace_standard.rb} +5 -5
- data/lib/cisco_acl_intp/acespec_base.rb +15 -0
- data/lib/cisco_acl_intp/{ace_ip.rb → acespec_ip.rb} +14 -22
- data/lib/cisco_acl_intp/{ace_other_qualifiers.rb → acespec_other_qualifiers.rb} +7 -7
- data/lib/cisco_acl_intp/{ace_port.rb → acespec_port.rb} +10 -13
- data/lib/cisco_acl_intp/{ace_port_opr.rb → acespec_port_opr.rb} +75 -73
- data/lib/cisco_acl_intp/{ace_port_opr_base.rb → acespec_port_opr_base.rb} +49 -34
- data/lib/cisco_acl_intp/{ace_proto.rb → acespec_proto.rb} +4 -4
- data/lib/cisco_acl_intp/{ace_proto_base.rb → acespec_proto_base.rb} +8 -8
- data/lib/cisco_acl_intp/{ace_srcdst.rb → acespec_srcdst.rb} +9 -8
- data/lib/cisco_acl_intp/{ace_tcp_flags.rb → acespec_tcp_flags.rb} +4 -4
- data/lib/cisco_acl_intp/acl.rb +1 -1
- data/lib/cisco_acl_intp/acl_base.rb +108 -80
- data/lib/cisco_acl_intp/{mono_function_acl.rb → acl_category_base.rb} +5 -5
- data/lib/cisco_acl_intp/acl_utils.rb +1 -1
- data/lib/cisco_acl_intp/parser.rb +388 -406
- data/lib/cisco_acl_intp/parser.ry +8 -3
- data/lib/cisco_acl_intp/parser_api.rb +4 -4
- data/lib/cisco_acl_intp/scanner.rb +8 -10
- data/lib/cisco_acl_intp/scanner_special_token_handler.rb +3 -3
- data/lib/cisco_acl_intp/version.rb +1 -1
- data/spec/cisco_acl_intp/{extended_ace_spec.rb → ace_extended_spec.rb} +157 -128
- data/spec/cisco_acl_intp/ace_spec.rb +21 -19
- data/spec/cisco_acl_intp/{standard_ace_spec.rb → ace_standard_spec.rb} +7 -11
- data/spec/cisco_acl_intp/{ace_ip_spec.rb → acespec_ip_spec.rb} +34 -34
- data/spec/cisco_acl_intp/{ace_other_qualifier_spec.rb → acespec_other_qualifier_spec.rb} +18 -18
- data/spec/cisco_acl_intp/acespec_port_operator_spec.rb +331 -0
- data/spec/cisco_acl_intp/{ace_port_spec.rb → acespec_port_spec.rb} +33 -33
- data/spec/cisco_acl_intp/{ace_proto_spec.rb → acespec_proto_spec.rb} +61 -61
- data/spec/cisco_acl_intp/{ace_srcdst_spec.rb → acespec_srcdst_spec.rb} +113 -54
- data/spec/cisco_acl_intp/{ace_tcp_flags_spec.rb → acespec_tcp_flags_spec.rb} +10 -10
- data/spec/cisco_acl_intp/acl_base_spec.rb +14 -12
- data/spec/cisco_acl_intp/{extended_acl_spec.rb → acl_extended_spec.rb} +28 -28
- data/spec/cisco_acl_intp/{standard_acl_spec.rb → acl_standard_spec.rb} +24 -23
- data/spec/cisco_acl_intp/cisco_acl_intp_spec.rb +1 -1
- data/spec/cisco_acl_intp/parser_spec.rb +12 -12
- data/spec/cisco_acl_intp/scanner_spec.rb +31 -36
- data/spec/parser_fullfill_patterns.rb +6 -7
- data/spec/spec_helper.rb +6 -6
- data/tools/check_acl.rb +1 -1
- metadata +60 -59
- data/lib/cisco_acl_intp/single_acl_base.rb +0 -137
- data/spec/cisco_acl_intp/ace_port_operator_spec.rb +0 -340
@@ -0,0 +1,15 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'cisco_acl_intp/acc'
|
4
|
+
|
5
|
+
module CiscoAclIntp
|
6
|
+
# AceSpec: Component element of a ACE.
|
7
|
+
class AceSpecBase < AccessControlContainer
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
### Local variables:
|
12
|
+
### mode: Ruby
|
13
|
+
### coding: utf-8-unix
|
14
|
+
### indent-tabs-mode: nil
|
15
|
+
### End:
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require 'forwardable'
|
3
3
|
require 'netaddr'
|
4
|
-
require 'cisco_acl_intp/
|
4
|
+
require 'cisco_acl_intp/acespec_base'
|
5
5
|
|
6
6
|
module CiscoAclIntp
|
7
7
|
# IP Address and Wildcard mask container
|
8
|
-
class AceIpSpec <
|
8
|
+
class AceIpSpec < AceSpecBase
|
9
9
|
extend Forwardable
|
10
10
|
|
11
11
|
# @param [NetAddr::CIDR] value IP address
|
@@ -41,7 +41,7 @@ module CiscoAclIntp
|
|
41
41
|
@options = opts
|
42
42
|
define_addrinfo
|
43
43
|
else
|
44
|
-
|
44
|
+
raise AclArgumentError, 'Not specified IP address'
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -58,13 +58,11 @@ module CiscoAclIntp
|
|
58
58
|
if to_wmasked_ip_s == '0.0.0.0'
|
59
59
|
# ip = '0.0.0.0' or wildcard = '255.255.255.255'
|
60
60
|
tag_ip('any')
|
61
|
+
elsif @wildcard == '0.0.0.0'
|
62
|
+
# /32 mask
|
63
|
+
format '%s %s', tag_mask('host'), tag_ip(@ipaddr.ip)
|
61
64
|
else
|
62
|
-
|
63
|
-
# /32 mask
|
64
|
-
format '%s %s', tag_mask('host'), tag_ip(@ipaddr.ip)
|
65
|
-
else
|
66
|
-
format '%s %s', tag_ip(to_wmasked_ip_s), tag_mask(@wildcard)
|
67
|
-
end
|
65
|
+
format '%s %s', tag_ip(to_wmasked_ip_s), tag_mask(@wildcard)
|
68
66
|
end
|
69
67
|
end
|
70
68
|
|
@@ -93,7 +91,7 @@ module CiscoAclIntp
|
|
93
91
|
OCTET_BIT_LENGTH = {
|
94
92
|
'255' => 0, '127' => 1, '63' => 2, '31' => 3,
|
95
93
|
'15' => 4, '7' => 5, '3' => 6, '1' => 7, '0' => 8
|
96
|
-
}
|
94
|
+
}.freeze
|
97
95
|
|
98
96
|
# Covnet IPv4 bit-flapped wildcard to netmask length
|
99
97
|
# @return [Fixnum] netmask length
|
@@ -102,11 +100,8 @@ module CiscoAclIntp
|
|
102
100
|
# e.g. '0.0.0.1.255' #=> 31
|
103
101
|
def wildcard_bitlength
|
104
102
|
@wildcard.split(/\./).reduce(0) do |len, octet|
|
105
|
-
|
106
|
-
|
107
|
-
else
|
108
|
-
nil
|
109
|
-
end
|
103
|
+
break unless len && OCTET_BIT_LENGTH.key?(octet)
|
104
|
+
len + OCTET_BIT_LENGTH[octet]
|
110
105
|
end
|
111
106
|
end
|
112
107
|
|
@@ -145,12 +140,9 @@ module CiscoAclIntp
|
|
145
140
|
# Set instance variables. Secondary prioritize option is netmask,
|
146
141
|
# and third(last) one is default-mask
|
147
142
|
def define_addrinfo_by_netmask_or_default
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
@options[:netmask] = 32 # default ('host' mask)
|
152
|
-
define_addrinfo_with_netmask
|
153
|
-
end
|
143
|
+
# default ('host' mask)
|
144
|
+
@options[:netmask] = 32 unless @options.key?(:netmask)
|
145
|
+
define_addrinfo_with_netmask
|
154
146
|
end
|
155
147
|
|
156
148
|
# Set instance variables with ip/wildcard
|
@@ -166,7 +158,7 @@ module CiscoAclIntp
|
|
166
158
|
def define_addrinfo_with_netmask
|
167
159
|
@netmask = @options[:netmask]
|
168
160
|
@ipaddr = NetAddr::CIDR.create(
|
169
|
-
format
|
161
|
+
format('%s/%s', @options[:ipaddr], @netmask)
|
170
162
|
)
|
171
163
|
@wildcard = @ipaddr.wildcard_mask(true)
|
172
164
|
end
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
3
|
require 'forwardable'
|
4
|
-
require 'cisco_acl_intp/
|
4
|
+
require 'cisco_acl_intp/acespec_base'
|
5
5
|
|
6
6
|
module CiscoAclIntp
|
7
7
|
# List of other-qualifiers for extended ace
|
8
|
-
class AceOtherQualifierList <
|
8
|
+
class AceOtherQualifierList < AceSpecBase
|
9
9
|
extend Forwardable
|
10
10
|
|
11
11
|
# @param [Array] value List of {AceOtherQualifierList} object
|
@@ -23,7 +23,7 @@ module CiscoAclIntp
|
|
23
23
|
# Generate string for Cisco IOS access list
|
24
24
|
# @return [String]
|
25
25
|
def to_s
|
26
|
-
tag_other_qualifier(@list.map
|
26
|
+
tag_other_qualifier(@list.map(&:to_s).join(' '))
|
27
27
|
end
|
28
28
|
|
29
29
|
# @param [AceOtherQualifierList] other RHS Object
|
@@ -36,7 +36,7 @@ module CiscoAclIntp
|
|
36
36
|
end
|
37
37
|
|
38
38
|
# Access list entry qualifier base
|
39
|
-
class AceOtherQualifierBase <
|
39
|
+
class AceOtherQualifierBase < AceSpecBase
|
40
40
|
end
|
41
41
|
|
42
42
|
# Log spec container
|
@@ -51,7 +51,7 @@ module CiscoAclIntp
|
|
51
51
|
|
52
52
|
# alias as boolean method
|
53
53
|
# @return [Boolean]
|
54
|
-
|
54
|
+
alias input? input
|
55
55
|
|
56
56
|
# Constructor
|
57
57
|
# @param [String] cookie Log cookie
|
@@ -90,10 +90,10 @@ module CiscoAclIntp
|
|
90
90
|
# Constructor
|
91
91
|
# @param [String] name Recursive name
|
92
92
|
def initialize(name)
|
93
|
-
if name &&
|
93
|
+
if name && !name.empty?
|
94
94
|
@recursive_name = name
|
95
95
|
else
|
96
|
-
|
96
|
+
raise AclArgumentError, 'Not specified recursive name'
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require 'forwardable'
|
3
|
-
require 'cisco_acl_intp/
|
4
|
-
require 'cisco_acl_intp/
|
3
|
+
require 'cisco_acl_intp/acespec_proto'
|
4
|
+
require 'cisco_acl_intp/acespec_port_opr'
|
5
5
|
|
6
6
|
module CiscoAclIntp
|
7
7
|
# IP(TCP/UDP) port number and operator container
|
8
|
-
class AcePortSpec <
|
8
|
+
class AcePortSpec < AceSpecBase
|
9
9
|
extend Forwardable
|
10
10
|
|
11
11
|
# @return [AcePortOperatorBase] value Port-set operator
|
@@ -32,7 +32,7 @@ module CiscoAclIntp
|
|
32
32
|
@options = opts
|
33
33
|
define_operator_and_ports
|
34
34
|
else
|
35
|
-
|
35
|
+
raise AclArgumentError, 'Not specified port operator'
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -61,21 +61,18 @@ module CiscoAclIntp
|
|
61
61
|
lt: AcePortOpLt,
|
62
62
|
gt: AcePortOpGt,
|
63
63
|
range: AcePortOpRange
|
64
|
-
}
|
64
|
+
}.freeze
|
65
65
|
|
66
66
|
# Set instance variables
|
67
67
|
# @raise [AclArgumentError]
|
68
68
|
# @return [AcePortOperatorBase] Port set operator object.
|
69
69
|
def define_operator_and_ports
|
70
70
|
opr = @options.key?(:operator) ? @options[:operator].intern : :any
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
else
|
77
|
-
fail AclArgumentError, 'Unknown operator'
|
78
|
-
end
|
71
|
+
raise AclArgumentError, 'Unknown operator' unless OPERATOR_CLASS.key?(opr)
|
72
|
+
@operator = OPERATOR_CLASS[opr].new(
|
73
|
+
(@options[:port] || @options[:begin_port]),
|
74
|
+
@options[:end_port]
|
75
|
+
)
|
79
76
|
end
|
80
77
|
end
|
81
78
|
end # module
|
@@ -1,21 +1,21 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
require 'cisco_acl_intp/
|
2
|
+
require 'cisco_acl_intp/acespec_port_opr_base'
|
3
3
|
|
4
4
|
module CiscoAclIntp
|
5
5
|
# ANY operator class
|
6
6
|
class AcePortOpAny < AceUnaryOpBase
|
7
7
|
# Constructor
|
8
|
-
def initialize(*
|
8
|
+
def initialize(*_args)
|
9
9
|
@begin_port = nil
|
10
10
|
@end_port = nil
|
11
11
|
@operator = :any
|
12
12
|
end
|
13
13
|
|
14
|
-
#
|
15
|
-
# @param [
|
14
|
+
# ANY contains other_port? (always true)
|
15
|
+
# @param [AcePortOperatorBase] _other Another operator
|
16
16
|
# @return [Boolean]
|
17
|
-
def contains?(
|
18
|
-
|
17
|
+
def contains?(_other)
|
18
|
+
true
|
19
19
|
end
|
20
20
|
|
21
21
|
# Generate string for Cisco IOS access list
|
@@ -26,7 +26,7 @@ module CiscoAclIntp
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
#
|
29
|
+
# STRICT-ANY operator class
|
30
30
|
class AcePortOpStrictAny < AcePortOpAny
|
31
31
|
# Constructor
|
32
32
|
def initialize(*args)
|
@@ -34,8 +34,8 @@ module CiscoAclIntp
|
|
34
34
|
@operator = :strict_any
|
35
35
|
end
|
36
36
|
|
37
|
-
#
|
38
|
-
# @param [
|
37
|
+
# STRICT_ANY contains other_port?
|
38
|
+
# @param [AcePortOperatorBase] other Another operator
|
39
39
|
# @return [Boolean]
|
40
40
|
def contains?(other)
|
41
41
|
case other
|
@@ -55,16 +55,11 @@ module CiscoAclIntp
|
|
55
55
|
@operator = :eq
|
56
56
|
end
|
57
57
|
|
58
|
-
#
|
59
|
-
# @param [
|
58
|
+
# EQ contains EQ?
|
59
|
+
# @param [AcePortOpEq] other Another operator
|
60
60
|
# @return [Boolean]
|
61
|
-
def
|
62
|
-
|
63
|
-
when AcePortOpEq
|
64
|
-
other.port == @begin_port
|
65
|
-
else
|
66
|
-
contains_default(other)
|
67
|
-
end
|
61
|
+
def contains_eq?(other)
|
62
|
+
other.port == @begin_port
|
68
63
|
end
|
69
64
|
end
|
70
65
|
|
@@ -78,38 +73,38 @@ module CiscoAclIntp
|
|
78
73
|
|
79
74
|
private
|
80
75
|
|
81
|
-
#
|
82
|
-
# @param [
|
76
|
+
# NEQ contains EQ?
|
77
|
+
# @param [AcePortOpEq] other Another operator
|
83
78
|
# @return [Boolean]
|
84
|
-
def
|
79
|
+
def contains_eq?(other)
|
85
80
|
other.port != @begin_port
|
86
81
|
end
|
87
82
|
|
88
|
-
#
|
89
|
-
# @param [
|
83
|
+
# NEQ contains NEQ?
|
84
|
+
# @param [AcePortOpNeq] other Another operator
|
90
85
|
# @return [Boolean]
|
91
|
-
def
|
86
|
+
def contains_neq?(other)
|
92
87
|
other.port == @begin_port
|
93
88
|
end
|
94
89
|
|
95
|
-
#
|
96
|
-
# @param [
|
90
|
+
# NEQ contains LT?
|
91
|
+
# @param [AcePortOpLt] other Another operator
|
97
92
|
# @return [Boolean]
|
98
|
-
def
|
93
|
+
def contains_lt?(other)
|
99
94
|
other.port <= @begin_port
|
100
95
|
end
|
101
96
|
|
102
|
-
#
|
103
|
-
# @param [
|
97
|
+
# NEQ contains GT?
|
98
|
+
# @param [AcePortOpGt] other Another operator
|
104
99
|
# @return [Boolean]
|
105
|
-
def
|
100
|
+
def contains_gt?(other)
|
106
101
|
@begin_port <= other.port
|
107
102
|
end
|
108
103
|
|
109
|
-
#
|
110
|
-
# @param [
|
104
|
+
# NEQ contains RANGE?
|
105
|
+
# @param [AcePortOpRange] other Another operator
|
111
106
|
# @return [Boolean]
|
112
|
-
def
|
107
|
+
def contains_range?(other)
|
113
108
|
other.end_port < @begin_port || @begin_port < other.begin_port
|
114
109
|
end
|
115
110
|
end
|
@@ -124,31 +119,31 @@ module CiscoAclIntp
|
|
124
119
|
|
125
120
|
private
|
126
121
|
|
127
|
-
#
|
128
|
-
# @param [
|
122
|
+
# LT contains EQ?
|
123
|
+
# @param [AcePortOpEq] other Another operator
|
129
124
|
# @return [Boolean]
|
130
|
-
def
|
125
|
+
def contains_eq?(other)
|
131
126
|
other.port < @begin_port
|
132
127
|
end
|
133
128
|
|
134
|
-
#
|
135
|
-
# @param [
|
129
|
+
# LT contains NEQ?
|
130
|
+
# @param [AcePortOpNeq] other Another operator
|
136
131
|
# @return [Boolean]
|
137
|
-
def
|
132
|
+
def contains_neq?(other)
|
138
133
|
other.port.max? && @begin_port.max?
|
139
134
|
end
|
140
135
|
|
141
|
-
#
|
142
|
-
# @param [
|
136
|
+
# LT contains LT?
|
137
|
+
# @param [AcePortOpLt] other Another operator
|
143
138
|
# @return [Boolean]
|
144
|
-
def
|
139
|
+
def contains_lt?(other)
|
145
140
|
other.port <= @begin_port
|
146
141
|
end
|
147
142
|
|
148
|
-
#
|
149
|
-
# @param [
|
143
|
+
# LT contains RANGE?
|
144
|
+
# @param [AcePortOpRange] other Another operator
|
150
145
|
# @return [Boolean]
|
151
|
-
def
|
146
|
+
def contains_range?(other)
|
152
147
|
other.end_port < @begin_port
|
153
148
|
end
|
154
149
|
end
|
@@ -163,31 +158,31 @@ module CiscoAclIntp
|
|
163
158
|
|
164
159
|
private
|
165
160
|
|
166
|
-
#
|
167
|
-
# @param [
|
161
|
+
# GT contains EQ?
|
162
|
+
# @param [AcePortOpEq] other Another operator
|
168
163
|
# @return [Boolean]
|
169
|
-
def
|
164
|
+
def contains_eq?(other)
|
170
165
|
@begin_port < other.port
|
171
166
|
end
|
172
167
|
|
173
|
-
#
|
174
|
-
# @param [
|
168
|
+
# GT contains NEQ?
|
169
|
+
# @param [AcePortOpNeq] other Another operator
|
175
170
|
# @return [Boolean]
|
176
|
-
def
|
171
|
+
def contains_neq?(other)
|
177
172
|
@begin_port.min? && other.port.min?
|
178
173
|
end
|
179
174
|
|
180
|
-
#
|
181
|
-
# @param [
|
175
|
+
# GT contains GT?
|
176
|
+
# @param [AcePortOpGt] other Another operator
|
182
177
|
# @return [Boolean]
|
183
|
-
def
|
178
|
+
def contains_gt?(other)
|
184
179
|
@begin_port <= other.port
|
185
180
|
end
|
186
181
|
|
187
|
-
#
|
188
|
-
# @param [
|
182
|
+
# GT contains RANGE?
|
183
|
+
# @param [AcePortOperatorBase] other Another operator
|
189
184
|
# @return [Boolean]
|
190
|
-
def
|
185
|
+
def contains_range?(other)
|
191
186
|
@begin_port < other.begin_port
|
192
187
|
end
|
193
188
|
end
|
@@ -198,46 +193,53 @@ module CiscoAclIntp
|
|
198
193
|
def initialize(*args)
|
199
194
|
super
|
200
195
|
unless @begin_port < @end_port
|
201
|
-
|
196
|
+
raise AclArgumentError, 'Invalid port sequence'
|
202
197
|
end
|
203
198
|
@operator = :range
|
204
199
|
end
|
205
200
|
|
206
201
|
private
|
207
202
|
|
208
|
-
#
|
209
|
-
# @param [
|
203
|
+
# RANGE contains ANY?
|
204
|
+
# @param [AcePortOpAny] _other Another operator
|
205
|
+
# @return [Boolean]
|
206
|
+
def contains_any?(_other)
|
207
|
+
@begin_port.min? && @end_port.max?
|
208
|
+
end
|
209
|
+
|
210
|
+
# RANGE contains EQ?
|
211
|
+
# @param [AcePortOpEq] other Another operator
|
210
212
|
# @return [Boolean]
|
211
|
-
def
|
213
|
+
def contains_eq?(other)
|
212
214
|
@begin_port <= other.port && other.port <= @end_port
|
213
215
|
end
|
214
216
|
|
215
|
-
#
|
216
|
-
# @param [
|
217
|
+
# RANGE contains NEQ?
|
218
|
+
# @param [AcePortOpNeq] other Another operator
|
217
219
|
# @return [Boolean]
|
218
|
-
def
|
220
|
+
def contains_neq?(other)
|
219
221
|
@begin_port.min? && @end_port.max? &&
|
220
222
|
(other.port.min? || other.port.max?)
|
221
223
|
end
|
222
224
|
|
223
|
-
#
|
224
|
-
# @param [
|
225
|
+
# RANGE contains LT?
|
226
|
+
# @param [AcePortOpLt] other Another operator
|
225
227
|
# @return [Boolean]
|
226
|
-
def
|
228
|
+
def contains_lt?(other)
|
227
229
|
@begin_port.min? && other.port < @end_port
|
228
230
|
end
|
229
231
|
|
230
|
-
#
|
231
|
-
# @param [
|
232
|
+
# RANGE contains GT?
|
233
|
+
# @param [AcePortOpGt] other Another operator
|
232
234
|
# @return [Boolean]
|
233
|
-
def
|
235
|
+
def contains_gt?(other)
|
234
236
|
@begin_port < other.port && @end_port.max?
|
235
237
|
end
|
236
238
|
|
237
|
-
#
|
238
|
-
# @param [
|
239
|
+
# RANGE contains RANGE?
|
240
|
+
# @param [AcePortOpRange] other Another operator
|
239
241
|
# @return [Boolean]
|
240
|
-
def
|
242
|
+
def contains_range?(other)
|
241
243
|
@begin_port <= other.begin_port &&
|
242
244
|
other.end_port <= @end_port
|
243
245
|
end
|