diff options
author | Florian Frank <flori@ping.de> | 2010-10-05 11:00:09 +0200 |
---|---|---|
committer | Florian Frank <flori@ping.de> | 2011-01-02 21:13:46 +0100 |
commit | 8714f0a88ccee67ea7ca1a9d5a40d9cf1c6dd5fb (patch) | |
tree | 9f1d194336debc54896944b80bbf3bbea44eb4dd /lib | |
parent | 02b20b1ec02513b7452e8585c6d45cbe565418d2 (diff) | |
download | json-8714f0a88ccee67ea7ca1a9d5a40d9cf1c6dd5fb.tar.gz |
Added matching in pure/ext parser
Diffstat (limited to 'lib')
-rw-r--r-- | lib/json/pure/parser.rb | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/lib/json/pure/parser.rb b/lib/json/pure/parser.rb index 82a21e8..cb531f4 100644 --- a/lib/json/pure/parser.rb +++ b/lib/json/pure/parser.rb @@ -113,13 +113,13 @@ module JSON else @max_nesting = 0 end - @allow_nan = !!opts[:allow_nan] - @symbolize_names = !!opts[:symbolize_names] - ca = true - ca = opts[:create_additions] if opts.key?(:create_additions) - @create_id = ca ? JSON.create_id : nil - @object_class = opts[:object_class] || Hash - @array_class = opts[:array_class] || Array + @allow_nan = !!opts[:allow_nan] + @symbolize_names = !!opts[:symbolize_names] + @create_additions = opts.key?(:create_additions) ? !!opts[:create_additions] : true + @create_id = opts[:create_id] || JSON.create_id + @object_class = opts[:object_class] || Hash + @array_class = opts[:array_class] || Array + @match = opts[:match] end alias source string @@ -189,6 +189,12 @@ module JSON if string.respond_to?(:force_encoding) string.force_encoding(::Encoding::UTF_8) end + if @create_additions and @match + for (regexp, klass) in @match + klass.json_creatable? or next + string =~ regexp and return klass.json_create(string) + end + end string else UNPARSED @@ -295,7 +301,7 @@ module JSON if delim raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!" end - if @create_id and klassname = result[@create_id] + if @create_additions and klassname = result[@create_id] klass = JSON.deep_const_get klassname break unless klass and klass.json_creatable? result = klass.json_create(result) |