[flori/json] RDoc for JSON.load with proc

https://github.com/flori/json/commit/a55c91934e
This commit is contained in:
BurdetteLamar 2020-07-28 13:57:16 -05:00 committed by Hiroshi SHIBATA
parent 0089854fc5
commit e9096f796c
Notes: git 2020-09-25 17:29:12 +09:00

View File

@ -441,7 +441,12 @@ module JSON
# See {Parsing Options}[#module-JSON-label-Parsing+Options]. # See {Parsing Options}[#module-JSON-label-Parsing+Options].
# The default options can be changed via method JSON.load_default_options=. # The default options can be changed via method JSON.load_default_options=.
# #
# Examples in this section assume prior execution of: # ---
#
# When no +proc+ is given, modifies +source+ as above and returns the result of
# <tt>parse(source, opts)</tt>; see #parse.
#
# Source for following examples:
# source = <<-EOT # source = <<-EOT
# { # {
# "name": "Dave", # "name": "Dave",
@ -454,11 +459,6 @@ module JSON
# } # }
# EOT # 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: # Load a \String:
# ruby = JSON.load(source) # ruby = JSON.load(source)
# ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]}
@ -484,25 +484,65 @@ module JSON
# - Returns the final result. # - Returns the final result.
# #
# Example: # Example:
# def mung(obj) # require 'json'
# case obj #
# when String # # Some classes for the example.
# obj.upcase # class Base
# when Integer # def initialize(attributes)
# obj * 100 # @attributes = attributes
# else
# obj
# end # end
# end # end
# new_obj = JSON.load(source, proc {|obj| # class User < Base; end
# class Account < Base; end
# class Admin < Base; end
# # The JSON source.
# json = <<-EOF
# {
# "users": [
# {"type": "User", "username": "jane", "email": "jane@example.com"},
# {"type": "User", "username": "john", "email": "john@example.com"}
# ],
# "accounts": [
# {"account": {"type": "Account", "paid": true, "account_id": "1234"}},
# {"account": {"type": "Account", "paid": false, "account_id": "1235"}}
# ],
# "admins": {"type": "Admin", "password": "0wn3d"}
# }
# EOF
# # Deserializer method.
# def deserialize_obj(obj, safe_types = %w(User Account Admin))
# type = obj.is_a?(Hash) && obj["type"]
# safe_types.include?(type) ? Object.const_get(type).new(obj) : obj
# end
# # Call to JSON.load
# ruby = JSON.load(json, proc {|obj|
# case obj # case obj
# when Hash # when Hash
# obj.each {|k, v| obj[k] = mung(v) } # obj.each {|k, v| obj[k] = deserialize_obj v }
# when Array # when Array
# obj.map! {|v| mung(v) } # obj.map! {|v| deserialize_obj v }
# end # end
# }) # })
# new_obj # => {"name"=>"DAVE", "age"=>4000, "hats"=>["CATTLEMAN'S", "PANAMA", "TOPHAT"]} # pp ruby
# Output:
# {"users"=>
# [#<User:0x00000000064c4c98
# @attributes=
# {"type"=>"User", "username"=>"jane", "email"=>"jane@example.com"}>,
# #<User:0x00000000064c4bd0
# @attributes=
# {"type"=>"User", "username"=>"john", "email"=>"john@example.com"}>],
# "accounts"=>
# [{"account"=>
# #<Account:0x00000000064c4928
# @attributes={"type"=>"Account", "paid"=>true, "account_id"=>"1234"}>},
# {"account"=>
# #<Account:0x00000000064c4680
# @attributes={"type"=>"Account", "paid"=>false, "account_id"=>"1235"}>}],
# "admins"=>
# #<Admin:0x00000000064c41f8
# @attributes={"type"=>"Admin", "password"=>"0wn3d"}>}
#
def load(source, proc = nil, options = {}) def load(source, proc = nil, options = {})
opts = load_default_options.merge options opts = load_default_options.merge options
if source.respond_to? :to_str if source.respond_to? :to_str