Sha256: de35af64cd79a091cb421241f9b5203c253ef2a38c5d48fab3edcfc2e4fc0141

Contents?: true

Size: 1.23 KB

Versions: 26

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true
module GraphQL
  module Language
    module BlockString
      # 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
      def self.trim_whitespace(str)
        lines = str.split("\n")
        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 = line[/\A */].size
          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
          lines.each_with_index do |line, idx|
            if idx == 0
              next
            else
              line[0, common_indent] = ""
            end
          end
        end

        # Remove leading & trailing blank lines
        while lines.first.empty?
          lines.shift
        end
        while lines.last.empty?
          lines.pop
        end

        # Rebuild the string
        lines.join("\n")
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
graphql-1.7.12 lib/graphql/language/block_string.rb
graphql-1.7.11 lib/graphql/language/block_string.rb
graphql-1.7.10 lib/graphql/language/block_string.rb
graphql-1.8.0.pre6 lib/graphql/language/block_string.rb
graphql-1.8.0.pre5 lib/graphql/language/block_string.rb
graphql-1.7.9 lib/graphql/language/block_string.rb