Class: Yogurt::CodeGenerator::InputClass

Inherits:
T::Struct
  • Object
show all
Extended by:
T::Sig
Includes:
DefinedClass, Utils
Defined in:
lib/yogurt/code_generator/input_class.rb

Overview

Input classes are used for input objects

Instance Method Summary collapse

Methods included from DefinedClass

#name

Methods included from Utils

#camelize, #generate_method_name, #generate_pretty_print, #indent, #possible_types_constant, #typename_method, #underscore

Instance Method Details

#dependenciesObject



16
17
18
# File 'lib/yogurt/code_generator/input_class.rb', line 16

def dependencies
  arguments.map(&:dependency).compact
end

#to_rubyObject



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
# File 'lib/yogurt/code_generator/input_class.rb', line 21

def to_ruby
  extract = []
  props = []
  serializers = []
  arguments.sort.each do |definition|
    props << "prop #{definition.name.inspect}, #{definition.signature}"
    extract << "#{definition.name} = self.#{definition.name}"
    serializers.push("      \#{definition.graphql_name.inspect} => \#{definition.serializer.strip},\n    STRING\n  end\n\n  <<~STRING\n    class \#{name} < T::Struct\n      extend T::Sig\n\n      \#{indent(props.join(\"\\n\"), 1).strip}\n\n      sig {returns(T::Hash[String, T.untyped])}\n      def serialize\n        \#{indent(extract.join(\"\\n\"), 2).strip}\n\n        {\n          \#{indent(serializers.join(\"\\n\"), 3).strip}\n        }\n      end\n    end\n  STRING\nend\n".strip)