stdlib/json.rb in opal-1.7.4 vs stdlib/json.rb in opal-1.8.0.alpha1

- old
+ new

@@ -1,5 +1,7 @@ +# backtick_javascript: true + module JSON class JSONError < StandardError end class ParserError < JSONError @@ -34,28 +36,28 @@ case 'object': if (!value) return nil; if (value.$$is_array) { - arr = #{`options.array_class`.new}; + arr = #{`Opal.hash_get(options, 'array_class')`.new}; for (i = 0, ii = value.length; i < ii; i++) { #{`arr`.push(`to_opal(value[i], options)`)}; } return arr; } else { - hash = #{`options.object_class`.new}; + hash = #{`Opal.hash_get(options, 'object_class')`.new}; for (k in value) { if ($hasOwn.call(value, k)) { #{`hash`[`k`] = `to_opal(value[k], options)`}; } } - if (!options.parse && (klass = #{`hash`[JSON.create_id]}) != nil) { + if (!Opal.hash_get(options, 'parse') && (klass = #{`hash`[JSON.create_id]}) != nil) { return #{::Object.const_get(`klass`).json_create(`hash`)}; } else { return hash; } @@ -93,11 +95,11 @@ # Raw js object => opal object def self.from_object(js_object, options = {}) options[:object_class] ||= Hash options[:array_class] ||= Array - `to_opal(js_object, options.$$smap)` + `to_opal(js_object, options)` end def self.generate(obj, options = {}) obj.to_json(options) end @@ -153,21 +155,13 @@ class Hash def to_json %x{ var result = []; - for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) { - key = keys[i]; - - if (key.$$is_string) { - value = self.$$smap[key]; - } else { - value = key.value; - key = key.key; - } - + Opal.hash_each(self, false, function(key, value) { result.push(#{`key`.to_s.to_json} + ':' + #{`value`.to_json}); - } + return [false, false]; + }); return '{' + result.join(',') + '}'; } end end