Sha256: a0c3287d1c7279c84174315894105928dac08282c650cb53a7473279dc0d6964

Contents?: true

Size: 1.08 KB

Versions: 4

Compression:

Stored size: 1.08 KB

Contents

`var json_parse = JSON.parse, __hasOwn = Object.prototype.hasOwnProperty`

module JSON
  def self.parse(source)
    `return to_opal(json_parse(source));`
  end

  # Raw js object => opal object
  def self.from_object(js_object)
    `return to_opal(js_object)`
  end

  %x{
    function to_opal(value) {
      switch (typeof value) {
        case 'string':
          return value;

        case 'number':
          return value;

        case 'boolean':
          return !!value;

        case 'null':
          return nil;

        case 'object':
          if (!value) return nil;

          if (value._isArray) {
            var arr = [];

            for (var i = 0, ii = value.length; i < ii; i++) {
              arr.push(to_opal(value[i]));
            }

            return arr;
          }
          else {
            var hash = #{ {} }, v, map = hash.map;

            for (var k in value) {
              if (__hasOwn.call(value, k)) {
                v = to_opal(value[k]);
                map[k] = v;
              }
            }
          }

          return hash;
      }
    };
  }
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
opal-0.3.37 lib/assets/javascripts/opal/json.rb
opal-0.3.36 lib/assets/javascripts/opal/json.rb
opal-0.3.35 lib/assets/javascripts/opal/json.rb
opal-0.3.34 lib/assets/javascripts/opal/json.rb