class SuperDiff::OperationTreeFlatteners::Collection

Protected Instance Methods

add_comma_at_end_of_lines(lines) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 75
def add_comma_at_end_of_lines(lines)
  lines[0..-2] + [lines[-1].with_comma]
end
add_prefix_at_beginning_of_lines(lines, operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 53
def add_prefix_at_beginning_of_lines(lines, operation)
  [lines[0].prefixed_with(item_prefix_for(operation))] +
    lines[1..-1]
end
add_prefix_at_beginning_of_lines?(operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 49
def add_prefix_at_beginning_of_lines?(operation)
  !!item_prefix_for(operation)
end
build_lines_for_change_operation(operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 79
def build_lines_for_change_operation(operation)
  SuperDiff::RecursionGuard.guarding_recursion_of(
    operation.left_collection,
    operation.right_collection,
  ) do |already_seen|
    if already_seen
      raise InfiniteRecursionError
    else
      operation.children.flatten(
        indentation_level: indentation_level + 1,
      )
    end
  end
end
build_lines_for_non_change_operation(operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 94
def build_lines_for_non_change_operation(operation)
  indentation_level = @indentation_level + 1

  if recursive_operation?(operation)
    [
      Line.new(
        type: operation.name,
        indentation_level: indentation_level,
        value: SuperDiff::RecursionGuard::PLACEHOLDER,
      ),
    ]
  else
    build_lines_from_inspection_of(
      operation.value,
      type: operation.name,
      indentation_level: indentation_level,
    )
  end
end
build_lines_from_inspection_of(value, type:, indentation_level:) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 123
def build_lines_from_inspection_of(value, type:, indentation_level:)
  SuperDiff.inspect_object(
    value,
    as_lines: true,
    type: type,
    indentation_level: indentation_level,
  )
end
build_tiered_lines() click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 6
def build_tiered_lines
  [
    Line.new(
      type: :noop,
      indentation_level: indentation_level,
      value: open_token,
      collection_bookend: :open,
    ),
    *inner_lines,
    Line.new(
      type: :noop,
      indentation_level: indentation_level,
      value: close_token,
      collection_bookend: :close,
    ),
  ]
end
inner_lines() click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 24
def inner_lines
  @_inner_lines ||= operation_tree.
    flat_map do |operation|
      lines =
        if operation.name == :change
          build_lines_for_change_operation(operation)
        else
          build_lines_for_non_change_operation(operation)
        end

      maybe_add_prefix_at_beginning_of_lines(
        maybe_add_comma_at_end_of_lines(lines, operation),
        operation,
      )
    end
end
item_prefix_for(_operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 119
def item_prefix_for(_operation)
  ""
end
last_item_in_collection?(operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 66
def last_item_in_collection?(operation)
  if operation.name == :change
    operation.left_index == operation.left_collection.size - 1 &&
      operation.right_index == operation.right_collection.size - 1
  else
    operation.index == operation.collection.size - 1
  end
end
maybe_add_comma_at_end_of_lines(lines, operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 58
def maybe_add_comma_at_end_of_lines(lines, operation)
  if last_item_in_collection?(operation)
    lines
  else
    add_comma_at_end_of_lines(lines)
  end
end
maybe_add_prefix_at_beginning_of_lines(lines, operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 41
def maybe_add_prefix_at_beginning_of_lines(lines, operation)
  if add_prefix_at_beginning_of_lines?(operation)
    add_prefix_at_beginning_of_lines(lines, operation)
  else
    lines
  end
end
recursive_operation?(operation) click to toggle source
# File lib/super_diff/operation_tree_flatteners/collection.rb, line 114
def recursive_operation?(operation)
  operation.value.equal?(operation.collection) ||
    SuperDiff::RecursionGuard.already_seen?(operation.value)
end