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 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