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
70 71 72 73 74 75 76 77 78 |
# File 'lib/graphql/upgrader/member.rb', line 70 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]
Int
->Integer
X!
->X
Notice that !
is removed sometimes, because it doesn’t exist in the class API.
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 60 61 |
# File 'lib/graphql/upgrader/member.rb', line 29 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:) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/graphql/upgrader/member.rb', line 80 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
92 93 94 |
# File 'lib/graphql/upgrader/member.rb', line 92 def trim_lines(input_text) input_text.gsub(/ +$/, "") end |
#underscorize(str) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/graphql/upgrader/member.rb', line 63 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 |