Class: GraphQL::Upgrader::Transform
- Inherits:
-
Object
- Object
- GraphQL::Upgrader::Transform
- Defined in:
- lib/graphql/upgrader/member.rb
Direct Known Subclasses
ConfigurationToKwargTransform, InterfacesToImplementsTransform, MutationDefineToClassTransform, MutationResolveProcToMethodTransform, NameTransform, PositionalTypeArgTransform, PossibleTypesTransform, ProcToClassMethodTransform, PropertyToMethodTransform, RemoveEmptyBlocksTransform, RemoveExcessWhitespaceTransform, RemoveMethodParensTransform, RemoveRedundantKwargTransform, ResolveProcToMethodTransform, TypeDefineToClassTransform, UnderscoreizeFieldNameTransform, UnderscorizeMutationHashTransform, UpdateMethodSignatureTransform
Instance Method Summary collapse
-
#apply(input_text) ⇒ String
The input text, with a transformation applied if necessary.
- #apply_processor(input_text, processor) ⇒ Object
-
#normalize_type_expression(type_expr, preserve_bang: false) ⇒ String
Recursively transform a
.define
-DSL-based type expression into a class-ready expression, for example:. - #reindent_lines(input_text, from_indent:, to_indent:) ⇒ Object
-
#trim_lines(input_text) ⇒ Object
Remove trailing whitespace.
- #underscorize(str) ⇒ Object
Instance Method Details
#apply(input_text) ⇒ String
Returns The input text, with a transformation applied if necessary.
15 16 17 |
# File 'lib/graphql/upgrader/member.rb', line 15 def apply(input_text) raise NotImplementedError, "Return transformed text here" end |
#apply_processor(input_text, processor) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/graphql/upgrader/member.rb', line 74 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) ⇒ String
Recursively transform a .define
-DSL-based type expression into a class-ready expression, for example:
types[X]
->[X, null: true]
types[X.to_non_null_type]
->[X]
Int
->Integer
X!
->X
Notice that !
is removed sometimes, because it doesn't exist in the class API.
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 60 61 62 63 64 65 |
# File 'lib/graphql/upgrader/member.rb', line 30 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] elsif inner_type.end_with?(".to_non_null_type") nullable = false inner_type = inner_type[0...-17] 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:) ⇒ Object
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/graphql/upgrader/member.rb', line 84 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) ⇒ Object
Remove trailing whitespace
96 97 98 |
# File 'lib/graphql/upgrader/member.rb', line 96 def trim_lines(input_text) input_text.gsub(/ +$/, "") end |
#underscorize(str) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/graphql/upgrader/member.rb', line 67 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 |