class JSON::Pure::Generator::State
This class is used to create State
instances, that are use to hold data while generating a JSON
text from a Ruby data structure.
Attributes
This string is put at the end of a line that holds a JSON
array.
This integer returns the current depth data structure nesting in the generated JSON
.
If this attribute is set to true, forward slashes will be escaped in all json strings.
This string is used to indent levels in the JSON
text.
This integer returns the maximum level of data structure nesting in the generated JSON
, max_nesting
= 0 if no maximum is checked.
This string is put at the end of a line that holds a JSON
object (or Hash).
This string is used to insert a space between the tokens in a JSON
string.
This string is used to insert a space before the ':' in JSON
objects.
Public Class Methods
Creates a State
object from opts, which ought to be Hash to create a new State
instance configured by opts, something else to create an unconfigured instance. If opts is a State
object, it is just returned.
# File lib/json/pure/generator.rb, line 96 def self.from_state(opts) case when self === opts opts when opts.respond_to?(:to_hash) new(opts.to_hash) when opts.respond_to?(:to_h) new(opts.to_h) else SAFE_STATE_PROTOTYPE.dup end end
Instantiates a new State
object, configured by opts.
opts can have the following keys:
-
indent: a string used to indent levels (default: ''),
-
space: a string that is put after, a : or , delimiter (default: ''),
-
space_before: a string that is put before a : pair delimiter (default: ''),
-
object_nl: a string that is put at the end of a
JSON
object (default: ''), -
array_nl: a string that is put at the end of a
JSON
array (default: ''), -
escape_slash: true if forward slash (/) should be escaped (default: false)
-
check_circular: is deprecated now, use the :max_nesting option instead,
-
max_nesting: sets the maximum level of data structure nesting in the generated
JSON
,max_nesting
= 0 if no maximum should be checked. -
allow_nan: true if NaN, Infinity, and -Infinity should be generated, otherwise an exception is thrown, if these values are encountered. This options defaults to false.
# File lib/json/pure/generator.rb, line 125 def initialize(opts = {}) @indent = '' @space = '' @space_before = '' @object_nl = '' @array_nl = '' @allow_nan = false @ascii_only = false @escape_slash = false @buffer_initial_length = 1024 configure opts end
Public Instance Methods
Return the value returned by method name
.
# File lib/json/pure/generator.rb, line 267 def [](name) if respond_to?(name) __send__(name) else instance_variable_get("@#{name}") if instance_variables.include?("@#{name}".to_sym) # avoid warning end end
# File lib/json/pure/generator.rb, line 276 def []=(name, value) if respond_to?(name_writer = "#{name}=") __send__ name_writer, value else instance_variable_set "@#{name}", value end end
Returns true if NaN, Infinity, and -Infinity should be considered as valid JSON
and output.
# File lib/json/pure/generator.rb, line 192 def allow_nan? @allow_nan end
Returns true, if only ASCII characters should be generated. Otherwise returns false.
# File lib/json/pure/generator.rb, line 198 def ascii_only? @ascii_only end
Returns true, if circular data structures are checked, otherwise returns false.
# File lib/json/pure/generator.rb, line 186 def check_circular? !@max_nesting.zero? end
Configure this State
instance with the Hash opts, and return itself.
# File lib/json/pure/generator.rb, line 209 def configure(opts) if opts.respond_to?(:to_hash) opts = opts.to_hash elsif opts.respond_to?(:to_h) opts = opts.to_h else raise TypeError, "can't convert #{opts.class} into Hash" end for key, value in opts instance_variable_set "@#{key}", value end @indent = opts[:indent] if opts.key?(:indent) @space = opts[:space] if opts.key?(:space) @space_before = opts[:space_before] if opts.key?(:space_before) @object_nl = opts[:object_nl] if opts.key?(:object_nl) @array_nl = opts[:array_nl] if opts.key?(:array_nl) @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan) @ascii_only = opts[:ascii_only] if opts.key?(:ascii_only) @depth = opts[:depth] || 0 @buffer_initial_length ||= opts[:buffer_initial_length] @escape_slash = !!opts[:escape_slash] if opts.key?(:escape_slash) if !opts.key?(:max_nesting) # defaults to 100 @max_nesting = 100 elsif opts[:max_nesting] @max_nesting = opts[:max_nesting] else @max_nesting = 0 end self end
Returns true, if forward slashes are escaped. Otherwise returns false.
# File lib/json/pure/generator.rb, line 203 def escape_slash? @escape_slash end
Generates a valid JSON
document from object obj
and returns the result. If no valid JSON
document can be created this method raises a GeneratorError
exception.
# File lib/json/pure/generator.rb, line 259 def generate(obj) result = obj.to_json(self) JSON.valid_utf8?(result) or raise GeneratorError, "source sequence #{result.inspect} is illegal/malformed utf-8" result end
Returns the configuration instance variables as a hash, that can be passed to the configure method.
# File lib/json/pure/generator.rb, line 244 def to_h result = {} for iv in instance_variables iv = iv.to_s[1..-1] result[iv.to_sym] = self[iv] end result end