[ANN] marshal-structure 1.0 Released

* https://github.com/drbrain/marshal-structure

This gem is part of #rbxday, but instead of contributing to Rubinius, it mostly takes from Rubinius!

Dumps a tree based on the Marshal format. Supports the Marshal 4.8 format.

=== INSTALL

  gem install marshal-structure

=== SYNOPSIS

From the command line:

  ruby -rpp -rmarshal-structure \
    -e 'pp Marshal::Structure.load Marshal.dump "hello"'

Fancier usage:

  require 'pp'
  require 'marshal-structure'

  ms = Marshal::Structure.new Marshal.dump %w[hello world]

  # print the Marshal stream structure
  pp ms.construct

  # print ruby objects in Marshal stream
  pp ms.objects

=== EXAMPLE

  str =
    "\004\b{\006:\006a[\031c\006Bm\006C\"\006d/\006e\000i\006" \
    "f\0322.2999999999999998\000ff" \
    "l+\n\000\000\000\000\000\000\000\000\001\0000TF}\000i\000" \
    "S:\006S\006:\006fi\000o:\vObject\000@\017" \
    "U:\006M\"\021marshal_dump" \
    "Iu:\006U\n_dump\006" \
    ":\026@ivar_on_dump_str\"\036value on ivar on dump str" \
    ";\000e:\006Eo;\b\000" \
    "I\"\025string with ivar\006:\v@value\"\017some value" \
    "C:\016BenString\"\000"
  
  structure = Marshal::Structure.load str
  
  pp structure

Prints:

  [:hash,
   0,
   1,
   [:symbol, 0, "a"],
   [:array,
    1,
    20,
    [:class, 2, "B"],
    [:module, 3, "C"],
    [:string, 4, "d"],
    [:regexp, 5, "e", 0],
    [:fixnum, 1],
    [:float, 6, "2.2999999999999998\u0000ff"],
    [:bignum, 7, 1, 10, 18446744073709551616],
    :nil,
    :true,
    :false,
    [:hash_default, 8, 0, [:fixnum, 0]],
    [:struct, 9, [:symbol, 1, "S"], 1, [:symbol, 2, "f"], [:fixnum, 0]],
    [:object, 10, [:symbol, 3, "Object"], [0]],
    [:link, 10],
    [:user_marshal, 11, [:symbol, 4, "M"], [:string, 12, "marshal_dump"]],
    [:instance_variables,
     [:user_defined, 13, [:symbol, 5, "U"], "_dump"],
     1,
     [:symbol, 6, "@ivar_on_dump_str"],
     [:string, 14, "value on ivar on dump str"]],
    [:symbol_link, 0],
    [:extended, [:symbol, 7, "E"], [:object, 15, [:symbol_link, 3], [0]]],
    [:instance_variables,
     [:string, 16, "string with ivar"],
     1,
     [:symbol, 8, "@value"],
     [:string, 17, "some value"]],
    [:user_class, [:symbol, 9, "BenString"], [:string, 18, ""]]]]