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