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