Class: JSON::Ext::Generator::State
| Relationships & Source Files | |
| Inherits: | Object | 
| Defined in: | ext/json/generator/generator.c, ext/json/lib/json/ext/generator/state.rb | 
Class Method Summary
- 
    
      .from_state(opts)  
    
    Creates a Stateobject from opts, which ought to be Hash to create a newStateinstance configured by opts, something else to create an unconfigured instance.
- .generate(obj, opts, io)
- .new(*args) constructor
Instance Attribute Summary
- #allow_nan=(enable) rw
- #allow_nan? ⇒ Boolean rw
- 
    
      #array_nl  
    
    rw
    This string is put at the end of a line that holds a ::JSONarray.
- 
    
      #array_nl=(array_nl)  
    
    rw
    This string is put at the end of a line that holds a ::JSONarray.
- 
    
      #ascii_only=(enable)  
    
    rw
    This sets whether only ASCII characters should be generated. 
- 
    
      #ascii_only?  ⇒ Boolean 
    
    rw
    Returns true, if only ASCII characters should be generated. 
- 
    
      #buffer_initial_length  
    
    rw
    This integer returns the current initial length of the buffer. 
- 
    
      #buffer_initial_length=(length)  
    
    rw
    This sets the initial length of the buffer to length, iflength> 0, otherwise its value isn’t changed.
- 
    
      #check_circular?  ⇒ Boolean 
    
    readonly
    Returns true, if circular data structures should be checked, otherwise returns false. 
- 
    
      #depth  
    
    rw
    This integer returns the current depth of data structure nesting. 
- 
    
      #depth=(depth)  
    
    rw
    This sets the maximum level of data structure nesting in the generated ::JSONto the integer depth, max_nesting = 0 if no maximum should be checked.
- 
    
      #escape_slash  
    
    rw
    Alias for #script_safe. 
- 
    
      #indent  
    
    rw
    Returns the string that is used to indent levels in the ::JSONtext.
- 
    
      #indent=(indent)  
    
    rw
    Sets the string that is used to indent levels in the ::JSONtext.
- 
    
      #max_nesting  
    
    rw
    This integer returns the maximum level of data structure nesting in the generated ::JSON, max_nesting = 0 if no maximum is checked.
- 
    
      #max_nesting=(depth)  
    
    rw
    This sets the maximum level of data structure nesting in the generated ::JSONto the integer depth, max_nesting = 0 if no maximum should be checked.
- 
    
      #object_nl  
    
    rw
    This string is put at the end of a line that holds a ::JSONobject (or Hash).
- 
    
      #object_nl=(object_nl)  
    
    rw
    This string is put at the end of a line that holds a ::JSONobject (or Hash).
- 
    
      #script_safe  
      (also: #script_safe?, #escape_slash)
    
    rw
    If this boolean is true, the forward slashes will be escaped in the json output. 
- 
    
      #script_safe=(enable)  
      (also: #escape_slash=)
    
    rw
    This sets whether or not the forward slashes will be escaped in the json output. 
- 
    
      #script_safe?  
      (also: #escape_slash?)
    
    rw
    Alias for #script_safe. 
- 
    
      #space  
    
    rw
    Returns the string that is used to insert a space between the tokens in a ::JSONstring.
- 
    
      #space=(space)  
    
    rw
    Sets space to the string that is used to insert a space between the tokens in a ::JSONstring.
- 
    
      #space_before  
    
    rw
    Returns the string that is used to insert a space before the ‘:’ in ::JSONobjects.
- 
    
      #space_before=(space_before)  
    
    rw
    Sets the string that is used to insert a space before the ‘:’ in ::JSONobjects.
- 
    
      #strict  
      (also: #strict?)
    
    rw
    If this boolean is false, types unsupported by the ::JSONformat will be serialized as strings.
- 
    
      #strict=(enable)  
    
    rw
    This sets whether or not to serialize types unsupported by the ::JSONformat as strings.
- 
    
      #strict?  
    
    rw
    Alias for #strict. 
Instance Method Summary
- 
    
      #[](name)  
    
    Returns the value returned by method name.
- 
    
      #[]=(name, value)  
    
    Sets the attribute name to value. 
- 
    
      #configure(opts)  
      (also: #merge)
    
    Configure this Stateinstance with the Hash opts, and return itself.
- 
    
      #script_safe  
    
    rw
    Alias for #script_safe?. 
- 
    
      #generate(obj)  ⇒ String 
    
    Generates a valid ::JSONdocument from objectobjand returns the result.
- 
    
      #new(opts = {})  ⇒ State 
    
    constructor
    Instantiates a new Stateobject, configured by opts.
- 
    
      #initialize_copy(orig)  
    
    Initializes this object from orig if it can be duplicated/cloned and returns it. 
- 
    
      #merge(opts)  
    
    Alias for #configure. 
- 
    
      #to_h  ⇒ Hash 
      (also: #to_hash)
    
    Returns the configuration instance variables as a hash, that can be passed to the configure method. 
- 
    
      #to_hash  
    
    Alias for #to_h. 
- 
    
      #_configure(opts)  
    
    private
    avoid method redefinition warnings. 
- #_generate(obj, io) private
Constructor Details
.new(*args)
[ GitHub ]# File 'ext/json/generator/generator.c', line 1108
static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
{
    rb_warn("The json gem extension was loaded with the stdlib ruby code. You should upgrade rubygems with `gem update --system`");
    return self;
}
  
    #new(opts = {})  ⇒ State   
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 ::JSONobject (default: ”),
- 
array_nl: a string that is put at the end of a ::JSONarray (default: ”),
- 
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. 
- 
ascii_only: true if only ASCII characters should be generated. This option defaults to false. 
- 
buffer_initial_length: sets the initial length of the generator’s internal buffer. 
# File 'ext/json/lib/json/ext/generator/state.rb', line 25
def initialize(opts = nil) if opts && !opts.empty? configure(opts) end end
Class Method Details
.from_state(opts)
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 'ext/json/generator/generator.c', line 1145
static VALUE cState_from_state_s(VALUE self, VALUE opts)
{
    if (rb_obj_is_kind_of(opts, self)) {
        return opts;
    } else if (rb_obj_is_kind_of(opts, rb_cHash)) {
        return rb_funcall(self, i_new, 1, opts);
    } else {
        return rb_class_new_instance(0, NULL, cState);
    }
}
  .generate(obj, opts, io)
[ GitHub ]# File 'ext/json/generator/generator.c', line 1530
static VALUE cState_m_generate(VALUE klass, VALUE obj, VALUE opts, VALUE io)
{
    JSON_Generator_State state = {0};
    state_init(&state);
    configure_state(&state, opts);
    char stack_buffer[FBUFFER_STACK_SIZE];
    FBuffer buffer = {
        .io = RTEST(io) ? io : Qfalse,
    };
    fbuffer_stack_init(&buffer, state.buffer_initial_length, stack_buffer, FBUFFER_STACK_SIZE);
    struct generate_json_data data = {
        .buffer = &buffer,
        .vstate = Qfalse,
        .state = &state,
        .obj = obj,
        .func = generate_json,
    };
    rb_rescue(generate_json_try, (VALUE)&data, generate_json_rescue, (VALUE)&data);
    return fbuffer_finalize(&buffer);
}
  Instance Attribute Details
#allow_nan=(enable) (rw)
[ GitHub ]# File 'ext/json/generator/generator.c', line 1402
static VALUE cState_allow_nan_set(VALUE self, VALUE enable)
{
    GET_STATE(self);
    state->allow_nan = RTEST(enable);
    return Qnil;
}
  
    #allow_nan?  ⇒ Boolean  (rw)  
  [ GitHub ]
# File 'ext/json/generator/generator.c', line 1391
static VALUE cState_allow_nan_p(VALUE self)
{
    GET_STATE(self);
    return state->allow_nan ? Qtrue : Qfalse;
}
  #array_nl (rw)
This string is put at the end of a line that holds a ::JSON array.
# File 'ext/json/generator/generator.c', line 1268
static VALUE cState_array_nl(VALUE self)
{
    GET_STATE(self);
    return state->array_nl ? state->array_nl : rb_str_freeze(rb_utf8_str_new("", 0));
}
  #array_nl=(array_nl) (rw)
This string is put at the end of a line that holds a ::JSON array.
# File 'ext/json/generator/generator.c', line 1279
static VALUE cState_array_nl_set(VALUE self, VALUE array_nl)
{
    GET_STATE(self);
    RB_OBJ_WRITE(self, &state->array_nl, string_config(array_nl));
    return Qnil;
}
  #ascii_only=(enable) (rw)
This sets whether only ASCII characters should be generated.
# File 'ext/json/generator/generator.c', line 1426
static VALUE cState_ascii_only_set(VALUE self, VALUE enable)
{
    GET_STATE(self);
    state->ascii_only = RTEST(enable);
    return Qnil;
}
  
    #ascii_only?  ⇒ Boolean  (rw)  
Returns true, if only ASCII characters should be generated. Otherwise returns false.
# File 'ext/json/generator/generator.c', line 1415
static VALUE cState_ascii_only_p(VALUE self)
{
    GET_STATE(self);
    return state->ascii_only ? Qtrue : Qfalse;
}
  #buffer_initial_length (rw)
This integer returns the current initial length of the buffer.
# File 'ext/json/generator/generator.c', line 1462
static VALUE cState_buffer_initial_length(VALUE self)
{
    GET_STATE(self);
    return LONG2FIX(state->buffer_initial_length);
}
  #buffer_initial_length=(length) (rw)
This sets the initial length of the buffer to length, if length > 0, otherwise its value isn’t changed.
# File 'ext/json/generator/generator.c', line 1483
static VALUE cState_buffer_initial_length_set(VALUE self, VALUE buffer_initial_length)
{
    GET_STATE(self);
    buffer_initial_length_set(state, buffer_initial_length);
    return Qnil;
}
  
    #check_circular?  ⇒ Boolean  (readonly)  
Returns true, if circular data structures should be checked, otherwise returns false.
# File 'ext/json/generator/generator.c', line 1293
static VALUE cState_check_circular_p(VALUE self)
{
    GET_STATE(self);
    return state->max_nesting ? Qtrue : Qfalse;
}
  #depth (rw)
This integer returns the current depth of data structure nesting.
# File 'ext/json/generator/generator.c', line 1438
static VALUE cState_depth(VALUE self)
{
    GET_STATE(self);
    return LONG2FIX(state->depth);
}
  #depth=(depth) (rw)
This sets the maximum level of data structure nesting in the generated ::JSON to the integer depth, max_nesting = 0 if no maximum should be checked.
# File 'ext/json/generator/generator.c', line 1450
static VALUE cState_depth_set(VALUE self, VALUE depth)
{
    GET_STATE(self);
    state->depth = long_config(depth);
    return Qnil;
}
  
    
      #script_safe   (rw)
      #escape_slash  
    
  
Alias for #script_safe.
#indent (rw)
Returns the string that is used to indent levels in the ::JSON text.
# File 'ext/json/generator/generator.c', line 1161
static VALUE cState_indent(VALUE self)
{
    GET_STATE(self);
    return state->indent ? state->indent : rb_str_freeze(rb_utf8_str_new("", 0));
}
  #indent=(indent) (rw)
Sets the string that is used to indent levels in the ::JSON text.
# File 'ext/json/generator/generator.c', line 1183
static VALUE cState_indent_set(VALUE self, VALUE indent)
{
    GET_STATE(self);
    RB_OBJ_WRITE(self, &state->indent, string_config(indent));
    return Qnil;
}
  #max_nesting (rw)
This integer returns the maximum level of data structure nesting in the generated ::JSON, max_nesting = 0 if no maximum is checked.
# File 'ext/json/generator/generator.c', line 1305
static VALUE cState_max_nesting(VALUE self)
{
    GET_STATE(self);
    return LONG2FIX(state->max_nesting);
}
  #max_nesting=(depth) (rw)
This sets the maximum level of data structure nesting in the generated ::JSON to the integer depth, max_nesting = 0 if no maximum should be checked.
# File 'ext/json/generator/generator.c', line 1322
static VALUE cState_max_nesting_set(VALUE self, VALUE depth)
{
    GET_STATE(self);
    state->max_nesting = long_config(depth);
    return Qnil;
}
  #object_nl (rw)
This string is put at the end of a line that holds a ::JSON object (or Hash).
# File 'ext/json/generator/generator.c', line 1244
static VALUE cState_object_nl(VALUE self)
{
    GET_STATE(self);
    return state->object_nl ? state->object_nl : rb_str_freeze(rb_utf8_str_new("", 0));
}
  #object_nl=(object_nl) (rw)
This string is put at the end of a line that holds a ::JSON object (or Hash).
# File 'ext/json/generator/generator.c', line 1256
static VALUE cState_object_nl_set(VALUE self, VALUE object_nl)
{
    GET_STATE(self);
    RB_OBJ_WRITE(self, &state->object_nl, string_config(object_nl));
    return Qnil;
}
  #script_safe (rw) Also known as: #script_safe?, #escape_slash
If this boolean is true, the forward slashes will be escaped in the json output.
# File 'ext/json/generator/generator.c', line 1335
static VALUE cState_script_safe(VALUE self)
{
    GET_STATE(self);
    return state->script_safe ? Qtrue : Qfalse;
}
  #script_safe=(enable) (rw) Also known as: #escape_slash=
This sets whether or not the forward slashes will be escaped in the json output.
# File 'ext/json/generator/generator.c', line 1347
static VALUE cState_script_safe_set(VALUE self, VALUE enable)
{
    GET_STATE(self);
    state->script_safe = RTEST(enable);
    return Qnil;
}
  
    
      #script_safe   (rw)
      #script_safe?  
    
    Also known as: #escape_slash?
  
Alias for #script_safe.
#space (rw)
Returns the string that is used to insert a space between the tokens in a ::JSON string.
# File 'ext/json/generator/generator.c', line 1196
static VALUE cState_space(VALUE self)
{
    GET_STATE(self);
    return state->space ? state->space : rb_str_freeze(rb_utf8_str_new("", 0));
}
  #space=(space) (rw)
Sets space to the string that is used to insert a space between the tokens in a ::JSON string.
# File 'ext/json/generator/generator.c', line 1208
static VALUE cState_space_set(VALUE self, VALUE space)
{
    GET_STATE(self);
    RB_OBJ_WRITE(self, &state->space, string_config(space));
    return Qnil;
}
  #space_before (rw)
Returns the string that is used to insert a space before the ‘:’ in ::JSON objects.
# File 'ext/json/generator/generator.c', line 1220
static VALUE cState_space_before(VALUE self)
{
    GET_STATE(self);
    return state->space_before ? state->space_before : rb_str_freeze(rb_utf8_str_new("", 0));
}
  #space_before=(space_before) (rw)
Sets the string that is used to insert a space before the ‘:’ in ::JSON objects.
# File 'ext/json/generator/generator.c', line 1231
static VALUE cState_space_before_set(VALUE self, VALUE space_before)
{
    GET_STATE(self);
    RB_OBJ_WRITE(self, &state->space_before, string_config(space_before));
    return Qnil;
}
  #strict (rw) Also known as: #strict?
If this boolean is false, types unsupported by the ::JSON format will be serialized as strings. If this boolean is true, types unsupported by the ::JSON format will raise a ::JSON::GeneratorError.
# File 'ext/json/generator/generator.c', line 1362
static VALUE cState_strict(VALUE self)
{
    GET_STATE(self);
    return state->strict ? Qtrue : Qfalse;
}
  #strict=(enable) (rw)
This sets whether or not to serialize types unsupported by the ::JSON format as strings. If this boolean is false, types unsupported by the ::JSON format will be serialized as strings. If this boolean is true, types unsupported by the ::JSON format will raise a ::JSON::GeneratorError.
# File 'ext/json/generator/generator.c', line 1378
static VALUE cState_strict_set(VALUE self, VALUE enable)
{
    GET_STATE(self);
    state->strict = RTEST(enable);
    return Qnil;
}
  
    
      #strict   (rw)
      #strict?  
    
  
Alias for #strict.
Instance Method Details
#[](name)
Returns the value returned by method name.
# File 'ext/json/lib/json/ext/generator/state.rb', line 94
def [](name) if respond_to?(name) __send__(name) else instance_variable_get("@#{name}") if instance_variables.include?("@#{name}".to_sym) # avoid warning end end
#[]=(name, value)
Sets the attribute name to value.
# File 'ext/json/lib/json/ext/generator/state.rb', line 106
def []=(name, value) if respond_to?(name_writer = "#{name}=") __send__ name_writer, value else instance_variable_set "@#{name}", value end end
#_configure(opts) (private)
avoid method redefinition warnings
# File 'ext/json/generator/generator.c', line 1523
static VALUE cState_configure(VALUE self, VALUE opts)
{
    GET_STATE(self);
    configure_state(state, opts);
    return self;
}
  #_generate(obj, io) (private)
[ GitHub ]# File 'ext/json/generator/generator.c', line 1100
static VALUE cState_generate(VALUE self, VALUE obj, VALUE io)
{
    VALUE result = cState_partial_generate(self, obj, generate_json, io);
    GET_STATE(self);
    (void)state;
    return result;
}
  #configure(opts) Also known as: #merge
Configure this State instance with the Hash opts, and return itself.
# File 'ext/json/lib/json/ext/generator/state.rb', line 35
def configure(opts) unless opts.is_a?(Hash) 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 end _configure(opts) end
    
      #script_safe   (rw)
      #script_safe?  
    
  
Alias for #script_safe?.
    
      #generate(obj)  ⇒ String 
      #generate(obj, anIO)  ⇒ anIO 
    
  
String 
      #generate(obj, anIO)  ⇒ anIO 
    Generates a valid ::JSON document from object obj and returns the result. If no valid ::JSON document can be created this method raises a ::JSON::GeneratorError exception.
# File 'ext/json/lib/json/ext/generator/state.rb', line 57
def generate(obj, io = nil) _generate(obj, io) end
#initialize_copy(orig)
Initializes this object from orig if it can be duplicated/cloned and returns it.
# File 'ext/json/generator/generator.c', line 1120
static VALUE cState_init_copy(VALUE obj, VALUE orig)
{
    JSON_Generator_State *objState, *origState;
    if (obj == orig) return obj;
    GET_STATE_TO(obj, objState);
    GET_STATE_TO(orig, origState);
    if (!objState) rb_raise(rb_eArgError, "unallocated JSON::State");
    MEMCPY(objState, origState, JSON_Generator_State, 1);
    objState->indent = origState->indent;
    objState->space = origState->space;
    objState->space_before = origState->space_before;
    objState->object_nl = origState->object_nl;
    objState->array_nl = origState->array_nl;
    return obj;
}
  #merge(opts)
Alias for #configure.
# File 'ext/json/lib/json/ext/generator/state.rb', line 48
alias_method :merge, :configure
    #to_h  ⇒ Hash     Also known as: #to_hash
  
Returns the configuration instance variables as a hash, that can be passed to the configure method.
# File 'ext/json/lib/json/ext/generator/state.rb', line 65
def to_h result = { indent: indent, space: space, space_before: space_before, object_nl: object_nl, array_nl: array_nl, allow_nan: allow_nan?, ascii_only: ascii_only?, max_nesting: max_nesting, script_safe: script_safe?, strict: strict?, depth: depth, buffer_initial_length: buffer_initial_length, } instance_variables.each do |iv| iv = iv.to_s[1..-1] result[iv.to_sym] = self[iv] end result end
#to_hash
Alias for #to_h.
# File 'ext/json/lib/json/ext/generator/state.rb', line 89
alias_method :to_hash, :to_h