module JSON::TruffleRuby::Generator::GeneratorMethods::Array

Public Instance Methods

to_json(state = nil, *) click to toggle source

Returns a JSON string containing a JSON array, that is unparsed from this Array instance. state is a JSON::State object, that can also be used to configure the produced JSON string output further.

# File lib/json/truffle_ruby/generator.rb, line 570
def to_json(state = nil, *)
  state = State.from_state(state)
  state.check_max_nesting
  json_transform(state)
end

Private Instance Methods

json_transform(state) click to toggle source
# File lib/json/truffle_ruby/generator.rb, line 578
def json_transform(state)
  depth = state.depth += 1

  if empty?
    state.depth -= 1
    return '[]'
  end

  result = '['.dup
  if state.array_nl.empty?
    delim = ","
  else
    result << state.array_nl
    delim = ",#{state.array_nl}"
  end

  first = true
  indent = !state.array_nl.empty?
  each { |value|
    result << delim unless first
    result << state.indent * depth if indent
    if state.strict? && !Generator.native_type?(value)
      if state.as_json
        value = state.as_json.call(value, false)
        unless Generator.native_type?(value)
          raise GeneratorError.new("#{value.class} returned by #{state.as_json} not allowed in JSON", value)
        end
        result << value.to_json(state)
      else
        raise GeneratorError.new("#{value.class} not allowed in JSON", value)
      end
    elsif value.respond_to?(:to_json)
      result << value.to_json(state)
    else
      result << %{"#{String(value)}"}
    end
    first = false
  }
  depth = state.depth -= 1
  result << state.array_nl
  result << state.indent * depth if indent
  result << ']'
end