Module: SuperDiff::ObjectInspection::Inspectors

Defined in:
lib/super_diff/object_inspection/inspectors.rb,
lib/super_diff/object_inspection/inspectors/hash.rb,
lib/super_diff/object_inspection/inspectors/time.rb,
lib/super_diff/object_inspection/inspectors/array.rb,
lib/super_diff/object_inspection/inspectors/string.rb,
lib/super_diff/object_inspection/inspectors/primitive.rb,
lib/super_diff/object_inspection/inspectors/custom_object.rb,
lib/super_diff/object_inspection/inspectors/default_object.rb

Constant Summary collapse

Hash =
InspectionTree.new do
  when_empty do
    add_text "{}"
  end

  when_non_empty do
    add_text "{"

    nested do |hash|
      insert_hash_inspection_of(hash)
    end

    add_break " "
    add_text "}"
  end
end
TIME_FORMAT =
"%Y-%m-%d %H:%M:%S.%3N %Z %:z".freeze
Time =
InspectionTree.new do
  add_text do |time|
    "#{time.strftime(TIME_FORMAT)} (#{time.class})"
  end
end
Array =
InspectionTree.new do
  when_empty do
    add_text "[]"
  end

  when_non_empty do
    add_text "["

    nested do |array|
      insert_array_inspection_of(array)
    end

    add_break
    add_text "]"
  end
end
String =
InspectionTree.new do
  # rubocop:disable Style/SymbolProc
  add_text do |string|
    string.inspect
  end
  # rubocop:enable Style/SymbolProc
end
Primitive =
InspectionTree.new do
  # rubocop:disable Style/SymbolProc
  add_text do |object|
    object.inspect
  end
  # rubocop:enable Style/SymbolProc
end
CustomObject =
InspectionTree.new do
  add_text do |object|
    "#<#{object.class}"
  end

  when_multiline do
    add_text " {"
  end

  nested do |object|
    insert_hash_inspection_of(object.attributes_for_super_diff)
  end

  add_break

  when_multiline do
    add_text "}"
  end

  add_text ">"
end
DefaultObject =
InspectionTree.new do
  when_empty do
    add_text do |object|
      object.inspect
    end
  end

  when_non_empty do
    when_singleline do
      add_text do |object|
        object.inspect
      end
    end

    when_multiline do
      add_text do |object|
        "#<%<class>s:0x%<id>x {" % {
          class: object.class,
          id: object.object_id * 2,
        }
      end

      nested do |object|
        add_break " "

        insert_separated_list(
          object.instance_variables.sort,
          separator: ","
        ) do |name|
          add_text name.to_s
          add_text "="
          add_inspection_of object.instance_variable_get(name)
        end
      end

      add_break

      add_text "}>"
    end
  end
end