elparser 0.0.3 → 0.0.4

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: c46cda5b6979d0d53eb8871d00f31c8fd00488e2
4
- data.tar.gz: a25c9a3a14e70d18fa006a99ac26be7bb0830dd9
3
+ metadata.gz: ccc0e2ca8395fd31246a39c426d3ecfd5ef3a4e2
4
+ data.tar.gz: 57825efa952f48a4e33dd31547cee6edcd8b4f13
5
5
  SHA512:
6
- metadata.gz: ef81f3be2cfd6d718ea7274f8455a9d819afca7d3368a3821bef185747e6f7c7f12452d724831888af3ae8599913afb2ac17d8662445e0f8c1a6d996dd220cae
7
- data.tar.gz: c55ee9e094eb10d004514167a1a3ebb361d60bdf754eb0bc9fe9cbf8a8915b5adfdc08c33aa6e8101193d96d142c092b624ca1df618eb98165c52cef78fa586c
6
+ metadata.gz: 39b69fc3581352fe40065a432f053f1a4c0c26275b625ab1517e712f9e2b86e6a1502a486550bb28df8adcecfee02a533b8d9a5164417b9b987622c8f9be1629
7
+ data.tar.gz: 99985731bf3b9a5b9aa072629ada53d66a0cd402537f9f719857706c1be535fc5e94ca2b5ef2aaed77433bb22132833e9cbbf398ab29f04c98eb09254b45b6c1
@@ -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 "scanner error")
253
+ (raise ParserError.new("Scanner error",s.pos,s.peek(5)))
241
254
  end
242
- @tokens.push [false, '$end']
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)
@@ -1,3 +1,3 @@
1
1
  module Elparser
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -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.3
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-12 00:00:00.000000000 Z
11
+ date: 2015-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: racc