Module: Kaitai::Struct::Visualizer
- Defined in:
- lib/kaitai/struct/visualizer/version.rb,
lib/kaitai/struct/visualizer/obj_to_h.rb,
lib/kaitai/struct/visualizer/hex_viewer.rb,
lib/kaitai/struct/visualizer/visualizer.rb,
lib/kaitai/struct/visualizer/ksy_compiler.rb,
lib/kaitai/struct/visualizer/ks_error_matcher.rb,
lib/kaitai/struct/visualizer/parser.rb,
lib/kaitai/struct/visualizer/tree.rb,
lib/kaitai/struct/visualizer/node.rb
Defined Under Namespace
Classes: HexViewer, KSErrorMatcher, KSYCompiler, Node, Parser, Tree, Visualizer
Constant Summary collapse
- VERSION =
'0.11'
Class Method Summary collapse
-
.obj_to_h(obj) ⇒ Object
Recursively convert object received from Kaitai Struct to a hash.
Class Method Details
.obj_to_h(obj) ⇒ Object
Recursively convert object received from Kaitai Struct to a hash. Used by ksdump to prepare data for JSON/XML/YAML output.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/kaitai/struct/visualizer/obj_to_h.rb', line 6 def self.obj_to_h(obj) if (obj == true) || (obj == false) || obj.is_a?(Numeric) || obj.nil? obj elsif obj.is_a?(Symbol) obj.to_s elsif obj.is_a?(String) if obj.encoding == Encoding::ASCII_8BIT r = +'' obj.each_byte { |x| r << format('%02X ', x) } r.chop! r else obj.encode('UTF-8') end elsif obj.is_a?(Array) obj.map { |x| obj_to_h(x) } else return "OPAQUE (#{obj.class})" unless obj.is_a?(Kaitai::Struct::Struct) root = {} prop_meths = obj.public_methods(false) prop_meths.sort.each do |meth| k = meth.to_s next if (k.start_with?('_') && !k.start_with?('_unnamed')) || meth == :to_s el = obj.send(meth) v = obj_to_h(el) root[k] = v unless v.nil? end root end end |