regexp_parser 0.3.6 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8da248406d9077139763f419cc18d846dc9f9f62
4
- data.tar.gz: 24a0dd00c5a9e4bddfc9188d1c70ccaf4ec599b5
3
+ metadata.gz: 64caf66c58a7f537eb616c36ebe39525c9977a42
4
+ data.tar.gz: abfa9f49bd37d2f03ad790244dfebf0ed6a2e6de
5
5
  SHA512:
6
- metadata.gz: 4feff69d68352e80320d745b9e0162682c15646f7747236b65a7d5cc2f8a82678083449cbb053a8e28f4df57f9bd0974c7c2715d0d7fb6c280acbe49945b9c4c
7
- data.tar.gz: 5f52cbf231bbf43241526579310a20f2c394b7090f07ffbb5181114f3c2179dce9bb1857743d231dee12d90cb7e699a48c1d0e6df56987b34683e72de7b8bce9
6
+ metadata.gz: 96b55ce29f554b59027180962f26ce6b02725142495cbd637eec47f24c7f6866f5ba676105f5f1d689c8f35fe6923e3110032737642a3bf3b92a7277b23b4ab9
7
+ data.tar.gz: edf5a0c7288a929318ce0c9451d934a992ab794fc8baf0e4ded0ad3761a65a6a8127485378033c1bdefa0447b7d07363b0dea7949a4c306495e736dabc1532aa
data/ChangeLog CHANGED
@@ -1,3 +1,9 @@
1
+ Sun Nov 20 2016 Ammar Ali <ammarabuali@gmail.com>
2
+
3
+ * Added Syntax.supported? method
4
+ * Updated ruby versions for latest releases; 2.1.10, 2.2.6, and 2.3.2
5
+ * Bumped version to 0.4.0
6
+
1
7
  Wed Jun 8 2016 Ammar Ali <ammarabuali@gmail.com>
2
8
 
3
9
  * Thanks to John Backus (https://github.com/backus):
@@ -1,7 +1,13 @@
1
1
  require File.expand_path('../syntax/tokens', __FILE__)
2
+ require File.expand_path('../syntax/base', __FILE__)
3
+ require File.expand_path('../syntax/any', __FILE__)
4
+ require File.expand_path('../syntax/versions', __FILE__)
2
5
 
3
6
  module Regexp::Syntax
4
7
 
8
+ VERSION_FORMAT = '\Aruby/\d+\.\d+(\.\d+)?\z'
9
+ VERSION_REGEXP = /#{VERSION_FORMAT}/
10
+
5
11
  class SyntaxError < StandardError
6
12
  def initialize(what)
7
13
  super what
@@ -14,205 +20,41 @@ module Regexp::Syntax
14
20
  end
15
21
  end
16
22
 
17
- class MissingSyntaxSpecError < SyntaxError
23
+ class InvalidVersionNameError < SyntaxError
18
24
  def initialize(name)
19
- super "Missing syntax specification file for '#{name}'"
25
+ super "Invalid version name '#{name}'. Expected format is '#{VERSION_FORMAT}'"
20
26
  end
21
27
  end
22
28
 
23
- class NotImplementedError < SyntaxError
24
- def initialize(syntax, type, token)
25
- super "#{syntax.class.name} does not implement: [#{type}:#{token}]"
26
- end
27
- end
28
-
29
- SYNTAX_SPEC_ROOT = File.expand_path('../syntax', __FILE__)
30
-
31
- # Loads, and instantiates an instance of the syntax specification class for
32
- # the given syntax flavor name. The special names 'any' and '*' returns a
33
- # instance of Syntax::Any. See below for more details.
29
+ # Loads and instantiates an instance of the syntax specification class for
30
+ # the given syntax version name. The special names 'any' and '*' return an
31
+ # instance of Syntax::Any.
34
32
  def self.new(name)
35
33
  return Regexp::Syntax::Any.new if
36
34
  ['*', 'any'].include?( name.to_s )
37
35
 
38
- self.load(name)
39
- self.instantiate(name)
40
- end
41
-
42
- def self.instantiate(name)
43
- case name
44
- # Ruby 1.8.x (NOTE: 1.8.6 is no longer a supported runtime,
45
- # but its regex features are still recognized.)
46
- when 'ruby/1.8.6'; syntax = Regexp::Syntax::Ruby::V186.new
47
- when 'ruby/1.8.7'; syntax = Regexp::Syntax::Ruby::V187.new
48
-
49
- # alias for the latest 1.8 implementation
50
- when 'ruby/1.8'; syntax = Regexp::Syntax::Ruby::V18.new
51
-
52
- # Ruby 1.9.x
53
- when 'ruby/1.9.1'; syntax = Regexp::Syntax::Ruby::V191.new
54
- when 'ruby/1.9.2'; syntax = Regexp::Syntax::Ruby::V192.new
55
- when 'ruby/1.9.3'; syntax = Regexp::Syntax::Ruby::V193.new
56
-
57
- # alias for the latest 1.9 implementation
58
- when 'ruby/1.9'; syntax = Regexp::Syntax::Ruby::V19.new
36
+ raise UnknownSyntaxNameError.new(name) unless supported?(name)
59
37
 
60
- # Ruby 2.0.x
61
- when 'ruby/2.0.0'; syntax = Regexp::Syntax::Ruby::V200.new
62
-
63
- # aliases for the latest 2.0 implementations
64
- when 'ruby/2.0'; syntax = Regexp::Syntax::Ruby::V20.new
65
-
66
- # Ruby 2.1.x
67
- when 'ruby/2.1.0'; syntax = Regexp::Syntax::Ruby::V210.new
68
- when 'ruby/2.1.2'; syntax = Regexp::Syntax::Ruby::V212.new
69
- when 'ruby/2.1.3'; syntax = Regexp::Syntax::Ruby::V213.new
70
- when 'ruby/2.1.4'; syntax = Regexp::Syntax::Ruby::V214.new
71
- when 'ruby/2.1.5'; syntax = Regexp::Syntax::Ruby::V215.new
72
- when 'ruby/2.1.6'; syntax = Regexp::Syntax::Ruby::V216.new
73
- when 'ruby/2.1.7'; syntax = Regexp::Syntax::Ruby::V217.new
74
- when 'ruby/2.1.8'; syntax = Regexp::Syntax::Ruby::V218.new
75
- when 'ruby/2.1.9'; syntax = Regexp::Syntax::Ruby::V219.new
76
-
77
- # aliases for the latest 2.1 implementations
78
- when 'ruby/2.1'; syntax = Regexp::Syntax::Ruby::V21.new
79
-
80
- # Ruby 2.2.x
81
- when 'ruby/2.2.0'; syntax = Regexp::Syntax::Ruby::V220.new
82
- when 'ruby/2.2.1'; syntax = Regexp::Syntax::Ruby::V221.new
83
- when 'ruby/2.2.2'; syntax = Regexp::Syntax::Ruby::V222.new
84
- when 'ruby/2.2.3'; syntax = Regexp::Syntax::Ruby::V223.new
85
- when 'ruby/2.2.4'; syntax = Regexp::Syntax::Ruby::V224.new
86
- when 'ruby/2.2.5'; syntax = Regexp::Syntax::Ruby::V225.new
87
-
88
- # aliases for the latest 2.2 implementations
89
- when 'ruby/2.2'; syntax = Regexp::Syntax::Ruby::V22.new
90
-
91
- # Ruby 2.3.x
92
- when 'ruby/2.3.0'; syntax = Regexp::Syntax::Ruby::V230.new
93
- when 'ruby/2.3.1'; syntax = Regexp::Syntax::Ruby::V231.new
94
-
95
- # alias for the latest 2.3 implementation
96
- when 'ruby/2.3'; syntax = Regexp::Syntax::Ruby::V23.new
97
-
98
- else
99
- raise UnknownSyntaxNameError.new(name)
100
- end
38
+ version_class(name).new
101
39
  end
102
40
 
103
- # Checks if the named syntax has a specification class file, and requires
104
- # it if it does. Downcases names, and adds the .rb extension if omitted.
105
- def self.load(name)
106
- full = "#{SYNTAX_SPEC_ROOT}/#{name.downcase}"
107
- full = (full[-1, 3] == '.rb') ? full : "#{full}.rb"
108
-
109
- raise MissingSyntaxSpecError.new(name) unless File.exist?(full)
110
- require full
41
+ def self.supported?(name)
42
+ VERSIONS.include?(name)
111
43
  end
112
44
 
113
- # A lookup map of supported types and tokens in a given syntax
114
- class Base
115
- def initialize
116
- @implements = {}
45
+ def self.version_class(version)
46
+ raise InvalidVersionNameError.new(version) unless
47
+ version =~ VERSION_REGEXP
117
48
 
118
- implements Token::Literal::Type, Token::Literal::All
119
- implements Token::FreeSpace::Type, Token::FreeSpace::All
120
- end
121
-
122
- def implementation
123
- @implements
124
- end
125
-
126
- def implements(type, tokens)
127
- if @implements[type]
128
- @implements[type] = (@implements[type] + tokens).uniq
129
- else
130
- @implements[type] = tokens
131
- end
132
- end
49
+ version_const_name = version.scan(/\d+/).join
133
50
 
134
- # removes
135
- def excludes(type, tokens)
136
- if tokens
137
- tokens = [tokens] unless tokens.is_a?(Array)
138
- end
51
+ const_name = "Regexp::Syntax::Ruby::V#{version_const_name}"
139
52
 
140
- if @implements[type]
141
- if tokens
142
- @implements[type] = @implements[type] - tokens
143
- @implements[type] = nil if @implements[type].empty?
144
- else
145
- @implements[type] = nil
146
- end
147
- end
53
+ if RUBY_VERSION >= '2.0.0'
54
+ Kernel.const_get(const_name)
55
+ else
56
+ Object.module_eval(const_name, __FILE__, __LINE__)
148
57
  end
149
-
150
- def implements?(type, token)
151
- return true if @implements[type] and @implements[type].include?(token)
152
- false
153
- end
154
- alias :check? :implements?
155
-
156
- def implements!(type, token)
157
- raise NotImplementedError.new(self, type, token) unless
158
- implements?(type, token)
159
- end
160
- alias :check! :implements!
161
-
162
- def normalize(type, token)
163
- case type
164
- when :group
165
- normalize_group(type, token)
166
- when :backref
167
- normalize_backref(type, token)
168
- else
169
- [type, token]
170
- end
171
- end
172
-
173
- def normalize_group(type, token)
174
- case token
175
- when :named_ab, :named_sq
176
- [:group, :named]
177
- else
178
- [type, token]
179
- end
180
- end
181
-
182
- def normalize_backref(type, token)
183
- case token
184
- when :name_ref_ab, :name_ref_sq
185
- [:backref, :name_ref]
186
- when :name_call_ab, :name_call_sq
187
- [:backref, :name_call]
188
- when :name_nest_ref_ab, :name_nest_ref_sq
189
- [:backref, :name_nest_ref]
190
- when :number_ref_ab, :number_ref_sq
191
- [:backref, :number_ref]
192
- when :number_call_ab, :number_call_sq
193
- [:backref, :number_call]
194
- when :number_rel_ref_ab, :number_rel_ref_sq
195
- [:backref, :number_rel_ref]
196
- when :number_rel_call_ab, :number_rel_call_sq
197
- [:backref, :number_rel_call]
198
- when :number_nest_ref_ab, :number_nest_ref_sq
199
- [:backref, :number_nest_ref]
200
- else
201
- [type, token]
202
- end
203
- end
204
- end
205
-
206
- # A syntax that always returns true, passing all tokens as implemented. This
207
- # is useful during development, testing, and should be useful for some types
208
- # of transformations as well.
209
- class Any < Base
210
- def initialize
211
- @implements = { :* => [:*] }
212
- end
213
-
214
- def implements?(type, token) true end
215
- def implements!(type, token) true end
216
58
  end
217
59
 
218
60
  end
@@ -0,0 +1,15 @@
1
+ module Regexp::Syntax
2
+
3
+ # A syntax that always returns true, passing all tokens as implemented. This
4
+ # is useful during development, testing, and should be useful for some types
5
+ # of transformations as well.
6
+ class Any < Base
7
+ def initialize
8
+ @implements = { :* => [:*] }
9
+ end
10
+
11
+ def implements?(type, token) true end
12
+ def implements!(type, token) true end
13
+ end
14
+
15
+ end
@@ -0,0 +1,102 @@
1
+ module Regexp::Syntax
2
+
3
+ class NotImplementedError < SyntaxError
4
+ def initialize(syntax, type, token)
5
+ super "#{syntax.class.name} does not implement: [#{type}:#{token}]"
6
+ end
7
+ end
8
+
9
+ # A lookup map of supported types and tokens in a given syntax
10
+ class Base
11
+ def initialize
12
+ @implements = {}
13
+
14
+ implements Token::Literal::Type, Token::Literal::All
15
+ implements Token::FreeSpace::Type, Token::FreeSpace::All
16
+ end
17
+
18
+ def implementation
19
+ @implements
20
+ end
21
+
22
+ def implements(type, tokens)
23
+ if @implements[type]
24
+ @implements[type] = (@implements[type] + tokens).uniq
25
+ else
26
+ @implements[type] = tokens
27
+ end
28
+ end
29
+
30
+ # removes
31
+ def excludes(type, tokens)
32
+ if tokens
33
+ tokens = [tokens] unless tokens.is_a?(Array)
34
+ end
35
+
36
+ if @implements[type]
37
+ if tokens
38
+ @implements[type] = @implements[type] - tokens
39
+ @implements[type] = nil if @implements[type].empty?
40
+ else
41
+ @implements[type] = nil
42
+ end
43
+ end
44
+ end
45
+
46
+ def implements?(type, token)
47
+ return true if @implements[type] and @implements[type].include?(token)
48
+ false
49
+ end
50
+ alias :check? :implements?
51
+
52
+ def implements!(type, token)
53
+ raise NotImplementedError.new(self, type, token) unless
54
+ implements?(type, token)
55
+ end
56
+ alias :check! :implements!
57
+
58
+ def normalize(type, token)
59
+ case type
60
+ when :group
61
+ normalize_group(type, token)
62
+ when :backref
63
+ normalize_backref(type, token)
64
+ else
65
+ [type, token]
66
+ end
67
+ end
68
+
69
+ def normalize_group(type, token)
70
+ case token
71
+ when :named_ab, :named_sq
72
+ [:group, :named]
73
+ else
74
+ [type, token]
75
+ end
76
+ end
77
+
78
+ def normalize_backref(type, token)
79
+ case token
80
+ when :name_ref_ab, :name_ref_sq
81
+ [:backref, :name_ref]
82
+ when :name_call_ab, :name_call_sq
83
+ [:backref, :name_call]
84
+ when :name_nest_ref_ab, :name_nest_ref_sq
85
+ [:backref, :name_nest_ref]
86
+ when :number_ref_ab, :number_ref_sq
87
+ [:backref, :number_ref]
88
+ when :number_call_ab, :number_call_sq
89
+ [:backref, :number_call]
90
+ when :number_rel_ref_ab, :number_rel_ref_sq
91
+ [:backref, :number_rel_ref]
92
+ when :number_rel_call_ab, :number_rel_call_sq
93
+ [:backref, :number_rel_call]
94
+ when :number_nest_ref_ab, :number_nest_ref_sq
95
+ [:backref, :number_nest_ref]
96
+ else
97
+ [type, token]
98
+ end
99
+ end
100
+ end
101
+
102
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../2.1.9', __FILE__)
2
+
3
+ module Regexp::Syntax
4
+ module Ruby
5
+
6
+ class V2110 < Regexp::Syntax::Ruby::V219
7
+ def initialize
8
+ super
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -1,8 +1,8 @@
1
- require File.expand_path('../2.1.9', __FILE__)
1
+ require File.expand_path('../2.1.10', __FILE__)
2
2
 
3
3
  module Regexp::Syntax
4
4
  module Ruby
5
5
  # uses the latest 2.1 release
6
- class V21 < Regexp::Syntax::Ruby::V219; end
6
+ class V21 < Regexp::Syntax::Ruby::V2110; end
7
7
  end
8
8
  end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../2.2.5', __FILE__)
2
+
3
+ module Regexp::Syntax
4
+ module Ruby
5
+
6
+ class V226 < Regexp::Syntax::Ruby::V225
7
+ def initialize
8
+ super
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -1,8 +1,8 @@
1
- require File.expand_path('../2.2.5', __FILE__)
1
+ require File.expand_path('../2.2.6', __FILE__)
2
2
 
3
3
  module Regexp::Syntax
4
4
  module Ruby
5
5
  # uses the latest 2.2 release
6
- class V22 < Regexp::Syntax::Ruby::V225; end
6
+ class V22 < Regexp::Syntax::Ruby::V226; end
7
7
  end
8
8
  end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../2.3.1', __FILE__)
2
+
3
+ module Regexp::Syntax
4
+ module Ruby
5
+
6
+ class V232 < Regexp::Syntax::Ruby::V231
7
+ def initialize
8
+ super
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -1,8 +1,8 @@
1
- require File.expand_path('../2.3.1', __FILE__)
1
+ require File.expand_path('../2.3.2', __FILE__)
2
2
 
3
3
  module Regexp::Syntax
4
4
  module Ruby
5
5
  # uses the latest 2.3 release
6
- class V23 < Regexp::Syntax::Ruby::V231; end
6
+ class V23 < Regexp::Syntax::Ruby::V232; end
7
7
  end
8
8
  end
@@ -0,0 +1,66 @@
1
+ module Regexp::Syntax
2
+
3
+ VERSIONS = [
4
+ # Ruby 1.8.x (NOTE: 1.8.6 is no longer a supported runtime,
5
+ # but its regex features are still recognized.)
6
+ 'ruby/1.8.6',
7
+ 'ruby/1.8.7',
8
+
9
+ # alias for the latest 1.8 implementation
10
+ 'ruby/1.8',
11
+
12
+ # Ruby 1.9.x
13
+ 'ruby/1.9.1',
14
+ 'ruby/1.9.2',
15
+ 'ruby/1.9.3',
16
+
17
+ # alias for the latest 1.9 implementation
18
+ 'ruby/1.9',
19
+
20
+ # Ruby 2.0.x
21
+ 'ruby/2.0.0',
22
+
23
+ # alias for the latest 2.0 implementations
24
+ 'ruby/2.0',
25
+
26
+ # Ruby 2.1.x
27
+ 'ruby/2.1.0',
28
+ 'ruby/2.1.2',
29
+ 'ruby/2.1.3',
30
+ 'ruby/2.1.4',
31
+ 'ruby/2.1.5',
32
+ 'ruby/2.1.6',
33
+ 'ruby/2.1.7',
34
+ 'ruby/2.1.8',
35
+ 'ruby/2.1.9',
36
+ 'ruby/2.1.10',
37
+
38
+ # alias for the latest 2.1 implementations
39
+ 'ruby/2.1',
40
+
41
+ # Ruby 2.2.x
42
+ 'ruby/2.2.0',
43
+ 'ruby/2.2.1',
44
+ 'ruby/2.2.2',
45
+ 'ruby/2.2.3',
46
+ 'ruby/2.2.4',
47
+ 'ruby/2.2.5',
48
+ 'ruby/2.2.6',
49
+
50
+ # alias for the latest 2.2 implementations
51
+ 'ruby/2.2',
52
+
53
+ # Ruby 2.3.x
54
+ 'ruby/2.3.0',
55
+ 'ruby/2.3.1',
56
+ 'ruby/2.3.2',
57
+
58
+ # alias for the latest 2.3 implementation
59
+ 'ruby/2.3',
60
+ ]
61
+
62
+ end
63
+
64
+ Regexp::Syntax::VERSIONS.each do |version|
65
+ require File.expand_path("../#{version}", __FILE__)
66
+ end
@@ -1,5 +1,5 @@
1
1
  class Regexp
2
2
  module Parser
3
- VERSION = '0.3.6'
3
+ VERSION = '0.4.0'
4
4
  end
5
5
  end
@@ -118,10 +118,17 @@ class TestSyntaxFiles < Test::Unit::TestCase
118
118
  assert syntax.kind_of?(Regexp::Syntax::Ruby::V219)
119
119
  end
120
120
 
121
+ def test_syntax_file_2_1_10
122
+ syntax = Regexp::Syntax.new 'ruby/2.1.10'
123
+
124
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V219)
125
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V2110)
126
+ end
127
+
121
128
  def test_syntax_file_2_1_alias
122
129
  syntax = Regexp::Syntax.new 'ruby/2.1'
123
130
 
124
- assert syntax.kind_of?(Regexp::Syntax::Ruby::V219)
131
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V2110)
125
132
  end
126
133
 
127
134
 
@@ -163,10 +170,17 @@ class TestSyntaxFiles < Test::Unit::TestCase
163
170
  assert syntax.kind_of?(Regexp::Syntax::Ruby::V225)
164
171
  end
165
172
 
173
+ def test_syntax_file_2_2_6
174
+ syntax = Regexp::Syntax.new 'ruby/2.2.6'
175
+
176
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V225)
177
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V226)
178
+ end
179
+
166
180
  def test_syntax_file_2_2_alias
167
181
  syntax = Regexp::Syntax.new 'ruby/2.2'
168
182
 
169
- assert syntax.kind_of?(Regexp::Syntax::Ruby::V225)
183
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V226)
170
184
  end
171
185
 
172
186
  # 2.3 syntax files
@@ -184,9 +198,16 @@ class TestSyntaxFiles < Test::Unit::TestCase
184
198
  assert syntax.kind_of?(Regexp::Syntax::Ruby::V231)
185
199
  end
186
200
 
201
+ def test_syntax_file_2_3_2
202
+ syntax = Regexp::Syntax.new 'ruby/2.3.2'
203
+
204
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V231)
205
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V232)
206
+ end
207
+
187
208
  def test_syntax_file_2_3_alias
188
209
  syntax = Regexp::Syntax.new 'ruby/2.3'
189
210
 
190
- assert syntax.kind_of?(Regexp::Syntax::Ruby::V231)
211
+ assert syntax.kind_of?(Regexp::Syntax::Ruby::V232)
191
212
  end
192
213
  end
@@ -1,25 +1,4 @@
1
1
  require File.expand_path("../../helpers", __FILE__)
2
2
 
3
+ require File.expand_path("../test_syntax", __FILE__)
3
4
  require File.expand_path("../ruby/test_all", __FILE__)
4
-
5
- class TestSyntax < Test::Unit::TestCase
6
-
7
- def test_syntax_unknown_name
8
- assert_raise( Regexp::Syntax::UnknownSyntaxNameError ) {
9
- Regexp::Syntax.instantiate('ruby/1.0')
10
- }
11
- end
12
-
13
- def test_syntax_missing_spec
14
- assert_raise( Regexp::Syntax::MissingSyntaxSpecError ) {
15
- RL.scan('abc', 'ruby/1.6')
16
- }
17
- end
18
-
19
- def test_syntax_not_implemented
20
- assert_raise( Regexp::Syntax::NotImplementedError ) {
21
- RP.parse('\p{alpha}', 'ruby/1.8')
22
- }
23
- end
24
-
25
- end
@@ -0,0 +1,56 @@
1
+ require File.expand_path("../../helpers", __FILE__)
2
+
3
+ class TestSyntax < Test::Unit::TestCase
4
+
5
+ def test_syntax_unknown_name
6
+ assert_raise( Regexp::Syntax::UnknownSyntaxNameError ) {
7
+ Regexp::Syntax.new('ruby/1.0')
8
+ }
9
+ end
10
+
11
+ def test_syntax_new
12
+ assert_instance_of Regexp::Syntax::Ruby::V193,
13
+ Regexp::Syntax.new('ruby/1.9.3')
14
+ end
15
+
16
+ def test_syntax_not_implemented
17
+ assert_raise( Regexp::Syntax::NotImplementedError ) {
18
+ RP.parse('\p{alpha}', 'ruby/1.8')
19
+ }
20
+ end
21
+
22
+ def test_syntax_supported?
23
+ assert_equal false, Regexp::Syntax.supported?('ruby/1.1.1')
24
+
25
+ Regexp::Syntax::VERSIONS.each do |version|
26
+ assert_equal true, Regexp::Syntax.supported?(version)
27
+ end
28
+ end
29
+
30
+ def test_syntax_invalid_version
31
+ assert_raise( Regexp::Syntax::InvalidVersionNameError ) {
32
+ Regexp::Syntax.version_class('2.0.0')
33
+ }
34
+
35
+ assert_raise( Regexp::Syntax::InvalidVersionNameError ) {
36
+ Regexp::Syntax.version_class('ruby/20')
37
+ }
38
+ end
39
+
40
+ def test_syntax_version_class_tiny_version
41
+ assert_equal Regexp::Syntax::Ruby::V193,
42
+ Regexp::Syntax.version_class('ruby/1.9.3')
43
+
44
+ assert_equal Regexp::Syntax::Ruby::V231,
45
+ Regexp::Syntax.version_class('ruby/2.3.1')
46
+ end
47
+
48
+ def test_syntax_version_class_minor_version
49
+ assert_equal Regexp::Syntax::Ruby::V19,
50
+ Regexp::Syntax.version_class('ruby/1.9')
51
+
52
+ assert_equal Regexp::Syntax::Ruby::V23,
53
+ Regexp::Syntax.version_class('ruby/2.3')
54
+ end
55
+
56
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: regexp_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ammar Ali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-08 00:00:00.000000000 Z
11
+ date: 2016-11-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A library for tokenizing, lexing, and parsing Ruby regular expressions.
14
14
  email:
@@ -49,6 +49,8 @@ files:
49
49
  - lib/regexp_parser/scanner/property.rl
50
50
  - lib/regexp_parser/scanner/scanner.rl
51
51
  - lib/regexp_parser/syntax.rb
52
+ - lib/regexp_parser/syntax/any.rb
53
+ - lib/regexp_parser/syntax/base.rb
52
54
  - lib/regexp_parser/syntax/ruby/1.8.6.rb
53
55
  - lib/regexp_parser/syntax/ruby/1.8.7.rb
54
56
  - lib/regexp_parser/syntax/ruby/1.8.rb
@@ -59,6 +61,7 @@ files:
59
61
  - lib/regexp_parser/syntax/ruby/2.0.0.rb
60
62
  - lib/regexp_parser/syntax/ruby/2.0.rb
61
63
  - lib/regexp_parser/syntax/ruby/2.1.0.rb
64
+ - lib/regexp_parser/syntax/ruby/2.1.10.rb
62
65
  - lib/regexp_parser/syntax/ruby/2.1.2.rb
63
66
  - lib/regexp_parser/syntax/ruby/2.1.3.rb
64
67
  - lib/regexp_parser/syntax/ruby/2.1.4.rb
@@ -74,9 +77,11 @@ files:
74
77
  - lib/regexp_parser/syntax/ruby/2.2.3.rb
75
78
  - lib/regexp_parser/syntax/ruby/2.2.4.rb
76
79
  - lib/regexp_parser/syntax/ruby/2.2.5.rb
80
+ - lib/regexp_parser/syntax/ruby/2.2.6.rb
77
81
  - lib/regexp_parser/syntax/ruby/2.2.rb
78
82
  - lib/regexp_parser/syntax/ruby/2.3.0.rb
79
83
  - lib/regexp_parser/syntax/ruby/2.3.1.rb
84
+ - lib/regexp_parser/syntax/ruby/2.3.2.rb
80
85
  - lib/regexp_parser/syntax/ruby/2.3.rb
81
86
  - lib/regexp_parser/syntax/tokens.rb
82
87
  - lib/regexp_parser/syntax/tokens/anchor.rb
@@ -91,6 +96,7 @@ files:
91
96
  - lib/regexp_parser/syntax/tokens/meta.rb
92
97
  - lib/regexp_parser/syntax/tokens/quantifier.rb
93
98
  - lib/regexp_parser/syntax/tokens/unicode_property.rb
99
+ - lib/regexp_parser/syntax/versions.rb
94
100
  - lib/regexp_parser/token.rb
95
101
  - lib/regexp_parser/version.rb
96
102
  - regexp_parser.gemspec
@@ -155,6 +161,7 @@ files:
155
161
  - test/syntax/ruby/test_all.rb
156
162
  - test/syntax/ruby/test_files.rb
157
163
  - test/syntax/test_all.rb
164
+ - test/syntax/test_syntax.rb
158
165
  - test/test_all.rb
159
166
  - test/token/test_all.rb
160
167
  - test/token/test_token.rb
@@ -247,6 +254,7 @@ test_files:
247
254
  - test/syntax/ruby/test_all.rb
248
255
  - test/syntax/ruby/test_files.rb
249
256
  - test/syntax/test_all.rb
257
+ - test/syntax/test_syntax.rb
250
258
  - test/test_all.rb
251
259
  - test/token/test_all.rb
252
260
  - test/token/test_token.rb