class JSON::TruffleRuby::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 proc converts unsupported types into native JSON types.

This integer returns the current depth data structure nesting in the generated JSON.

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).

If this attribute is set to true, forward slashes will be escaped in all json strings.

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.

If this attribute is set to true, attempting to serialize types not supported by the JSON spec will raise a JSON::GeneratorError

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/truffle_ruby/generator.rb, line 109
def self.from_state(opts)
  if opts
    case
    when self === opts
      return opts
    when opts.respond_to?(:to_hash)
      return new(opts.to_hash)
    when opts.respond_to?(:to_h)
      return new(opts.to_h)
    end
  end
  new
end
# File lib/json/truffle_ruby/generator.rb, line 101
def self.generate(obj, opts = nil, io = nil)
  new(opts).generate(obj, io)
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: ”),

  • script_safe: true if U+2028, U+2029 and forward slash (/) should be escaped as to make the JSON object safe to interpolate in a script tag (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/truffle_ruby/generator.rb, line 140
def initialize(opts = nil)
  @indent                = ''
  @space                 = ''
  @space_before          = ''
  @object_nl             = ''
  @array_nl              = ''
  @allow_nan             = false
  @ascii_only            = false
  @as_json               = false
  @depth                 = 0
  @buffer_initial_length = 1024
  @script_safe           = false
  @strict                = false
  @max_nesting           = 100
  configure(opts) if opts
end

Public Instance Methods

Return the value returned by method name.

# File lib/json/truffle_ruby/generator.rb, line 400
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/truffle_ruby/generator.rb, line 409
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/truffle_ruby/generator.rb, line 218
def allow_nan?
  @allow_nan
end

Returns true, if only ASCII characters should be generated. Otherwise returns false.

# File lib/json/truffle_ruby/generator.rb, line 224
def ascii_only?
  @ascii_only
end

Returns true, if circular data structures are checked, otherwise returns false.

# File lib/json/truffle_ruby/generator.rb, line 212
def check_circular?
  !@max_nesting.zero?
end

Configure this State instance with the Hash opts, and return itself.

# File lib/json/truffle_ruby/generator.rb, line 242
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
  opts.each do |key, value|
    instance_variable_set "@#{key}", value
  end

  # NOTE: If adding new instance variables here, check whether #generate should check them for #generate_json
  @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)
  @as_json               = opts[:as_json].to_proc     if opts[:as_json]
  @ascii_only            = opts[:ascii_only]          if opts.key?(:ascii_only)
  @depth                 = opts[:depth] || 0
  @buffer_initial_length ||= opts[:buffer_initial_length]

  @script_safe = if opts.key?(:script_safe)
    !!opts[:script_safe]
  elsif opts.key?(:escape_slash)
    !!opts[:escape_slash]
  else
    false
  end

  @strict                = !!opts[:strict] if opts.key?(:strict)

  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
Also aliased as: merge

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/truffle_ruby/generator.rb, line 304
def generate(obj, anIO = nil)
  if @indent.empty? and @space.empty? and @space_before.empty? and @object_nl.empty? and @array_nl.empty? and
      !@ascii_only and !@script_safe and @max_nesting == 0 and (!@strict || Symbol === obj)
    result = generate_json(obj, ''.dup)
  else
    result = obj.to_json(self)
  end
  JSON::TruffleRuby::Generator.valid_utf8?(result) or raise GeneratorError.new(
    "source sequence #{result.inspect} is illegal/malformed utf-8",
    obj
  )
  if anIO
    anIO.write(result)
    anIO
  else
    result
  end
end

Returns true, if forward slashes are escaped. Otherwise returns false.

# File lib/json/truffle_ruby/generator.rb, line 229
def script_safe?
  @script_safe
end

Returns true, if strict mode is enabled. Otherwise returns false. Strict mode only allow serializing JSON native types: Hash, Array, String, Integer, Float, true, false and nil.

# File lib/json/truffle_ruby/generator.rb, line 236
def strict?
  @strict
end

Returns the configuration instance variables as a hash, that can be passed to the configure method.

# File lib/json/truffle_ruby/generator.rb, line 289
def to_h
  result = {}
  instance_variables.each do |iv|
    iv = iv.to_s[1..-1]
    result[iv.to_sym] = self[iv]
  end
  result
end
Also aliased as: to_hash
Alias for: to_h