Class: Foobara::RemoteGenerator::Services::CommandResultGenerator

Inherits:
TypescriptFromManifestBaseGenerator show all
Defined in:
foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb

Constant Summary

Constants included from TruncatedInspect

TruncatedInspect::MAX_LENGTH

Instance Attribute Summary

Attributes inherited from FilesGenerator

#belongs_to_dependency_group, #relevant_manifest

Instance Method Summary collapse

Methods inherited from TypescriptFromManifestBaseGenerator

#==, #attributes_to_ts_type, #custom_type_to_ts_type_name, #dependency_group, #dependency_roots, #foobara_type_to_ts_type, #hash, #import_destructure, #import_path, #import_path_array, #initialize, manifest_to_generator_classes, #model_to_ts_model_name, #parent, #path_to_root, #templates_dir, #ts_instance_full_name, #ts_instance_full_path, #ts_instance_path, #ts_type_full_path, #value_to_ts_value

Methods inherited from FilesGenerator

#==, #absolute_template_path, #applicable?, #dependencies_to_generate, #eql?, #erb_template, #generate, generator_for, #generator_for, generators_for, #generators_for, #hash, #initialize, manifest_to_generator_classes, #method_missing, #path_to_root, #respond_to_missing?, #target_dir, #template_string, #templates_dir

Methods included from TruncatedInspect

#inspect, truncating

Constructor Details

This class inherits a constructor from Foobara::RemoteGenerator::Services::TypescriptFromManifestBaseGenerator

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Foobara::FilesGenerator

Instance Method Details

#aggregate?Boolean

Returns:

  • (Boolean)
[View source]

84
85
86
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 84

def aggregate?
  serializers&.any? { |s| s == "Foobara::CommandConnectors::Serializers::AggregateSerializer" }
end

#association_depthObject

[View source]

88
89
90
91
92
93
94
95
96
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 88

def association_depth
  if atom?
    AssociationDepth::ATOM
  elsif aggregate?
    AssociationDepth::AGGREGATE
  else
    AssociationDepth::AMBIGUOUS
  end
end

#atom?Boolean

Returns:

  • (Boolean)
[View source]

80
81
82
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 80

def atom?
  serializers&.any? { |s| s == "Foobara::CommandConnectors::Serializers::AtomicSerializer" }
end

#dependenciesObject

[View source]

98
99
100
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 98

def dependencies
  model_generators + type_generators
end

#model_generators(type = result_type, initial = true) ⇒ Object

[View source]

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
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 21

def model_generators(type = result_type, initial = true)
  if type.detached_entity?
    generator_class = if atom?
                        if initial
                          AtomEntityGenerator
                        else
                          UnloadedEntityGenerator
                        end
                      elsif aggregate?
                        AggregateEntityGenerator
                      else
                        TypeGenerator
                      end

    entity = if type.entity?
               type.to_entity
             else
               type.to_detached_entity
             end

    [generator_class.new(entity)]
  elsif type.model?
    generator_class = if atom?
                        AtomModelGenerator
                      elsif aggregate?
                        AggregateModelGenerator
                      else
                        TypeGenerator
                      end

    [generator_class.new(type.to_model)]
  elsif type.type.to_sym == :attributes
    type.attribute_declarations.values.map do |attribute_declaration|
      model_generators(attribute_declaration, false)
    end.flatten.uniq
  elsif type.array?
    model_generators(type.element_type, false)
  else
    # TODO: handle tuples, associative arrays
    []
  end
end

#result_typeObject

[View source]

9
10
11
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 9

def result_type
  command_manifest.result_type
end

#target_pathObject

[View source]

13
14
15
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 13

def target_path
  [*scoped_full_path, "Result.ts"]
end

#template_pathObject

[View source]

17
18
19
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 17

def template_path
  "Command/Result.ts.erb"
end

#type_generatorsObject

[View source]

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'foobara-typescript-remote-command-generator-0.0.24/src/remote_generator/services/command_result_generator.rb', line 64

def type_generators
  @type_generators ||= begin
    type = result_type
    type = type.to_type if result_type.is_a?(Manifest::TypeDeclaration)

    if !type.builtin? && !type.model?
      # TODO: Test this!!
      # :nocov:
      [TypeGenerator.new(type)]
      # :nocov:
    else
      []
    end
  end
end