Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Bushong <bushong1@gmail.com>2014-09-05 21:30:55 +0400
committerCharles Bushong <bushong1@gmail.com>2014-09-05 21:30:55 +0400
commit858dbd084253d2920d7007babe0471469eb459e7 (patch)
tree9ac2119b4b6b81af2c3a420628d8f20d06053f74 /lib/gitlab/snippet_search_results.rb
parentb1411e90f81ea87ad45dee324b13881095e031ea (diff)
Updating to persist a params snippets variable
Diffstat (limited to 'lib/gitlab/snippet_search_results.rb')
-rw-r--r--lib/gitlab/snippet_search_results.rb45
1 files changed, 38 insertions, 7 deletions
diff --git a/lib/gitlab/snippet_search_results.rb b/lib/gitlab/snippet_search_results.rb
index 04217aab49f..938219efdb2 100644
--- a/lib/gitlab/snippet_search_results.rb
+++ b/lib/gitlab/snippet_search_results.rb
@@ -48,53 +48,84 @@ module Gitlab
'snippet_blobs'
end
- def bounded_line_numbers(line, min, max, surrounding_lines)
+ # Get an array of line numbers surrounding a matching
+ # line, bounded by min/max.
+ #
+ # @returns Array of line numbers
+ def bounded_line_numbers(line, min, max)
lower = line - surrounding_lines > min ? line - surrounding_lines : min
upper = line + surrounding_lines < max ? line + surrounding_lines : max
(lower..upper).to_a
end
- def chunk_snippet(snippet)
- surrounding_lines = 3
+ # Returns a sorted set of lines to be included in a snippet preview.
+ # This ensures matching adjacent lines do not display duplicated
+ # surrounding code.
+ #
+ # @returns Array, unique and sorted.
+ def matching_lines(lined_content)
used_lines = []
- lined_content = snippet.content.split("\n")
lined_content.each_with_index do |line, line_number|
used_lines.concat bounded_line_numbers(
line_number,
0,
- lined_content.size,
- surrounding_lines
+ lined_content.size
) if line.include?(query)
end
- used_lines = used_lines.uniq.sort
+ used_lines.uniq.sort
+ end
+
+ # 'Chunkify' entire snippet. Splits the snippet data into matching lines +
+ # surrounding_lines() worth of unmatching lines.
+ #
+ # @returns a hash with {snippet_object, snippet_chunks:{data,start_line}}
+ def chunk_snippet(snippet)
+ lined_content = snippet.content.split("\n")
+ used_lines = matching_lines(lined_content)
snippet_chunk = []
snippet_chunks = []
snippet_start_line = 0
last_line = -1
+
+ # Go through each used line, and add consecutive lines as a single chunk
+ # to the snippet chunk array.
used_lines.each do |line_number|
if last_line < 0
+ # Start a new chunk.
snippet_start_line = line_number
snippet_chunk << lined_content[line_number]
elsif last_line == line_number - 1
+ # Consecutive line, continue chunk.
snippet_chunk << lined_content[line_number]
else
+ # Non-consecutive line, add chunk to chunk array.
snippet_chunks << {
data: snippet_chunk.join("\n"),
start_line: snippet_start_line + 1
}
+
+ # Start a new chunk.
snippet_chunk = [lined_content[line_number]]
snippet_start_line = line_number
end
last_line = line_number
end
+ # Add final chunk to chunk array
snippet_chunks << {
data: snippet_chunk.join("\n"),
start_line: snippet_start_line + 1
}
+ # Return snippet with chunk array
{ snippet_object: snippet, snippet_chunks: snippet_chunks }
end
+
+ # Defines how many unmatching lines should be
+ # included around the matching lines in a snippet
+ def surrounding_lines
+ 3
+ end
end
end