[前][次][番号順一覧][スレッド一覧]

ruby-changes:63107

From: BurdetteLamar <ko1@a...>
Date: Fri, 25 Sep 2020 17:29:01 +0900 (JST)
Subject: [ruby-changes:63107] 8c057bb845 (master): [flori/json] RDoc example for JSON.load

https://git.ruby-lang.org/ruby.git/commit/?id=8c057bb845

From 8c057bb845d57d20e285030bfd73bcb5ca1143f9 Mon Sep 17 00:00:00 2001
From: BurdetteLamar <burdettelamar@y...>
Date: Sat, 4 Jul 2020 09:21:12 -0500
Subject: [flori/json] RDoc example for JSON.load

https://github.com/flori/json/commit/e4eead665c

diff --git a/ext/json/lib/json.rb b/ext/json/lib/json.rb
index 6bb8224..aeb9774 100644
--- a/ext/json/lib/json.rb
+++ b/ext/json/lib/json.rb
@@ -319,7 +319,7 @@ require 'json/common' https://github.com/ruby/ruby/blob/trunk/ext/json/lib/json.rb#L319
 #   opts = {
 #     array_nl: "\n",
 #     object_nl: "\n",
-#     indent+: '  ',
+#     indent: '  ',
 #     space_before: ' ',
 #     space: ' '
 #   }
diff --git a/ext/json/lib/json/common.rb b/ext/json/lib/json/common.rb
index 3ff6df1..0e43fa2 100644
--- a/ext/json/lib/json/common.rb
+++ b/ext/json/lib/json/common.rb
@@ -414,21 +414,95 @@ module JSON https://github.com/ruby/ruby/blob/trunk/ext/json/lib/json/common.rb#L414
     :create_additions => true,
   }
 
-  # Load a ruby data structure from a JSON _source_ and return it. A source can
-  # either be a string-like object, an IO-like object, or an object responding
-  # to the read method. If _proc_ was given, it will be called with any nested
-  # Ruby object as an argument recursively in depth first order. To modify the
-  # default options pass in the optional _options_ argument as well.
-  #
-  # BEWARE: This method is meant to serialise data from trusted user input,
-  # like from your own database server or clients under your control, it could
-  # be dangerous to allow untrusted users to pass JSON sources into it. The
-  # default options for the parser can be changed via the load_default_options
-  # method.
+  # :call-seq:
+  #   JSON.load(source, proc = nil, options = {}) -> object
   #
-  # This method is part of the implementation of the load/dump interface of
-  # Marshal and YAML.
+  # Returns the Ruby objects created by parsing the given +source+.
   #
+  # - Argument +source+ must be, or be convertible to, a \String:
+  #   - If +source+ responds to instance method +to_str+,
+  #     <tt>source.to_str</tt> becomes the source.
+  #   - If +source+ responds to instance method +to_io+,
+  #     <tt>source.to_io.read</tt> becomes the source.
+  #   - If +source+ responds to instance method +read+,
+  #     <tt>source.read</tt> becomes the source.
+  #   - If both of the following are true, source becomes the \String <tt>'null'</tt>:
+  #     - Option +allow_blank+ specifies a truthy value.
+  #     - The source, as defined above, is +nil+ or the empty \String <tt>''</tt>.
+  #   - Otherwise, +source+ remains the source.
+  # - Argument +proc+, if given, must be a \Proc that accepts one argument.
+  #   It will be called recursively with each result (depth-first order).
+  #   See details below.
+  #   BEWARE: This method is meant to serialise data from trusted user input,
+  #   like from your own database server or clients under your control, it could
+  #   be dangerous to allow untrusted users to pass JSON sources into it.
+  # - Argument +opts+, if given, contains options for the parsing, and must be a
+  #   {Hash-convertible object}[doc/implicit_conversion_rdoc.html#label-Hash+Convertible+Objects].
+  #   See {Parsing Options}[#module-JSON-label-Parsing+Options].
+  #   The default options can be changed via method JSON.load_default_options=.
+  #
+  # Examples in this section assume prior execution of:
+  #   source = <<-EOT
+  #   {
+  #   "name": "Dave",
+  #     "age" :40,
+  #     "hats": [
+  #       "Cattleman's",
+  #       "Panama",
+  #       "Tophat"
+  #     ]
+  #   }
+  #   EOT
+  #
+  # ---
+  #
+  # When +proc+ is not given, modifies +source+ as above and returns the result of
+  # <tt>parse(source, opts)</tt>;  see #parse.
+  #
+  # Load a \String:
+  #   ruby = JSON.load(source)
+  #   ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
+  #
+  # Load an \IO object:
+  #   require 'stringio'
+  #   object = JSON.load(StringIO.new(source))
+  #   object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
+  #
+  # Load a \File object:
+  #   path = 't.json'
+  #   File.write(path, source)
+  #   File.open(path) do |file|
+  #     JSON.load(file)
+  #   end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
+  #
+  # ---
+  #
+  # When +proc+ is given:
+  # - Modifies +source+ as above.
+  # - Gets the +result+ from calling <tt>parse(source, opts)</tt>.
+  # - Recursively calls <tt>proc(result)</tt>.
+  # - Returns the final result.
+  #
+  # Example:
+  #   def mung(obj)
+  #     case obj
+  #     when String
+  #       obj.upcase
+  #     when Integer
+  #       obj * 100
+  #     else
+  #       obj
+  #     end
+  #   end
+  #   new_obj = JSON.load(source, proc {|obj|
+  #     case obj
+  #     when Hash
+  #       obj.each {|k, v| obj[k] = mung(v) }
+  #     when Array
+  #       obj.map! {|v| mung(v) }
+  #     end
+  #   })
+  #   new_obj # => {"name"=>"DAVE", "age"=>4000, "hats"=>["CATTLEMAN'S", "PANAMA", "TOPHAT"]}
   def load(source, proc = nil, options = {})
     opts = load_default_options.merge options
     if source.respond_to? :to_str
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]