class GraphQL::Upgrader::Transform
Public Instance Methods
apply(input_text)
click to toggle source
@param input_text [String] Untransformed GraphQL-Ruby code @return [String] The input text, with a transformation applied if necessary
# File lib/graphql/upgrader/member.rb, line 14 def apply(input_text) raise NotImplementedError, "Return transformed text here" end
apply_processor(input_text, processor)
click to toggle source
# File lib/graphql/upgrader/member.rb, line 69 def apply_processor(input_text, processor) ruby_ast = Parser::CurrentRuby.parse(input_text) processor.process(ruby_ast) processor rescue Parser::SyntaxError puts "Error text:" puts input_text raise end
normalize_type_expression(type_expr, preserve_bang: false)
click to toggle source
Recursively transform a `.define`-DSL-based type expression into a class-ready expression, for example:
-
`types` -> `[X, null: true]`
-
`Int` -> `Integer`
-
`X!` -> `X`
Notice that `!` is removed sometimes, because it doesn't exist in the class API.
@param type_expr [String] A `.define`-ready expression of a return type or input type @return [String] A class-ready expression of the same type`
# File lib/graphql/upgrader/member.rb, line 28 def normalize_type_expression(type_expr, preserve_bang: false) case type_expr when /\A!/ # Handle the bang, normalize the inside "#{preserve_bang ? "!" : ""}#{normalize_type_expression(type_expr[1..-1], preserve_bang: preserve_bang)}" when /\Atypes\[.*\]\Z/ # Unwrap the brackets, normalize, then re-wrap inner_type = type_expr[6..-2] if inner_type.start_with?("!") nullable = false inner_type = inner_type[1..-1] else nullable = true end "[#{normalize_type_expression(inner_type, preserve_bang: preserve_bang)}#{nullable ? ", null: true" : ""}]" when /\Atypes\./ # Remove the prefix normalize_type_expression(type_expr[6..-1], preserve_bang: preserve_bang) when /\A->/ # Remove the proc wrapper, don't re-apply it # because stabby is not supported in class-based definition # (and shouldn't ever be necessary) unwrapped = type_expr .sub(/\A->\s?\{\s*/, "") .sub(/\s*\}/, "") normalize_type_expression(unwrapped, preserve_bang: preserve_bang) when "Int" "Integer" else type_expr end end
reindent_lines(input_text, from_indent:, to_indent:)
click to toggle source
# File lib/graphql/upgrader/member.rb, line 79 def reindent_lines(input_text, from_indent,, to_indent)) prev_indent = " " * from_indent next_indent = " " * to_indent # For each line, remove the previous indent, then add the new indent lines = input_text.split("\n").map do |line| line = line.sub(prev_indent, "") "#{next_indent}#{line}".rstrip end lines.join("\n") end
trim_lines(input_text)
click to toggle source
Remove trailing whitespace
# File lib/graphql/upgrader/member.rb, line 91 def trim_lines(input_text) input_text.gsub(/ +$/, "") end
underscorize(str)
click to toggle source
# File lib/graphql/upgrader/member.rb, line 62 def underscorize(str) str .gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2') # URLDecoder -> URL_Decoder .gsub(/([a-z\d])([A-Z])/,'\1_\2') # someThing -> some_Thing .downcase end