json_pure 2.7.6 → 2.8.0
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 +4 -4
 - data/CHANGES.md +6 -2
 - data/README.md +8 -53
 - data/json_pure.gemspec +21 -38
 - data/lib/json/pure.rb +2 -14
 - metadata +18 -25
 - data/lib/json/add/bigdecimal.rb +0 -58
 - data/lib/json/add/complex.rb +0 -51
 - data/lib/json/add/core.rb +0 -12
 - data/lib/json/add/date.rb +0 -54
 - data/lib/json/add/date_time.rb +0 -67
 - data/lib/json/add/exception.rb +0 -49
 - data/lib/json/add/ostruct.rb +0 -54
 - data/lib/json/add/range.rb +0 -54
 - data/lib/json/add/rational.rb +0 -49
 - data/lib/json/add/regexp.rb +0 -48
 - data/lib/json/add/set.rb +0 -48
 - data/lib/json/add/struct.rb +0 -52
 - data/lib/json/add/symbol.rb +0 -47
 - data/lib/json/add/time.rb +0 -52
 - data/lib/json/common.rb +0 -734
 - data/lib/json/ext.rb +0 -25
 - data/lib/json/generic_object.rb +0 -75
 - data/lib/json/pure/generator.rb +0 -599
 - data/lib/json/pure/parser.rb +0 -331
 - data/lib/json/version.rb +0 -5
 - data/lib/json.rb +0 -592
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 4c79a21e52d8328f2d07a73c932b6680f2b6db7a3725ea5c84d5f73e43a90e37
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b182b612e32fb6151c245999f985bbd5b3e1fb888a168ba2e5412604f3d88a9e
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 40bdbd82974a44e90b5ac767fa2938241c18a4cd1c45b3544da9287de4326ac69d6a9affef5401bdbf856ebbff65f475ded1a10f980143b1a7d736acb446254b
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 165032b45f38308eb32cf93ca6a73357e328dc789e7ed585701c95d2d0d0e52d0b9aaddd2a44fc62b1eaebaf804fe56d07a06aa6509eed4cb72872661668fd8f
         
     | 
    
        data/CHANGES.md
    CHANGED
    
    | 
         @@ -1,8 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Changes
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            ###  
     | 
| 
      
 3 
     | 
    
         
            +
            ### UNRELEASED
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            *  
     | 
| 
      
 5 
     | 
    
         
            +
            * Emit a deprecation warning when `JSON.load` create custom types without the `create_additions` option being explictly enabled.
         
     | 
| 
      
 6 
     | 
    
         
            +
              * Prefer to use `JSON.unsafe_load(string)` or `JSON.load(string, create_additions: true)`.
         
     | 
| 
      
 7 
     | 
    
         
            +
            * Emit a deprecation warning when serializing valid UTF-8 strings encoded in `ASCII_8BIT` aka `BINARY`.
         
     | 
| 
      
 8 
     | 
    
         
            +
            * Bump required_ruby_version to 2.7.
         
     | 
| 
      
 9 
     | 
    
         
            +
            * More performance improvments to `JSON.dump` and `JSON.generate`.
         
     | 
| 
       6 
10 
     | 
    
         | 
| 
       7 
11 
     | 
    
         
             
            ### 2024-10-25 (2.7.5)
         
     | 
| 
       8 
12 
     | 
    
         | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -5,16 +5,10 @@ 
     | 
|
| 
       5 
5 
     | 
    
         
             
            ## Description
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            This is an implementation of the JSON specification according to RFC 7159
         
     | 
| 
       8 
     | 
    
         
            -
            http://www.ietf.org/rfc/rfc7159.txt . 
     | 
| 
      
 8 
     | 
    
         
            +
            http://www.ietf.org/rfc/rfc7159.txt .
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
            * The quite a bit faster native extension variant, which is in parts
         
     | 
| 
       13 
     | 
    
         
            -
              implemented in C or Java and comes with a parser generated by the [Ragel]
         
     | 
| 
       14 
     | 
    
         
            -
              state machine compiler.
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
            Both variants of the JSON generator generate UTF-8 character sequences by
         
     | 
| 
       17 
     | 
    
         
            -
            default. If an :ascii\_only option with a true value is given, they escape all
         
     | 
| 
      
 10 
     | 
    
         
            +
            The JSON generator generate UTF-8 character sequences by default.
         
     | 
| 
      
 11 
     | 
    
         
            +
            If an :ascii\_only option with a true value is given, they escape all
         
     | 
| 
       18 
12 
     | 
    
         
             
            non-ASCII and control characters with \uXXXX escape sequences, and support
         
     | 
| 
       19 
13 
     | 
    
         
             
            UTF-16 surrogate pairs in order to be able to generate the whole range of
         
     | 
| 
       20 
14 
     | 
    
         
             
            unicode code points.
         
     | 
| 
         @@ -82,50 +76,11 @@ You can also use the `pretty_generate` method (which formats the output more 
     | 
|
| 
       82 
76 
     | 
    
         
             
            verbosely and nicely) or `fast_generate` (which doesn't do any of the security
         
     | 
| 
       83 
77 
     | 
    
         
             
            checks generate performs, e. g. nesting deepness checks).
         
     | 
| 
       84 
78 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
            generate a JSON document from an array or hash:
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       89 
     | 
    
         
            -
            document = JSON 'test'  => 23 # => "{\"test\":23}"
         
     | 
| 
       90 
     | 
    
         
            -
            document = JSON['test' => 23] # => "{\"test\":23}"
         
     | 
| 
       91 
     | 
    
         
            -
            ```
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
            and
         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       96 
     | 
    
         
            -
            data = JSON '{"test":23}'  # => {"test"=>23}
         
     | 
| 
       97 
     | 
    
         
            -
            data = JSON['{"test":23}'] # => {"test"=>23}
         
     | 
| 
       98 
     | 
    
         
            -
            ```
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
            You can choose to load a set of common additions to ruby core's objects if
         
     | 
| 
       101 
     | 
    
         
            -
            you
         
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       104 
     | 
    
         
            -
            require 'json/add/core'
         
     | 
| 
       105 
     | 
    
         
            -
            ```
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
            After requiring this you can, e. g., serialise/deserialise Ruby ranges:
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       110 
     | 
    
         
            -
            JSON JSON(1..10) # => 1..10
         
     | 
| 
       111 
     | 
    
         
            -
            ```
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
            To find out how to add JSON support to other or your own classes, read the
         
     | 
| 
       114 
     | 
    
         
            -
            section "More Examples" below.
         
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
            ## Serializing exceptions
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
            The JSON module doesn't extend `Exception` by default. If you convert an `Exception`
         
     | 
| 
       119 
     | 
    
         
            -
            object to JSON, it will by default only include the exception message.
         
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
       121 
     | 
    
         
            -
            To include the full details, you must either load the `json/add/core` mentioned
         
     | 
| 
       122 
     | 
    
         
            -
            above, or specifically load the exception addition:
         
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
            ```ruby
         
     | 
| 
       125 
     | 
    
         
            -
            require 'json/add/exception'
         
     | 
| 
       126 
     | 
    
         
            -
            ```
         
     | 
| 
      
 79 
     | 
    
         
            +
            ## Handling arbitrary types
         
     | 
| 
       127 
80 
     | 
    
         | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
      
 81 
     | 
    
         
            +
            > [!CAUTION]
         
     | 
| 
      
 82 
     | 
    
         
            +
            > You should never use `JSON.unsafe_load` nor `JSON.parse(str, create_additions: true)` to parse untrusted user input,
         
     | 
| 
      
 83 
     | 
    
         
            +
            > as it can lead to remove code execution vulnerabilities.
         
     | 
| 
       129 
84 
     | 
    
         | 
| 
       130 
85 
     | 
    
         
             
            To create a JSON document from a ruby data structure, you can call
         
     | 
| 
       131 
86 
     | 
    
         
             
            `JSON.generate` like that:
         
     | 
| 
         @@ -191,7 +146,7 @@ JSON.parse json 
     | 
|
| 
       191 
146 
     | 
    
         
             
            # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
         
     | 
| 
       192 
147 
     | 
    
         
             
            json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
         
     | 
| 
       193 
148 
     | 
    
         
             
            # => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]"
         
     | 
| 
       194 
     | 
    
         
            -
            JSON. 
     | 
| 
      
 149 
     | 
    
         
            +
            JSON.unsafe_load json
         
     | 
| 
       195 
150 
     | 
    
         
             
            # => [1, 2, {"a"=>3.141}, false, true, nil, 4..10]
         
     | 
| 
       196 
151 
     | 
    
         
             
            ```
         
     | 
| 
       197 
152 
     | 
    
         | 
    
        data/json_pure.gemspec
    CHANGED
    
    | 
         @@ -1,50 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            version = File.foreach(File.join(__dir__, "lib/json/version.rb")) do |line|
         
     | 
| 
       2 
4 
     | 
    
         
             
              /^\s*VERSION\s*=\s*'(.*)'/ =~ line and break $1
         
     | 
| 
       3 
5 
     | 
    
         
             
            end rescue nil
         
     | 
| 
       4 
6 
     | 
    
         | 
| 
       5 
7 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       6 
     | 
    
         
            -
              s.name = "json_pure" 
     | 
| 
      
 8 
     | 
    
         
            +
              s.name = "json_pure"
         
     | 
| 
       7 
9 
     | 
    
         
             
              s.version = version
         
     | 
| 
       8 
10 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
              s.summary = "JSON Implementation for Ruby" 
     | 
| 
       10 
     | 
    
         
            -
              s.description = "This is a JSON implementation in pure Ruby." 
     | 
| 
       11 
     | 
    
         
            -
              s.licenses = ["Ruby" 
     | 
| 
       12 
     | 
    
         
            -
              s.authors = ["Florian Frank" 
     | 
| 
       13 
     | 
    
         
            -
              s.email = "flori@ping.de" 
     | 
| 
      
 11 
     | 
    
         
            +
              s.summary = "JSON Implementation for Ruby"
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.description = "This is a JSON implementation in pure Ruby."
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.licenses = ["Ruby"]
         
     | 
| 
      
 14 
     | 
    
         
            +
              s.authors = ["Florian Frank"]
         
     | 
| 
      
 15 
     | 
    
         
            +
              s.email = "flori@ping.de"
         
     | 
| 
       14 
16 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
              s.extra_rdoc_files = ["README.md" 
     | 
| 
       16 
     | 
    
         
            -
              s.rdoc_options = ["--title" 
     | 
| 
      
 17 
     | 
    
         
            +
              s.extra_rdoc_files = ["README.md"]
         
     | 
| 
      
 18 
     | 
    
         
            +
              s.rdoc_options = ["--title", "JSON implementation for ruby", "--main", "README.md"]
         
     | 
| 
       17 
19 
     | 
    
         
             
              s.files = [
         
     | 
| 
       18 
     | 
    
         
            -
                "CHANGES.md" 
     | 
| 
       19 
     | 
    
         
            -
                "COPYING" 
     | 
| 
       20 
     | 
    
         
            -
                "BSDL" 
     | 
| 
       21 
     | 
    
         
            -
                "LEGAL" 
     | 
| 
       22 
     | 
    
         
            -
                "README.md" 
     | 
| 
       23 
     | 
    
         
            -
                "json_pure.gemspec" 
     | 
| 
       24 
     | 
    
         
            -
                "lib/json.rb" 
     | 
| 
       25 
     | 
    
         
            -
                "lib/json/add/bigdecimal.rb".freeze,
         
     | 
| 
       26 
     | 
    
         
            -
                "lib/json/add/complex.rb".freeze,
         
     | 
| 
       27 
     | 
    
         
            -
                "lib/json/add/core.rb".freeze,
         
     | 
| 
       28 
     | 
    
         
            -
                "lib/json/add/date.rb".freeze,
         
     | 
| 
       29 
     | 
    
         
            -
                "lib/json/add/date_time.rb".freeze,
         
     | 
| 
       30 
     | 
    
         
            -
                "lib/json/add/exception.rb".freeze,
         
     | 
| 
       31 
     | 
    
         
            -
                "lib/json/add/ostruct.rb".freeze,
         
     | 
| 
       32 
     | 
    
         
            -
                "lib/json/add/range.rb".freeze,
         
     | 
| 
       33 
     | 
    
         
            -
                "lib/json/add/rational.rb".freeze,
         
     | 
| 
       34 
     | 
    
         
            -
                "lib/json/add/regexp.rb".freeze,
         
     | 
| 
       35 
     | 
    
         
            -
                "lib/json/add/set.rb".freeze,
         
     | 
| 
       36 
     | 
    
         
            -
                "lib/json/add/struct.rb".freeze,
         
     | 
| 
       37 
     | 
    
         
            -
                "lib/json/add/symbol.rb".freeze,
         
     | 
| 
       38 
     | 
    
         
            -
                "lib/json/add/time.rb".freeze,
         
     | 
| 
       39 
     | 
    
         
            -
                "lib/json/common.rb".freeze,
         
     | 
| 
       40 
     | 
    
         
            -
                "lib/json/ext.rb".freeze,
         
     | 
| 
       41 
     | 
    
         
            -
                "lib/json/generic_object.rb".freeze,
         
     | 
| 
       42 
     | 
    
         
            -
                "lib/json/pure.rb".freeze,
         
     | 
| 
       43 
     | 
    
         
            -
                "lib/json/pure/generator.rb".freeze,
         
     | 
| 
       44 
     | 
    
         
            -
                "lib/json/pure/parser.rb".freeze,
         
     | 
| 
       45 
     | 
    
         
            -
                "lib/json/version.rb".freeze,
         
     | 
| 
      
 20 
     | 
    
         
            +
                "CHANGES.md",
         
     | 
| 
      
 21 
     | 
    
         
            +
                "COPYING",
         
     | 
| 
      
 22 
     | 
    
         
            +
                "BSDL",
         
     | 
| 
      
 23 
     | 
    
         
            +
                "LEGAL",
         
     | 
| 
      
 24 
     | 
    
         
            +
                "README.md",
         
     | 
| 
      
 25 
     | 
    
         
            +
                "json_pure.gemspec",
         
     | 
| 
      
 26 
     | 
    
         
            +
                "lib/json/pure.rb",
         
     | 
| 
       46 
27 
     | 
    
         
             
              ]
         
     | 
| 
       47 
     | 
    
         
            -
              s.homepage = "https://ruby.github.io/json" 
     | 
| 
      
 28 
     | 
    
         
            +
              s.homepage = "https://ruby.github.io/json"
         
     | 
| 
       48 
29 
     | 
    
         
             
              s.metadata = {
         
     | 
| 
       49 
30 
     | 
    
         
             
                'bug_tracker_uri'   => 'https://github.com/ruby/json/issues',
         
     | 
| 
       50 
31 
     | 
    
         
             
                'changelog_uri'     => 'https://github.com/ruby/json/blob/master/CHANGES.md',
         
     | 
| 
         @@ -54,5 +35,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       54 
35 
     | 
    
         
             
                'wiki_uri'          => 'https://github.com/ruby/json/wiki'
         
     | 
| 
       55 
36 
     | 
    
         
             
              }
         
     | 
| 
       56 
37 
     | 
    
         | 
| 
       57 
     | 
    
         
            -
              s. 
     | 
| 
      
 38 
     | 
    
         
            +
              s.add_dependency "json"
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              s.required_ruby_version = Gem::Requirement.new(">= 2.7")
         
     | 
| 
       58 
41 
     | 
    
         
             
            end
         
     | 
    
        data/lib/json/pure.rb
    CHANGED
    
    | 
         @@ -1,16 +1,4 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            require 'json/common'
         
     | 
| 
       3 
2 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              # functionality in pure ruby.
         
     | 
| 
       7 
     | 
    
         
            -
              module Pure
         
     | 
| 
       8 
     | 
    
         
            -
                require 'json/pure/parser'
         
     | 
| 
       9 
     | 
    
         
            -
                require 'json/pure/generator'
         
     | 
| 
       10 
     | 
    
         
            -
                $DEBUG and warn "Using Pure library for JSON."
         
     | 
| 
       11 
     | 
    
         
            -
                JSON.parser = Parser
         
     | 
| 
       12 
     | 
    
         
            -
                JSON.generator = Generator
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     | 
| 
      
 3 
     | 
    
         
            +
            warn "`json_pure` is deprecated and has no effect, just use `json`"
         
     | 
| 
      
 4 
     | 
    
         
            +
            require "json"
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,29 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: json_pure
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.8.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Florian Frank
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2024-11- 
     | 
| 
       12 
     | 
    
         
            -
            dependencies: 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2024-11-05 00:00:00.000000000 Z
         
     | 
| 
      
 12 
     | 
    
         
            +
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: json
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       13 
27 
     | 
    
         
             
            description: This is a JSON implementation in pure Ruby.
         
     | 
| 
       14 
28 
     | 
    
         
             
            email: flori@ping.de
         
     | 
| 
       15 
29 
     | 
    
         
             
            executables: []
         
     | 
| 
         @@ -23,28 +37,7 @@ files: 
     | 
|
| 
       23 
37 
     | 
    
         
             
            - LEGAL
         
     | 
| 
       24 
38 
     | 
    
         
             
            - README.md
         
     | 
| 
       25 
39 
     | 
    
         
             
            - json_pure.gemspec
         
     | 
| 
       26 
     | 
    
         
            -
            - lib/json.rb
         
     | 
| 
       27 
     | 
    
         
            -
            - lib/json/add/bigdecimal.rb
         
     | 
| 
       28 
     | 
    
         
            -
            - lib/json/add/complex.rb
         
     | 
| 
       29 
     | 
    
         
            -
            - lib/json/add/core.rb
         
     | 
| 
       30 
     | 
    
         
            -
            - lib/json/add/date.rb
         
     | 
| 
       31 
     | 
    
         
            -
            - lib/json/add/date_time.rb
         
     | 
| 
       32 
     | 
    
         
            -
            - lib/json/add/exception.rb
         
     | 
| 
       33 
     | 
    
         
            -
            - lib/json/add/ostruct.rb
         
     | 
| 
       34 
     | 
    
         
            -
            - lib/json/add/range.rb
         
     | 
| 
       35 
     | 
    
         
            -
            - lib/json/add/rational.rb
         
     | 
| 
       36 
     | 
    
         
            -
            - lib/json/add/regexp.rb
         
     | 
| 
       37 
     | 
    
         
            -
            - lib/json/add/set.rb
         
     | 
| 
       38 
     | 
    
         
            -
            - lib/json/add/struct.rb
         
     | 
| 
       39 
     | 
    
         
            -
            - lib/json/add/symbol.rb
         
     | 
| 
       40 
     | 
    
         
            -
            - lib/json/add/time.rb
         
     | 
| 
       41 
     | 
    
         
            -
            - lib/json/common.rb
         
     | 
| 
       42 
     | 
    
         
            -
            - lib/json/ext.rb
         
     | 
| 
       43 
     | 
    
         
            -
            - lib/json/generic_object.rb
         
     | 
| 
       44 
40 
     | 
    
         
             
            - lib/json/pure.rb
         
     | 
| 
       45 
     | 
    
         
            -
            - lib/json/pure/generator.rb
         
     | 
| 
       46 
     | 
    
         
            -
            - lib/json/pure/parser.rb
         
     | 
| 
       47 
     | 
    
         
            -
            - lib/json/version.rb
         
     | 
| 
       48 
41 
     | 
    
         
             
            homepage: https://ruby.github.io/json
         
     | 
| 
       49 
42 
     | 
    
         
             
            licenses:
         
     | 
| 
       50 
43 
     | 
    
         
             
            - Ruby
         
     | 
| 
         @@ -67,7 +60,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       67 
60 
     | 
    
         
             
              requirements:
         
     | 
| 
       68 
61 
     | 
    
         
             
              - - ">="
         
     | 
| 
       69 
62 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       70 
     | 
    
         
            -
                  version: '2. 
     | 
| 
      
 63 
     | 
    
         
            +
                  version: '2.7'
         
     | 
| 
       71 
64 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
65 
     | 
    
         
             
              requirements:
         
     | 
| 
       73 
66 
     | 
    
         
             
              - - ">="
         
     | 
    
        data/lib/json/add/bigdecimal.rb
    DELETED
    
    | 
         @@ -1,58 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
         
     | 
| 
       3 
     | 
    
         
            -
              require 'json'
         
     | 
| 
       4 
     | 
    
         
            -
            end
         
     | 
| 
       5 
     | 
    
         
            -
            begin
         
     | 
| 
       6 
     | 
    
         
            -
              require 'bigdecimal'
         
     | 
| 
       7 
     | 
    
         
            -
            rescue LoadError
         
     | 
| 
       8 
     | 
    
         
            -
            end
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            class BigDecimal
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              # See #as_json.
         
     | 
| 
       13 
     | 
    
         
            -
              def self.json_create(object)
         
     | 
| 
       14 
     | 
    
         
            -
                BigDecimal._load object['b']
         
     | 
| 
       15 
     | 
    
         
            -
              end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
              # Methods <tt>BigDecimal#as_json</tt> and +BigDecimal.json_create+ may be used
         
     | 
| 
       18 
     | 
    
         
            -
              # to serialize and deserialize a \BigDecimal object;
         
     | 
| 
       19 
     | 
    
         
            -
              # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html].
         
     | 
| 
       20 
     | 
    
         
            -
              #
         
     | 
| 
       21 
     | 
    
         
            -
              # \Method <tt>BigDecimal#as_json</tt> serializes +self+,
         
     | 
| 
       22 
     | 
    
         
            -
              # returning a 2-element hash representing +self+:
         
     | 
| 
       23 
     | 
    
         
            -
              #
         
     | 
| 
       24 
     | 
    
         
            -
              #   require 'json/add/bigdecimal'
         
     | 
| 
       25 
     | 
    
         
            -
              #   x = BigDecimal(2).as_json             # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"}
         
     | 
| 
       26 
     | 
    
         
            -
              #   y = BigDecimal(2.0, 4).as_json        # => {"json_class"=>"BigDecimal", "b"=>"36:0.2e1"}
         
     | 
| 
       27 
     | 
    
         
            -
              #   z = BigDecimal(Complex(2, 0)).as_json # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"}
         
     | 
| 
       28 
     | 
    
         
            -
              #
         
     | 
| 
       29 
     | 
    
         
            -
              # \Method +JSON.create+ deserializes such a hash, returning a \BigDecimal object:
         
     | 
| 
       30 
     | 
    
         
            -
              #
         
     | 
| 
       31 
     | 
    
         
            -
              #   BigDecimal.json_create(x) # => 0.2e1
         
     | 
| 
       32 
     | 
    
         
            -
              #   BigDecimal.json_create(y) # => 0.2e1
         
     | 
| 
       33 
     | 
    
         
            -
              #   BigDecimal.json_create(z) # => 0.2e1
         
     | 
| 
       34 
     | 
    
         
            -
              #
         
     | 
| 
       35 
     | 
    
         
            -
              def as_json(*)
         
     | 
| 
       36 
     | 
    
         
            -
                {
         
     | 
| 
       37 
     | 
    
         
            -
                  JSON.create_id => self.class.name,
         
     | 
| 
       38 
     | 
    
         
            -
                  'b'            => _dump,
         
     | 
| 
       39 
     | 
    
         
            -
                }
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              # Returns a JSON string representing +self+:
         
     | 
| 
       43 
     | 
    
         
            -
              #
         
     | 
| 
       44 
     | 
    
         
            -
              #   require 'json/add/bigdecimal'
         
     | 
| 
       45 
     | 
    
         
            -
              #   puts BigDecimal(2).to_json
         
     | 
| 
       46 
     | 
    
         
            -
              #   puts BigDecimal(2.0, 4).to_json
         
     | 
| 
       47 
     | 
    
         
            -
              #   puts BigDecimal(Complex(2, 0)).to_json
         
     | 
| 
       48 
     | 
    
         
            -
              #
         
     | 
| 
       49 
     | 
    
         
            -
              # Output:
         
     | 
| 
       50 
     | 
    
         
            -
              #
         
     | 
| 
       51 
     | 
    
         
            -
              #   {"json_class":"BigDecimal","b":"27:0.2e1"}
         
     | 
| 
       52 
     | 
    
         
            -
              #   {"json_class":"BigDecimal","b":"36:0.2e1"}
         
     | 
| 
       53 
     | 
    
         
            -
              #   {"json_class":"BigDecimal","b":"27:0.2e1"}
         
     | 
| 
       54 
     | 
    
         
            -
              #
         
     | 
| 
       55 
     | 
    
         
            -
              def to_json(*args)
         
     | 
| 
       56 
     | 
    
         
            -
                as_json.to_json(*args)
         
     | 
| 
       57 
     | 
    
         
            -
              end
         
     | 
| 
       58 
     | 
    
         
            -
            end if defined?(::BigDecimal)
         
     | 
    
        data/lib/json/add/complex.rb
    DELETED
    
    | 
         @@ -1,51 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
         
     | 
| 
       3 
     | 
    
         
            -
              require 'json'
         
     | 
| 
       4 
     | 
    
         
            -
            end
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            class Complex
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              # See #as_json.
         
     | 
| 
       9 
     | 
    
         
            -
              def self.json_create(object)
         
     | 
| 
       10 
     | 
    
         
            -
                Complex(object['r'], object['i'])
         
     | 
| 
       11 
     | 
    
         
            -
              end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
              # Methods <tt>Complex#as_json</tt> and +Complex.json_create+ may be used
         
     | 
| 
       14 
     | 
    
         
            -
              # to serialize and deserialize a \Complex object;
         
     | 
| 
       15 
     | 
    
         
            -
              # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html].
         
     | 
| 
       16 
     | 
    
         
            -
              #
         
     | 
| 
       17 
     | 
    
         
            -
              # \Method <tt>Complex#as_json</tt> serializes +self+,
         
     | 
| 
       18 
     | 
    
         
            -
              # returning a 2-element hash representing +self+:
         
     | 
| 
       19 
     | 
    
         
            -
              #
         
     | 
| 
       20 
     | 
    
         
            -
              #   require 'json/add/complex'
         
     | 
| 
       21 
     | 
    
         
            -
              #   x = Complex(2).as_json      # => {"json_class"=>"Complex", "r"=>2, "i"=>0}
         
     | 
| 
       22 
     | 
    
         
            -
              #   y = Complex(2.0, 4).as_json # => {"json_class"=>"Complex", "r"=>2.0, "i"=>4}
         
     | 
| 
       23 
     | 
    
         
            -
              #
         
     | 
| 
       24 
     | 
    
         
            -
              # \Method +JSON.create+ deserializes such a hash, returning a \Complex object:
         
     | 
| 
       25 
     | 
    
         
            -
              #
         
     | 
| 
       26 
     | 
    
         
            -
              #   Complex.json_create(x) # => (2+0i)
         
     | 
| 
       27 
     | 
    
         
            -
              #   Complex.json_create(y) # => (2.0+4i)
         
     | 
| 
       28 
     | 
    
         
            -
              #
         
     | 
| 
       29 
     | 
    
         
            -
              def as_json(*)
         
     | 
| 
       30 
     | 
    
         
            -
                {
         
     | 
| 
       31 
     | 
    
         
            -
                  JSON.create_id => self.class.name,
         
     | 
| 
       32 
     | 
    
         
            -
                  'r'            => real,
         
     | 
| 
       33 
     | 
    
         
            -
                  'i'            => imag,
         
     | 
| 
       34 
     | 
    
         
            -
                }
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
              # Returns a JSON string representing +self+:
         
     | 
| 
       38 
     | 
    
         
            -
              #
         
     | 
| 
       39 
     | 
    
         
            -
              #   require 'json/add/complex'
         
     | 
| 
       40 
     | 
    
         
            -
              #   puts Complex(2).to_json
         
     | 
| 
       41 
     | 
    
         
            -
              #   puts Complex(2.0, 4).to_json
         
     | 
| 
       42 
     | 
    
         
            -
              #
         
     | 
| 
       43 
     | 
    
         
            -
              # Output:
         
     | 
| 
       44 
     | 
    
         
            -
              #
         
     | 
| 
       45 
     | 
    
         
            -
              #   {"json_class":"Complex","r":2,"i":0}
         
     | 
| 
       46 
     | 
    
         
            -
              #   {"json_class":"Complex","r":2.0,"i":4}
         
     | 
| 
       47 
     | 
    
         
            -
              #
         
     | 
| 
       48 
     | 
    
         
            -
              def to_json(*args)
         
     | 
| 
       49 
     | 
    
         
            -
                as_json.to_json(*args)
         
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/json/add/core.rb
    DELETED
    
    | 
         @@ -1,12 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            # This file requires the implementations of ruby core's custom objects for
         
     | 
| 
       3 
     | 
    
         
            -
            # serialisation/deserialisation.
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            require 'json/add/date'
         
     | 
| 
       6 
     | 
    
         
            -
            require 'json/add/date_time'
         
     | 
| 
       7 
     | 
    
         
            -
            require 'json/add/exception'
         
     | 
| 
       8 
     | 
    
         
            -
            require 'json/add/range'
         
     | 
| 
       9 
     | 
    
         
            -
            require 'json/add/regexp'
         
     | 
| 
       10 
     | 
    
         
            -
            require 'json/add/struct'
         
     | 
| 
       11 
     | 
    
         
            -
            require 'json/add/symbol'
         
     | 
| 
       12 
     | 
    
         
            -
            require 'json/add/time'
         
     | 
    
        data/lib/json/add/date.rb
    DELETED
    
    | 
         @@ -1,54 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
         
     | 
| 
       3 
     | 
    
         
            -
              require 'json'
         
     | 
| 
       4 
     | 
    
         
            -
            end
         
     | 
| 
       5 
     | 
    
         
            -
            require 'date'
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            class Date
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              # See #as_json.
         
     | 
| 
       10 
     | 
    
         
            -
              def self.json_create(object)
         
     | 
| 
       11 
     | 
    
         
            -
                civil(*object.values_at('y', 'm', 'd', 'sg'))
         
     | 
| 
       12 
     | 
    
         
            -
              end
         
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
              alias start sg unless method_defined?(:start)
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
              # Methods <tt>Date#as_json</tt> and +Date.json_create+ may be used
         
     | 
| 
       17 
     | 
    
         
            -
              # to serialize and deserialize a \Date object;
         
     | 
| 
       18 
     | 
    
         
            -
              # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html].
         
     | 
| 
       19 
     | 
    
         
            -
              #
         
     | 
| 
       20 
     | 
    
         
            -
              # \Method <tt>Date#as_json</tt> serializes +self+,
         
     | 
| 
       21 
     | 
    
         
            -
              # returning a 2-element hash representing +self+:
         
     | 
| 
       22 
     | 
    
         
            -
              #
         
     | 
| 
       23 
     | 
    
         
            -
              #   require 'json/add/date'
         
     | 
| 
       24 
     | 
    
         
            -
              #   x = Date.today.as_json
         
     | 
| 
       25 
     | 
    
         
            -
              #   # => {"json_class"=>"Date", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0}
         
     | 
| 
       26 
     | 
    
         
            -
              #
         
     | 
| 
       27 
     | 
    
         
            -
              # \Method +JSON.create+ deserializes such a hash, returning a \Date object:
         
     | 
| 
       28 
     | 
    
         
            -
              #
         
     | 
| 
       29 
     | 
    
         
            -
              #   Date.json_create(x)
         
     | 
| 
       30 
     | 
    
         
            -
              #   # => #<Date: 2023-11-21 ((2460270j,0s,0n),+0s,2299161j)>
         
     | 
| 
       31 
     | 
    
         
            -
              #
         
     | 
| 
       32 
     | 
    
         
            -
              def as_json(*)
         
     | 
| 
       33 
     | 
    
         
            -
                {
         
     | 
| 
       34 
     | 
    
         
            -
                  JSON.create_id => self.class.name,
         
     | 
| 
       35 
     | 
    
         
            -
                  'y' => year,
         
     | 
| 
       36 
     | 
    
         
            -
                  'm' => month,
         
     | 
| 
       37 
     | 
    
         
            -
                  'd' => day,
         
     | 
| 
       38 
     | 
    
         
            -
                  'sg' => start,
         
     | 
| 
       39 
     | 
    
         
            -
                }
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              # Returns a JSON string representing +self+:
         
     | 
| 
       43 
     | 
    
         
            -
              #
         
     | 
| 
       44 
     | 
    
         
            -
              #   require 'json/add/date'
         
     | 
| 
       45 
     | 
    
         
            -
              #   puts Date.today.to_json
         
     | 
| 
       46 
     | 
    
         
            -
              #
         
     | 
| 
       47 
     | 
    
         
            -
              # Output:
         
     | 
| 
       48 
     | 
    
         
            -
              #
         
     | 
| 
       49 
     | 
    
         
            -
              #   {"json_class":"Date","y":2023,"m":11,"d":21,"sg":2299161.0}
         
     | 
| 
       50 
     | 
    
         
            -
              #
         
     | 
| 
       51 
     | 
    
         
            -
              def to_json(*args)
         
     | 
| 
       52 
     | 
    
         
            -
                as_json.to_json(*args)
         
     | 
| 
       53 
     | 
    
         
            -
              end
         
     | 
| 
       54 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/json/add/date_time.rb
    DELETED
    
    | 
         @@ -1,67 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
         
     | 
| 
       3 
     | 
    
         
            -
              require 'json'
         
     | 
| 
       4 
     | 
    
         
            -
            end
         
     | 
| 
       5 
     | 
    
         
            -
            require 'date'
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            class DateTime
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
              # See #as_json.
         
     | 
| 
       10 
     | 
    
         
            -
              def self.json_create(object)
         
     | 
| 
       11 
     | 
    
         
            -
                args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
         
     | 
| 
       12 
     | 
    
         
            -
                of_a, of_b = object['of'].split('/')
         
     | 
| 
       13 
     | 
    
         
            -
                if of_b and of_b != '0'
         
     | 
| 
       14 
     | 
    
         
            -
                  args << Rational(of_a.to_i, of_b.to_i)
         
     | 
| 
       15 
     | 
    
         
            -
                else
         
     | 
| 
       16 
     | 
    
         
            -
                  args << of_a
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
                args << object['sg']
         
     | 
| 
       19 
     | 
    
         
            -
                civil(*args)
         
     | 
| 
       20 
     | 
    
         
            -
              end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
              alias start sg unless method_defined?(:start)
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
              # Methods <tt>DateTime#as_json</tt> and +DateTime.json_create+ may be used
         
     | 
| 
       25 
     | 
    
         
            -
              # to serialize and deserialize a \DateTime object;
         
     | 
| 
       26 
     | 
    
         
            -
              # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html].
         
     | 
| 
       27 
     | 
    
         
            -
              #
         
     | 
| 
       28 
     | 
    
         
            -
              # \Method <tt>DateTime#as_json</tt> serializes +self+,
         
     | 
| 
       29 
     | 
    
         
            -
              # returning a 2-element hash representing +self+:
         
     | 
| 
       30 
     | 
    
         
            -
              #
         
     | 
| 
       31 
     | 
    
         
            -
              #   require 'json/add/datetime'
         
     | 
| 
       32 
     | 
    
         
            -
              #   x = DateTime.now.as_json
         
     | 
| 
       33 
     | 
    
         
            -
              #   # => {"json_class"=>"DateTime", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0}
         
     | 
| 
       34 
     | 
    
         
            -
              #
         
     | 
| 
       35 
     | 
    
         
            -
              # \Method +JSON.create+ deserializes such a hash, returning a \DateTime object:
         
     | 
| 
       36 
     | 
    
         
            -
              #
         
     | 
| 
       37 
     | 
    
         
            -
              #   DateTime.json_create(x) # BUG? Raises Date::Error "invalid date"
         
     | 
| 
       38 
     | 
    
         
            -
              #
         
     | 
| 
       39 
     | 
    
         
            -
              def as_json(*)
         
     | 
| 
       40 
     | 
    
         
            -
                {
         
     | 
| 
       41 
     | 
    
         
            -
                  JSON.create_id => self.class.name,
         
     | 
| 
       42 
     | 
    
         
            -
                  'y' => year,
         
     | 
| 
       43 
     | 
    
         
            -
                  'm' => month,
         
     | 
| 
       44 
     | 
    
         
            -
                  'd' => day,
         
     | 
| 
       45 
     | 
    
         
            -
                  'H' => hour,
         
     | 
| 
       46 
     | 
    
         
            -
                  'M' => min,
         
     | 
| 
       47 
     | 
    
         
            -
                  'S' => sec,
         
     | 
| 
       48 
     | 
    
         
            -
                  'of' => offset.to_s,
         
     | 
| 
       49 
     | 
    
         
            -
                  'sg' => start,
         
     | 
| 
       50 
     | 
    
         
            -
                }
         
     | 
| 
       51 
     | 
    
         
            -
              end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              # Returns a JSON string representing +self+:
         
     | 
| 
       54 
     | 
    
         
            -
              #
         
     | 
| 
       55 
     | 
    
         
            -
              #   require 'json/add/datetime'
         
     | 
| 
       56 
     | 
    
         
            -
              #   puts DateTime.now.to_json
         
     | 
| 
       57 
     | 
    
         
            -
              #
         
     | 
| 
       58 
     | 
    
         
            -
              # Output:
         
     | 
| 
       59 
     | 
    
         
            -
              #
         
     | 
| 
       60 
     | 
    
         
            -
              #   {"json_class":"DateTime","y":2023,"m":11,"d":21,"sg":2299161.0}
         
     | 
| 
       61 
     | 
    
         
            -
              #
         
     | 
| 
       62 
     | 
    
         
            -
              def to_json(*args)
         
     | 
| 
       63 
     | 
    
         
            -
                as_json.to_json(*args)
         
     | 
| 
       64 
     | 
    
         
            -
              end
         
     | 
| 
       65 
     | 
    
         
            -
            end
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
    
        data/lib/json/add/exception.rb
    DELETED
    
    | 
         @@ -1,49 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
         
     | 
| 
       3 
     | 
    
         
            -
              require 'json'
         
     | 
| 
       4 
     | 
    
         
            -
            end
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            class Exception
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
              # See #as_json.
         
     | 
| 
       9 
     | 
    
         
            -
              def self.json_create(object)
         
     | 
| 
       10 
     | 
    
         
            -
                result = new(object['m'])
         
     | 
| 
       11 
     | 
    
         
            -
                result.set_backtrace object['b']
         
     | 
| 
       12 
     | 
    
         
            -
                result
         
     | 
| 
       13 
     | 
    
         
            -
              end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
              # Methods <tt>Exception#as_json</tt> and +Exception.json_create+ may be used
         
     | 
| 
       16 
     | 
    
         
            -
              # to serialize and deserialize a \Exception object;
         
     | 
| 
       17 
     | 
    
         
            -
              # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html].
         
     | 
| 
       18 
     | 
    
         
            -
              #
         
     | 
| 
       19 
     | 
    
         
            -
              # \Method <tt>Exception#as_json</tt> serializes +self+,
         
     | 
| 
       20 
     | 
    
         
            -
              # returning a 2-element hash representing +self+:
         
     | 
| 
       21 
     | 
    
         
            -
              #
         
     | 
| 
       22 
     | 
    
         
            -
              #   require 'json/add/exception'
         
     | 
| 
       23 
     | 
    
         
            -
              #   x = Exception.new('Foo').as_json # => {"json_class"=>"Exception", "m"=>"Foo", "b"=>nil}
         
     | 
| 
       24 
     | 
    
         
            -
              #
         
     | 
| 
       25 
     | 
    
         
            -
              # \Method +JSON.create+ deserializes such a hash, returning a \Exception object:
         
     | 
| 
       26 
     | 
    
         
            -
              #
         
     | 
| 
       27 
     | 
    
         
            -
              #   Exception.json_create(x) # => #<Exception: Foo>
         
     | 
| 
       28 
     | 
    
         
            -
              #
         
     | 
| 
       29 
     | 
    
         
            -
              def as_json(*)
         
     | 
| 
       30 
     | 
    
         
            -
                {
         
     | 
| 
       31 
     | 
    
         
            -
                  JSON.create_id => self.class.name,
         
     | 
| 
       32 
     | 
    
         
            -
                  'm'            => message,
         
     | 
| 
       33 
     | 
    
         
            -
                  'b'            => backtrace,
         
     | 
| 
       34 
     | 
    
         
            -
                }
         
     | 
| 
       35 
     | 
    
         
            -
              end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
              # Returns a JSON string representing +self+:
         
     | 
| 
       38 
     | 
    
         
            -
              #
         
     | 
| 
       39 
     | 
    
         
            -
              #   require 'json/add/exception'
         
     | 
| 
       40 
     | 
    
         
            -
              #   puts Exception.new('Foo').to_json
         
     | 
| 
       41 
     | 
    
         
            -
              #
         
     | 
| 
       42 
     | 
    
         
            -
              # Output:
         
     | 
| 
       43 
     | 
    
         
            -
              #
         
     | 
| 
       44 
     | 
    
         
            -
              #   {"json_class":"Exception","m":"Foo","b":null}
         
     | 
| 
       45 
     | 
    
         
            -
              #
         
     | 
| 
       46 
     | 
    
         
            -
              def to_json(*args)
         
     | 
| 
       47 
     | 
    
         
            -
                as_json.to_json(*args)
         
     | 
| 
       48 
     | 
    
         
            -
              end
         
     | 
| 
       49 
     | 
    
         
            -
            end
         
     | 
    
        data/lib/json/add/ostruct.rb
    DELETED
    
    | 
         @@ -1,54 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
            unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
         
     | 
| 
       3 
     | 
    
         
            -
              require 'json'
         
     | 
| 
       4 
     | 
    
         
            -
            end
         
     | 
| 
       5 
     | 
    
         
            -
            begin
         
     | 
| 
       6 
     | 
    
         
            -
              require 'ostruct'
         
     | 
| 
       7 
     | 
    
         
            -
            rescue LoadError
         
     | 
| 
       8 
     | 
    
         
            -
            end
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            class OpenStruct
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              # See #as_json.
         
     | 
| 
       13 
     | 
    
         
            -
              def self.json_create(object)
         
     | 
| 
       14 
     | 
    
         
            -
                new(object['t'] || object[:t])
         
     | 
| 
       15 
     | 
    
         
            -
              end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
              # Methods <tt>OpenStruct#as_json</tt> and +OpenStruct.json_create+ may be used
         
     | 
| 
       18 
     | 
    
         
            -
              # to serialize and deserialize a \OpenStruct object;
         
     | 
| 
       19 
     | 
    
         
            -
              # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html].
         
     | 
| 
       20 
     | 
    
         
            -
              #
         
     | 
| 
       21 
     | 
    
         
            -
              # \Method <tt>OpenStruct#as_json</tt> serializes +self+,
         
     | 
| 
       22 
     | 
    
         
            -
              # returning a 2-element hash representing +self+:
         
     | 
| 
       23 
     | 
    
         
            -
              #
         
     | 
| 
       24 
     | 
    
         
            -
              #   require 'json/add/ostruct'
         
     | 
| 
       25 
     | 
    
         
            -
              #   x = OpenStruct.new('name' => 'Rowdy', :age => nil).as_json
         
     | 
| 
       26 
     | 
    
         
            -
              #   # => {"json_class"=>"OpenStruct", "t"=>{:name=>'Rowdy', :age=>nil}}
         
     | 
| 
       27 
     | 
    
         
            -
              #
         
     | 
| 
       28 
     | 
    
         
            -
              # \Method +JSON.create+ deserializes such a hash, returning a \OpenStruct object:
         
     | 
| 
       29 
     | 
    
         
            -
              #
         
     | 
| 
       30 
     | 
    
         
            -
              #   OpenStruct.json_create(x)
         
     | 
| 
       31 
     | 
    
         
            -
              #   # => #<OpenStruct name='Rowdy', age=nil>
         
     | 
| 
       32 
     | 
    
         
            -
              #
         
     | 
| 
       33 
     | 
    
         
            -
              def as_json(*)
         
     | 
| 
       34 
     | 
    
         
            -
                klass = self.class.name
         
     | 
| 
       35 
     | 
    
         
            -
                klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
         
     | 
| 
       36 
     | 
    
         
            -
                {
         
     | 
| 
       37 
     | 
    
         
            -
                  JSON.create_id => klass,
         
     | 
| 
       38 
     | 
    
         
            -
                  't'            => table,
         
     | 
| 
       39 
     | 
    
         
            -
                }
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              # Returns a JSON string representing +self+:
         
     | 
| 
       43 
     | 
    
         
            -
              #
         
     | 
| 
       44 
     | 
    
         
            -
              #   require 'json/add/ostruct'
         
     | 
| 
       45 
     | 
    
         
            -
              #   puts OpenStruct.new('name' => 'Rowdy', :age => nil).to_json
         
     | 
| 
       46 
     | 
    
         
            -
              #
         
     | 
| 
       47 
     | 
    
         
            -
              # Output:
         
     | 
| 
       48 
     | 
    
         
            -
              #
         
     | 
| 
       49 
     | 
    
         
            -
              #   {"json_class":"OpenStruct","t":{'name':'Rowdy',"age":null}}
         
     | 
| 
       50 
     | 
    
         
            -
              #
         
     | 
| 
       51 
     | 
    
         
            -
              def to_json(*args)
         
     | 
| 
       52 
     | 
    
         
            -
                as_json.to_json(*args)
         
     | 
| 
       53 
     | 
    
         
            -
              end
         
     | 
| 
       54 
     | 
    
         
            -
            end if defined?(::OpenStruct)
         
     |