Sha256: b94ced3fdb94fb7294080d029d4045521bf8f69ab736b838d660b52023dc869f

Contents?: true

Size: 1.37 KB

Versions: 33

Compression:

Stored size: 1.37 KB

Contents

require 'active_support'

module Inspect
  extend ActiveSupport::Concern

  def inspect
    [
      [
        [
          [
            to_s.match('LHS::Data') ? 'Data of ' : nil,
            self.class
          ].join,
          _inspect_id
        ].join(' '),
        _inspect_path
      ].compact.join("\n"),
      pretty_raw
    ].compact.join("\n")
  end

  private

  def _inspect_id
    _root.href || (_root.item? ? _root.id : nil) || object_id
  end

  def _inspect_path
    current = self
    path = []
    _collect_parents_for_inspect!(path, current)
    return unless path.present?
    "> #{path.reverse.join(' > ')}"
  end

  def _collect_parents_for_inspect!(path, current)
    return unless current.parent
    parent_raw = current.parent._raw
    if parent_raw.is_a?(Array)
      parent_raw.each_with_index do |element, index|
        path.push(index) if element == current._raw
      end
    elsif parent_raw.is_a?(Hash)
      parent_raw.each do |key, value|
        path.push(key) if value == current._raw
      end
    end
    _collect_parents_for_inspect!(path, current.parent)
  end

  def pretty_raw
    return if _raw.blank?
    if _raw.is_a?(Array)
      _raw
    else
      _raw.to_a.map do |key, value|
        ":#{key} => " +
          if value.is_a? String
            "\"#{value}\""
          else
            value.to_s
          end
      end
    end.join("\n")
  end
end

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
lhs-11.3.3 lib/lhs/concerns/inspect.rb
lhs-11.3.2 lib/lhs/concerns/inspect.rb
lhs-11.3.1 lib/lhs/concerns/inspect.rb
lhs-11.3.0 lib/lhs/concerns/inspect.rb
lhs-11.2.2 lib/lhs/concerns/inspect.rb
lhs-11.2.1 lib/lhs/concerns/inspect.rb
lhs-11.2.0 lib/lhs/concerns/inspect.rb
lhs-11.1.0 lib/lhs/concerns/inspect.rb
lhs-11.0.3 lib/lhs/concerns/inspect.rb
lhs-11.0.2 lib/lhs/concerns/inspect.rb
lhs-11.0.1 lib/lhs/concerns/inspect.rb
lhs-11.0.0 lib/lhs/concerns/inspect.rb
lhs-10.1.1 lib/lhs/concerns/inspect.rb
lhs-10.1.0 lib/lhs/concerns/inspect.rb
lhs-10.0.0 lib/lhs/concerns/inspect.rb
lhs-9.1.1 lib/lhs/concerns/inspect.rb
lhs-9.1.0 lib/lhs/concerns/inspect.rb
lhs-9.0.4 lib/lhs/concerns/inspect.rb
lhs-9.0.3 lib/lhs/concerns/inspect.rb
lhs-9.0.2 lib/lhs/concerns/inspect.rb