Module: GraphQL::Language::BlockString
- Defined in:
- lib/graphql/language/block_string.rb
Class Method Summary collapse
-
.print(str, indent: '') ⇒ Object
-
.trim_whitespace(str) ⇒ Object
Remove leading and trailing whitespace from a block string.
Class Method Details
.print(str, indent: '') ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/graphql/language/block_string.rb', line 61 def self.print(str, indent: '') lines = str.split("\n") block_str = "#{indent}\"\"\"\n".dup lines.each do |line| if line == '' block_str << "\n" else sublines = break_line(line, 120 - indent.length) sublines.each do |subline| block_str << "#{indent}#{subline}\n" end end end block_str << "#{indent}\"\"\"\n".dup end |
.trim_whitespace(str) ⇒ Object
Remove leading and trailing whitespace from a block string. See “Block Strings” in https://github.com/facebook/graphql/blob/master/spec/Section%202%20–%20Language.md
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/graphql/language/block_string.rb', line 7 def self.trim_whitespace(str) # Early return for the most common cases: if str == "" return "".dup elsif !(has_newline = str.include?("\n")) && !(str.start_with?(" ")) return str end lines = has_newline ? str.split("\n") : [str] common_indent = nil # find the common whitespace lines.each_with_index do |line, idx| if idx == 0 next end line_length = line.size line_indent = if line.match?(/\A [^ ]/) 2 elsif line.match?(/\A [^ ]/) 4 elsif line.match?(/\A[^ ]/) 0 else line[/\A */].size end if line_indent < line_length && (common_indent.nil? || line_indent < common_indent) common_indent = line_indent end end # Remove the common whitespace if common_indent && common_indent > 0 lines.each_with_index do |line, idx| if idx == 0 next else line.slice!(0, common_indent) end end end # Remove leading & trailing blank lines while lines.size > 0 && lines[0].empty? lines.shift end while lines.size > 0 && lines[-1].empty? lines.pop end # Rebuild the string lines.size > 1 ? lines.join("\n") : (lines.first || "".dup) end |