foobara-typescript-remote-command-generator 1.2.6 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/lib/foobara/typescript_remote_command_generator.rb +1 -6
  4. data/src/{remote_generator/generate_typescript.rb → generate_typescript.rb} +13 -4
  5. data/src/{remote_generator/services → generators}/aggregate_entity_generator.rb +2 -2
  6. data/src/{remote_generator/services → generators}/aggregate_model_generator.rb +3 -3
  7. data/src/{remote_generator/services → generators}/atom_entity_generator.rb +3 -3
  8. data/src/{remote_generator/services → generators}/atom_model_generator.rb +3 -3
  9. data/src/{remote_generator/services → generators}/auth/access_tokens_generator.rb +1 -1
  10. data/src/generators/auth/login_command_generator.rb +29 -0
  11. data/src/{remote_generator/services → generators}/auth/login_generator.rb +4 -2
  12. data/src/generators/auth/logout_command_generator.rb +29 -0
  13. data/src/{remote_generator/services → generators}/auth/logout_generator.rb +4 -2
  14. data/src/{remote_generator/services → generators}/auth/refresh_login_generator.rb +4 -2
  15. data/src/generators/auth/requires_auth_command_generator.rb +27 -0
  16. data/src/{remote_generator/services → generators}/auth/requires_auth_generator.rb +4 -2
  17. data/src/{remote_generator/services → generators}/command_cast_result_generator.rb +33 -25
  18. data/src/{remote_generator/services → generators}/command_errors_generator.rb +2 -2
  19. data/src/{remote_generator/services → generators}/command_errors_index_generator.rb +1 -1
  20. data/src/generators/command_generator.rb +209 -0
  21. data/src/{remote_generator/services → generators}/command_inputs_generator.rb +1 -1
  22. data/src/{remote_generator/services → generators}/command_manifest_generator.rb +1 -1
  23. data/src/{remote_generator/services → generators}/command_result_generator.rb +1 -1
  24. data/src/{remote_generator/services → generators}/dependency_group.rb +2 -2
  25. data/src/{remote_generator/services → generators}/domain_config_generator.rb +1 -1
  26. data/src/{remote_generator/services → generators}/domain_generator.rb +1 -1
  27. data/src/{remote_generator/services → generators}/domain_manifest_generator.rb +1 -1
  28. data/src/{remote_generator/services → generators}/entity_generator.rb +1 -1
  29. data/src/{remote_generator/services → generators}/entity_manifest_generator.rb +1 -1
  30. data/src/{remote_generator/services → generators}/entity_variants_generator.rb +1 -1
  31. data/src/{remote_generator/services → generators}/error_generator.rb +1 -1
  32. data/src/{remote_generator/services → generators}/loaded_entity_generator.rb +1 -1
  33. data/src/{remote_generator/services → generators}/manifest_generator.rb +1 -1
  34. data/src/{remote_generator/services → generators}/model_generator.rb +1 -1
  35. data/src/{remote_generator/services → generators}/model_manifest_generator.rb +1 -1
  36. data/src/{remote_generator/services → generators}/model_variants_generator.rb +1 -1
  37. data/src/{remote_generator/services → generators}/organization_config_generator.rb +1 -1
  38. data/src/{remote_generator/services → generators}/organization_generator.rb +1 -1
  39. data/src/{remote_generator/services → generators}/organization_manifest_generator.rb +1 -1
  40. data/src/{remote_generator/services → generators}/processor_class_generator.rb +1 -1
  41. data/src/generators/remote_command_generator.rb +41 -0
  42. data/src/{remote_generator/services → generators}/root_manifest_generator.rb +1 -1
  43. data/src/{remote_generator/services → generators}/type_generator.rb +3 -3
  44. data/src/{remote_generator/services → generators}/typescript_from_manifest_base_generator.rb +42 -38
  45. data/src/{remote_generator/services → generators}/unloaded_entity_generator.rb +1 -1
  46. data/src/remote_generator.rb +21 -0
  47. data/src/{remote_generator/write_typescript_to_disk.rb → write_typescript_to_disk.rb} +10 -1
  48. data/templates/Command.ts.erb +39 -1
  49. data/templates/base/{RemoteCommand.ts → RemoteCommand.ts.erb} +28 -0
  50. metadata +46 -45
  51. data/src/remote_generator/services/auth/login_command_generator.rb +0 -17
  52. data/src/remote_generator/services/auth/logout_command_generator.rb +0 -17
  53. data/src/remote_generator/services/auth/requires_auth_command_generator.rb +0 -15
  54. data/src/remote_generator/services/command_generator.rb +0 -87
  55. /data/src/{remote_generator/association_depth.rb → association_depth.rb} +0 -0
@@ -0,0 +1,209 @@
1
+ require_relative "typescript_from_manifest_base_generator"
2
+
3
+ module Foobara
4
+ module RemoteGenerator
5
+ module Generators
6
+ class CommandGenerator < TypescriptFromManifestBaseGenerator
7
+ alias command_manifest relevant_manifest
8
+
9
+ def target_path
10
+ [*scoped_full_path, "index.ts"]
11
+ end
12
+
13
+ def template_path
14
+ "Command.ts.erb"
15
+ end
16
+
17
+ def domain_generator
18
+ @domain_generator ||= DomainGenerator.new(domain)
19
+ end
20
+
21
+ def organization_generator = domain_generator.organization_generator
22
+ def domain_name = domain_generator.domain_name
23
+ def organization_name = domain_generator.organization_name
24
+
25
+ def errors_in_this_namespace
26
+ @errors_in_this_namespace ||= possible_errors.values.map(&:error).uniq.sort_by(&:error_name).select do |error|
27
+ error.parent&.manifest_path&.map(&:to_s) == manifest_path.map(&:to_s)
28
+ end.map do |error_manifest|
29
+ ErrorGenerator.new(error_manifest)
30
+ end
31
+ end
32
+
33
+ def dependencies
34
+ [
35
+ RemoteCommandGenerator.new(Manifest::RootManifest.new(root_manifest)),
36
+ *queries_that_are_dirtied_by_this_command.keys
37
+ ]
38
+ end
39
+
40
+ def will_define
41
+ ts_instance_path
42
+ end
43
+
44
+ def command_errors_index_generator
45
+ CommandErrorsIndexGenerator.new(command_manifest)
46
+ end
47
+
48
+ def base_class_path
49
+ "base/RemoteCommand"
50
+ end
51
+
52
+ def base_class_name
53
+ base_class_path.split("/").last
54
+ end
55
+
56
+ def result_json_requires_cast?
57
+ # What types require a cast?
58
+ # :date and :datetime, :model, custom type declaration (check #custom?)
59
+ result_type && type_requires_cast?(result_type)
60
+ end
61
+
62
+ def queries_that_are_dirtied_by_this_command
63
+ return {} if query? || !auto_dirty_queries?
64
+
65
+ return @queries_that_are_dirtied_by_this_command if defined?(@queries_that_are_dirtied_by_this_command)
66
+
67
+ command_result_type = result_type
68
+
69
+ paths_to_data = nil
70
+
71
+ if command_result_type
72
+ command_result_type = command_result_type.to_type if command_result_type.is_a?(Manifest::TypeDeclaration)
73
+
74
+ if command_result_type.detached_entity?
75
+ paths_to_data = { command_result_type => [:outcome, :result, command_result_type.primary_key_name] }
76
+ else
77
+ result_type_associations = Manifest::Model.associations(command_result_type)
78
+
79
+ unless result_type_associations.empty?
80
+ data_path, entity_type = result_type_associations.to_a.first
81
+ paths_to_data = { entity_type => [:outcome, :result, data_path, entity_type.primary_key_name] }
82
+ end
83
+ end
84
+ end
85
+
86
+ if paths_to_data.nil?
87
+ if inputs_type
88
+ inputs_associations = Manifest::Model.associations(inputs_type)
89
+
90
+ unless inputs_associations.empty?
91
+ data_path, entity_type = inputs_associations.to_a.first
92
+ paths_to_data = { entity_type => [:inputs, *data_path] }
93
+ end
94
+ end
95
+ end
96
+
97
+ dirties = {}
98
+
99
+ unless paths_to_data.nil?
100
+ all_queries = Manifest::RootManifest.new(root_manifest).queries.map do |query|
101
+ generator_for(query)
102
+ end
103
+
104
+ paths_to_data.each_pair do |entity_type, path|
105
+ all_queries.each do |query|
106
+ query_inputs_type = query.inputs_type
107
+
108
+ if query_inputs_type
109
+ query_associations = Manifest::Model.associations(query_inputs_type)
110
+ query_associations.each_pair do |query_association_path, query_entity_class|
111
+ query_entity_class = query_entity_class.to_type if query_entity_class.is_a?(Manifest::TypeDeclaration)
112
+
113
+ if query_entity_class == entity_type
114
+ dirties[query] = [path, query_association_path]
115
+ end
116
+ end
117
+
118
+ next if dirties.key?(query)
119
+ end
120
+
121
+ query_result_type = query.result_type
122
+ next unless query_result_type
123
+
124
+ if query_result_type.is_a?(Manifest::TypeDeclaration) && query_result_type.reference?
125
+ query_result_type = query_result_type.to_type
126
+ end
127
+
128
+ if query_result_type == entity_type
129
+ dirties[query] = true
130
+ else
131
+ entity_classes = Manifest::Model.associations(query_result_type).values.uniq
132
+
133
+ entity_classes.each do |query_entity_class|
134
+ query_entity_class = query_entity_class.to_type if query_entity_class.is_a?(Manifest::TypeDeclaration)
135
+
136
+ if query_entity_class == entity_type
137
+ dirties[query] = true
138
+ break
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ @queries_that_are_dirtied_by_this_command = dirties
147
+ end
148
+
149
+ def queries_dirtied_without_inputs
150
+ return @queries_dirtied_without_inputs if defined?(@queries_dirtied_without_inputs)
151
+
152
+ queries_dirtied = []
153
+
154
+ queries_that_are_dirtied_by_this_command.each_pair do |query, value|
155
+ if value == true
156
+ queries_dirtied << query
157
+ end
158
+ end
159
+
160
+ @queries_dirtied_without_inputs = queries_dirtied
161
+ end
162
+
163
+ def queries_dirtied_with_inputs
164
+ return @queries_dirtied_with_inputs if defined?(@queries_dirtied_with_inputs)
165
+
166
+ dirtied_queries = {}
167
+
168
+ queries_that_are_dirtied_by_this_command.each_pair do |query, value|
169
+ if value != true
170
+ dirtied_queries[query] = value
171
+ end
172
+ end
173
+
174
+ @queries_dirtied_with_inputs = dirtied_queries
175
+ end
176
+
177
+ private
178
+
179
+ def type_requires_cast?(type_declaration)
180
+ if type_declaration.is_a?(Manifest::Attributes)
181
+ return false unless type_declaration.has_attribute_declarations?
182
+ return false if type_declaration.attribute_declarations.empty?
183
+
184
+ type_declaration.attribute_declarations.values.any? do |attribute_declaration|
185
+ type_requires_cast?(attribute_declaration)
186
+ end
187
+ elsif type_declaration.is_a?(Manifest::Array)
188
+ element_type = type_declaration.element_type
189
+ element_type && type_requires_cast?(element_type)
190
+ else
191
+ return true if type_declaration.model?
192
+
193
+ type_symbol = type_declaration.type_symbol
194
+
195
+ if type_symbol == :date || type_symbol == :datetime
196
+ return true
197
+ end
198
+
199
+ if type_declaration.custom?
200
+ type_declaration = type_declaration.to_type if type_declaration.is_a?(Manifest::TypeDeclaration)
201
+ base_type = type_declaration.base_type
202
+ type_requires_cast?(base_type)
203
+ end
204
+ end
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandInputsGenerator < TypescriptFromManifestBaseGenerator
7
7
  alias command_manifest relevant_manifest
8
8
 
@@ -2,7 +2,7 @@ require_relative "manifest_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandManifestGenerator < ManifestGenerator
7
7
  def target_path
8
8
  [*scoped_full_path, "manifest.json"]
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class CommandResultGenerator < CommandGenerator
7
7
  alias command_manifest relevant_manifest
8
8
 
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class DependencyGroup
5
5
  class CollisionData
6
6
  attr_accessor :points
@@ -135,7 +135,7 @@ module Foobara
135
135
  dep != other_dep && name == non_colliding_type_name(other_dep, points)
136
136
  end
137
137
 
138
- if will_define&.include?(name)
138
+ if will_define&.include?(name) && dep != deps_are_for
139
139
  collisions << deps_are_for
140
140
  end
141
141
 
@@ -2,7 +2,7 @@ require_relative "domain_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class DomainConfigGenerator < DomainGenerator
7
7
  def target_path
8
8
  [*super[0..-2], "config.ts"]
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class DomainGenerator < TypescriptFromManifestBaseGenerator
7
7
  alias domain_manifest relevant_manifest
8
8
 
@@ -2,7 +2,7 @@ require_relative "manifest_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class DomainManifestGenerator < ManifestGenerator
7
7
  def target_path
8
8
  if global?
@@ -2,7 +2,7 @@ require_relative "model_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class EntityGenerator < ModelGenerator
7
7
  alias entity_manifest relevant_manifest
8
8
 
@@ -2,7 +2,7 @@ require_relative "model_manifest_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class EntityManifestGenerator < ModelManifestGenerator
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ require_relative "model_variants_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class EntityVariantsGenerator < EntityGenerator
7
7
  def target_path
8
8
  *prefix, _entity_name, _file = super
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class ErrorGenerator < TypescriptFromManifestBaseGenerator
7
7
  alias error_manifest relevant_manifest
8
8
 
@@ -2,7 +2,7 @@ require_relative "entity_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class LoadedEntityGenerator < EntityGenerator
7
7
  def target_path
8
8
  [*super[..-2], "Loaded.ts"]
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class ManifestGenerator < TypescriptFromManifestBaseGenerator
7
7
  def generate(_elements_to_generate)
8
8
  JSON.pretty_generate(relevant_manifest.relevant_manifest)
@@ -3,7 +3,7 @@ require_relative "type_generator"
3
3
 
4
4
  module Foobara
5
5
  module RemoteGenerator
6
- class Services
6
+ module Generators
7
7
  class ModelGenerator < TypeGenerator
8
8
  class << self
9
9
  def new(relevant_manifest)
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class ModelManifestGenerator < ManifestGenerator
5
5
  def target_path
6
6
  [*domain.scoped_full_path, "Types", *model_prefix, scoped_short_name, "manifest.json"]
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class ModelVariantsGenerator < ModelGenerator
5
5
  def target_path
6
6
  [*domain.scoped_full_path, "Types", *model_prefix, "#{scoped_short_name}.ts"]
@@ -2,7 +2,7 @@ require_relative "organization_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class OrganizationConfigGenerator < OrganizationGenerator
7
7
  def target_path
8
8
  [*super[0..-2], "config.ts"]
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class OrganizationGenerator < TypescriptFromManifestBaseGenerator
7
7
  alias organization_manifest relevant_manifest
8
8
 
@@ -2,7 +2,7 @@ require_relative "manifest_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class OrganizationManifestGenerator < ManifestGenerator
7
7
  def target_path
8
8
  if global?
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class ProcessorClassGenerator < TypescriptFromManifestBaseGenerator
7
7
  alias processor_class_manifest relevant_manifest
8
8
 
@@ -0,0 +1,41 @@
1
+ module Foobara
2
+ module RemoteGenerator
3
+ module Generators
4
+ class RemoteCommandGenerator < TypescriptFromManifestBaseGenerator
5
+ def import_destructure
6
+ ts_instance_path.first
7
+ end
8
+
9
+ def ts_instance_path
10
+ ["RemoteCommand"]
11
+ end
12
+
13
+ def ts_instance_full_path
14
+ ["RemoteCommand"]
15
+ end
16
+
17
+ def template_path
18
+ ["base", "RemoteCommand.ts.erb"]
19
+ end
20
+
21
+ def hash
22
+ template_path.hash
23
+ end
24
+
25
+ def domain_reference
26
+ "global_organization::global_domain"
27
+ end
28
+
29
+ # TODO: awkward to have this here hmmm... maybe create a manifest for these static files?
30
+ # something doesn't feel right about this.
31
+ def domain
32
+ Manifest::Domain.new(root_manifest, [:domain, domain_reference])
33
+ end
34
+
35
+ def scoped_full_name
36
+ ts_instance_path.first
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -2,7 +2,7 @@ require_relative "manifest_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class RootManifestGenerator < ManifestGenerator
7
7
  def target_path
8
8
  ["manifest.json"]
@@ -2,7 +2,7 @@ require_relative "typescript_from_manifest_base_generator"
2
2
 
3
3
  module Foobara
4
4
  module RemoteGenerator
5
- class Services
5
+ module Generators
6
6
  class TypeGenerator < TypescriptFromManifestBaseGenerator
7
7
  class << self
8
8
  def lru_cache
@@ -100,13 +100,13 @@ module Foobara
100
100
 
101
101
  def model_generators
102
102
  @model_generators ||= types_depended_on.select(&:model?).reject(&:builtin?).map do |model|
103
- Services::ModelGenerator.new(model)
103
+ ModelGenerator.new(model)
104
104
  end
105
105
  end
106
106
 
107
107
  def custom_type_generators
108
108
  @custom_type_generators ||= types_depended_on.reject(&:builtin?).reject(&:model?).map do |type|
109
- Services::TypeGenerator.new(type)
109
+ TypeGenerator.new(type)
110
110
  end
111
111
  end
112
112
 
@@ -22,7 +22,7 @@
22
22
 
23
23
  module Foobara
24
24
  module RemoteGenerator
25
- class Services
25
+ module Generators
26
26
  class TypescriptFromManifestBaseGenerator < Foobara::FilesGenerator
27
27
  class << self
28
28
  def manifest_to_generator_classes(manifest)
@@ -30,62 +30,62 @@ module Foobara
30
30
  when Manifest::Command
31
31
  generator_classes = case manifest.full_command_name
32
32
  when "Foobara::Auth::RefreshLogin"
33
- Services::Auth::RefreshLoginGenerator
33
+ Auth::RefreshLoginGenerator
34
34
  when "Foobara::Auth::Login"
35
- Services::Auth::LoginGenerator
35
+ Auth::LoginGenerator
36
36
  when "Foobara::Auth::Logout"
37
- Services::Auth::LogoutGenerator
37
+ Auth::LogoutGenerator
38
38
  when /\bGetCurrentUser$/
39
- Services::Auth::RequiresAuthGenerator
39
+ Auth::RequiresAuthGenerator
40
40
  else
41
41
  if manifest.requires_authentication?
42
- Services::Auth::RequiresAuthGenerator
42
+ Auth::RequiresAuthGenerator
43
43
  else
44
- Services::CommandGenerator
44
+ CommandGenerator
45
45
  end
46
46
  end
47
47
 
48
48
  [
49
49
  *generator_classes,
50
- Services::CommandInputsGenerator,
51
- Services::CommandResultGenerator,
52
- Services::CommandCastResultGenerator,
53
- Services::CommandErrorsGenerator,
54
- Services::CommandErrorsIndexGenerator,
55
- Services::CommandManifestGenerator
50
+ CommandInputsGenerator,
51
+ CommandResultGenerator,
52
+ CommandCastResultGenerator,
53
+ CommandErrorsGenerator,
54
+ CommandErrorsIndexGenerator,
55
+ CommandManifestGenerator
56
56
  ]
57
57
  when Manifest::Domain
58
58
  [
59
- Services::DomainGenerator,
60
- Services::DomainConfigGenerator,
61
- Services::DomainManifestGenerator
59
+ DomainGenerator,
60
+ DomainConfigGenerator,
61
+ DomainManifestGenerator
62
62
  ]
63
63
  when Manifest::Organization
64
64
  [
65
- Services::OrganizationGenerator,
66
- Services::OrganizationConfigGenerator,
67
- Services::OrganizationManifestGenerator
65
+ OrganizationGenerator,
66
+ OrganizationConfigGenerator,
67
+ OrganizationManifestGenerator
68
68
  ]
69
69
  when Manifest::Entity, Manifest::DetachedEntity
70
70
  [
71
- Services::EntityGenerator,
72
- Services::EntityVariantsGenerator,
73
- Services::EntityManifestGenerator
71
+ EntityGenerator,
72
+ EntityVariantsGenerator,
73
+ EntityManifestGenerator
74
74
  ]
75
75
  when Manifest::Model
76
76
  [
77
- Services::ModelGenerator,
78
- Services::ModelVariantsGenerator,
79
- Services::ModelManifestGenerator
77
+ ModelGenerator,
78
+ ModelVariantsGenerator,
79
+ ModelManifestGenerator
80
80
  ]
81
81
  when Manifest::Error
82
- Services::ErrorGenerator
82
+ ErrorGenerator
83
83
  when Manifest::ProcessorClass
84
- Services::ProcessorClassGenerator
84
+ ProcessorClassGenerator
85
85
  when Manifest::RootManifest
86
- Services::RootManifestGenerator
86
+ RootManifestGenerator
87
87
  when Manifest::Type
88
- Services::TypeGenerator
88
+ TypeGenerator
89
89
  else
90
90
  # :nocov:
91
91
  raise "Not sure how build a generator for a #{manifest}"
@@ -94,18 +94,18 @@ module Foobara
94
94
  end
95
95
  end
96
96
 
97
- def initialize(relevant_manifest)
98
- unless relevant_manifest.is_a?(Manifest::BaseManifest)
97
+ def initialize(relevant_manifest = (none_given = true))
98
+ if none_given || relevant_manifest.is_a?(Manifest::BaseManifest)
99
+ super
100
+ else
99
101
  # :nocov:
100
102
  raise ArgumentError, "Expected a Foobara::Manifest, got #{relevant_manifest.class}"
101
103
  # :nocov:
102
104
  end
103
-
104
- super
105
105
  end
106
106
 
107
107
  def templates_dir
108
- "#{__dir__}/../../../templates"
108
+ "#{__dir__}/../../templates"
109
109
  end
110
110
 
111
111
  def parent
@@ -389,15 +389,15 @@ module Foobara
389
389
 
390
390
  generator_class = case association_depth
391
391
  when AssociationDepth::AMBIGUOUS
392
- Services::ModelGenerator
392
+ ModelGenerator
393
393
  when AssociationDepth::ATOM
394
394
  if !initial && model.detached_entity?
395
- Services::UnloadedEntityGenerator
395
+ UnloadedEntityGenerator
396
396
  else
397
- Services::AtomModelGenerator
397
+ AtomModelGenerator
398
398
  end
399
399
  when AssociationDepth::AGGREGATE
400
- Services::AggregateModelGenerator
400
+ AggregateModelGenerator
401
401
  else
402
402
  # :nocov:
403
403
  raise "Bad association_depth: #{association_depth}"
@@ -431,6 +431,10 @@ module Foobara
431
431
  path = super
432
432
  path.empty? ? "./" : path
433
433
  end
434
+
435
+ def auto_dirty_queries?
436
+ RemoteGenerator.auto_dirty_queries?
437
+ end
434
438
  end
435
439
  end
436
440
  end
@@ -1,6 +1,6 @@
1
1
  module Foobara
2
2
  module RemoteGenerator
3
- class Services
3
+ module Generators
4
4
  class UnloadedEntityGenerator < EntityGenerator
5
5
  def target_path
6
6
  [*super[..-2], "Unloaded.ts"]