elparser 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/lib/elparser.rb +28 -4
- data/lib/elparser/version.rb +1 -1
- data/test/test-elparser.rb +22 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ccc0e2ca8395fd31246a39c426d3ecfd5ef3a4e2
|
4
|
+
data.tar.gz: 57825efa952f48a4e33dd31547cee6edcd8b4f13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39b69fc3581352fe40065a432f053f1a4c0c26275b625ab1517e712f9e2b86e6a1502a486550bb28df8adcecfee02a533b8d9a5164417b9b987622c8f9be1629
|
7
|
+
data.tar.gz: 99985731bf3b9a5b9aa072629ada53d66a0cd402537f9f719857706c1be535fc5e94ca2b5ef2aaed77433bb22132833e9cbbf398ab29f04c98eb09254b45b6c1
|
data/lib/elparser.rb
CHANGED
@@ -216,6 +216,15 @@ module Elparser
|
|
216
216
|
end
|
217
217
|
end
|
218
218
|
|
219
|
+
class ParserError < StandardError
|
220
|
+
attr_reader :message, :pos, :sample
|
221
|
+
def initialize(message, pos, sample)
|
222
|
+
@message = message
|
223
|
+
@pos = pos
|
224
|
+
@sample = sample
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
219
228
|
# parser class for
|
220
229
|
class Parser
|
221
230
|
|
@@ -226,6 +235,10 @@ module Elparser
|
|
226
235
|
|
227
236
|
# parse s-expression string and return sexp objects.
|
228
237
|
def parse(str)
|
238
|
+
if str.nil? || str == ""
|
239
|
+
raise ParserError.new("Empty input",0,"")
|
240
|
+
end
|
241
|
+
|
229
242
|
s = StringScanner.new str
|
230
243
|
@tokens = []
|
231
244
|
|
@@ -237,10 +250,10 @@ module Elparser
|
|
237
250
|
s.scan(/\A[a-z\-.\/_:*+=$][a-z\-.\/_:$*+=0-9]*/i) ? (@tokens << [:SYMBOL, s.matched]) :
|
238
251
|
s.scan(/\A"(([^\\"]|\\.)*)"/) ? (@tokens << [:STRING, s.matched.slice(1...-1)]) :
|
239
252
|
s.scan(/\A./) ? (a = s.matched; @tokens << [a, a]) :
|
240
|
-
(raise "
|
253
|
+
(raise ParserError.new("Scanner error",s.pos,s.peek(5)))
|
241
254
|
end
|
242
|
-
@tokens.push [false, '
|
243
|
-
|
255
|
+
@tokens.push [false, 'END']
|
256
|
+
|
244
257
|
return do_parse.map do |i|
|
245
258
|
normalize(i)
|
246
259
|
end
|
@@ -280,6 +293,17 @@ module Elparser
|
|
280
293
|
return objs.map {|obj| _encode(obj).to_s }.join(sep)
|
281
294
|
end
|
282
295
|
|
296
|
+
class EncodingError < StandardError
|
297
|
+
attr_reader :message, :object
|
298
|
+
def initialize(message, object)
|
299
|
+
@message = message
|
300
|
+
@object = object
|
301
|
+
end
|
302
|
+
def to_s
|
303
|
+
@message
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
283
307
|
private
|
284
308
|
|
285
309
|
def self._encode(arg)
|
@@ -302,7 +326,7 @@ module Elparser
|
|
302
326
|
elsif c == FalseClass then
|
303
327
|
return SExpNil.new
|
304
328
|
end
|
305
|
-
raise "Can't encode object : #{arg}"
|
329
|
+
raise EncodingError.new("Can't encode object : #{arg}", arg)
|
306
330
|
end
|
307
331
|
|
308
332
|
def self._encode_array(arg)
|
data/lib/elparser/version.rb
CHANGED
data/test/test-elparser.rb
CHANGED
@@ -190,4 +190,26 @@ class TestElparser < Test::Unit::TestCase
|
|
190
190
|
|
191
191
|
end
|
192
192
|
|
193
|
+
sub_test_case "Error" do
|
194
|
+
|
195
|
+
test "Parser Error" do
|
196
|
+
assert_raise_message "Empty input" do
|
197
|
+
@parser.parse ""
|
198
|
+
end
|
199
|
+
assert_raise_message /\$end/ do
|
200
|
+
@parser.parse "("
|
201
|
+
end
|
202
|
+
assert_raise_message /parse error on value "\)"/ do
|
203
|
+
@parser.parse ")"
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
test "Encoding Error" do
|
208
|
+
assert_raise_message /Can\'t encode object/ do
|
209
|
+
Elparser.encode Class
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
end
|
214
|
+
|
193
215
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elparser
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SAKURAI Masashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: racc
|