Sha256: a6254c0dbfb0124090a845ad9a6ea5c45be878a419ab2c4b674ec7282f434c39

Contents?: true

Size: 1.22 KB

Versions: 2

Compression:

Stored size: 1.22 KB

Contents

module RShade
  module Formatter
    class Json
      attr_reader :event_processor

      # @param [RShade::EventProcessor] event_store
      def call(event_store)
        @event_store = event_store
        flat
      end

      def flat
        arr = []
        event_store.each do |node|
          arr << item(node.event)
        end
        arr.sort_by { |item| item[:level]}
      end

      def hierarchical
        hash = {}
        event_store.each do |node|
          depth = node.level
          ref = hash_iterate(hash, depth)
          ref[:data] = item(node)
        end
        sort_hash(hash)
      end

      def sort_hash(h)
        {}.tap do |h2|
          h.sort.each do |k,v|
            h2[k] = v.is_a?(Hash) ? sort_hash(v) : v
          end
        end
      end

      def hash_iterate(hash, depth)
        (0..depth).each do |lvl|
          unless hash[:inner]
            hash[:inner] = {}
          end
          hash = hash[:inner]
        end
        hash
      end

      def item(value)
        {
          class: value.klass.to_s,
          method_name: value.method_name,
          full_path: "#{value.path}:#{value.lineno}",
          level: value.depth,
          vars: value.vars
        }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rshade-0.1.9.1 lib/rshade/formatter/json.rb
rshade-0.1.9 lib/rshade/formatter/json.rb