foobara-typescript-remote-command-generator 1.2.7 → 1.3.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/foobara/typescript_remote_command_generator.rb +1 -6
- data/src/{remote_generator/generate_typescript.rb → generate_typescript.rb} +13 -4
- data/src/{remote_generator/services → generators}/aggregate_entity_generator.rb +2 -2
- data/src/{remote_generator/services → generators}/aggregate_model_generator.rb +3 -3
- data/src/{remote_generator/services → generators}/atom_entity_generator.rb +3 -3
- data/src/{remote_generator/services → generators}/atom_model_generator.rb +3 -3
- data/src/{remote_generator/services → generators}/auth/access_tokens_generator.rb +1 -1
- data/src/generators/auth/login_command_generator.rb +29 -0
- data/src/{remote_generator/services → generators}/auth/login_generator.rb +4 -2
- data/src/generators/auth/logout_command_generator.rb +29 -0
- data/src/{remote_generator/services → generators}/auth/logout_generator.rb +4 -2
- data/src/{remote_generator/services → generators}/auth/refresh_login_generator.rb +4 -2
- data/src/generators/auth/requires_auth_command_generator.rb +27 -0
- data/src/{remote_generator/services → generators}/auth/requires_auth_generator.rb +4 -2
- data/src/{remote_generator/services → generators}/command_cast_result_generator.rb +6 -6
- data/src/{remote_generator/services → generators}/command_errors_generator.rb +2 -2
- data/src/{remote_generator/services → generators}/command_errors_index_generator.rb +1 -1
- data/src/generators/command_generator.rb +209 -0
- data/src/{remote_generator/services → generators}/command_inputs_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/command_manifest_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/command_result_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/dependency_group.rb +2 -2
- data/src/{remote_generator/services → generators}/domain_config_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/domain_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/domain_manifest_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/entity_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/entity_manifest_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/entity_variants_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/error_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/loaded_entity_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/manifest_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/model_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/model_manifest_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/model_variants_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/organization_config_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/organization_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/organization_manifest_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/processor_class_generator.rb +1 -1
- data/src/generators/remote_command_generator.rb +41 -0
- data/src/{remote_generator/services → generators}/root_manifest_generator.rb +1 -1
- data/src/{remote_generator/services → generators}/type_generator.rb +3 -3
- data/src/{remote_generator/services → generators}/typescript_from_manifest_base_generator.rb +42 -38
- data/src/{remote_generator/services → generators}/unloaded_entity_generator.rb +1 -1
- data/src/remote_generator.rb +21 -0
- data/src/{remote_generator/write_typescript_to_disk.rb → write_typescript_to_disk.rb} +10 -1
- data/templates/Command.ts.erb +39 -1
- data/templates/base/QueryCache.ts +48 -0
- data/templates/base/{RemoteCommand.ts → RemoteCommand.ts.erb} +22 -0
- metadata +46 -45
- data/src/remote_generator/services/auth/login_command_generator.rb +0 -17
- data/src/remote_generator/services/auth/logout_command_generator.rb +0 -17
- data/src/remote_generator/services/auth/requires_auth_command_generator.rb +0 -15
- data/src/remote_generator/services/command_generator.rb +0 -87
- /data/src/{remote_generator/association_depth.rb → association_depth.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cf59c3786304e34b238364d087ca029225bd01bf158bf9ddb928112aa8e3a234
|
|
4
|
+
data.tar.gz: 6b3fdc12eb0c6d9f4391b12ea5ed9b351ef90a48cf0aad1e8fa30288f56c7163
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7c0b909fc48ecdeb842417d9b6b4f04ad556771c2dc949775e555ff6fd1f1f1f94b820e222246135abb51a5bcb737771028c5c2e68c160a6e1358e61e71dec20
|
|
7
|
+
data.tar.gz: 64881ffe38ce0ce810b73bdc7a6d71fce9c7400979da2794a550403c2c1f81c19df4b9810f2c99fd003803c09400c0b3cf2be9df5aa5ddf8db84e96f48a4852e
|
data/CHANGELOG.md
CHANGED
|
@@ -8,8 +8,11 @@ module Foobara
|
|
|
8
8
|
|
|
9
9
|
possible_error MissingManifestError
|
|
10
10
|
|
|
11
|
-
inputs
|
|
12
|
-
|
|
11
|
+
inputs do
|
|
12
|
+
raw_manifest :associative_array
|
|
13
|
+
manifest_url :string
|
|
14
|
+
auto_dirty_queries :boolean, default: false
|
|
15
|
+
end
|
|
13
16
|
|
|
14
17
|
def execute
|
|
15
18
|
load_manifest_if_needed
|
|
@@ -38,11 +41,11 @@ module Foobara
|
|
|
38
41
|
attr_accessor :command_manifest, :manifest_data
|
|
39
42
|
|
|
40
43
|
def base_generator
|
|
41
|
-
|
|
44
|
+
Generators::TypescriptFromManifestBaseGenerator
|
|
42
45
|
end
|
|
43
46
|
|
|
44
47
|
def templates_dir
|
|
45
|
-
"#{__dir__}
|
|
48
|
+
"#{__dir__}/../templates"
|
|
46
49
|
end
|
|
47
50
|
|
|
48
51
|
def load_manifest_if_needed
|
|
@@ -74,6 +77,12 @@ module Foobara
|
|
|
74
77
|
end
|
|
75
78
|
end
|
|
76
79
|
|
|
80
|
+
def generate_element
|
|
81
|
+
RemoteGenerator.auto_dirty_queries(auto_dirty_queries) do
|
|
82
|
+
super
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
77
86
|
def add_root_manifest_to_set_of_elements_to_generate
|
|
78
87
|
elements_to_generate << manifest
|
|
79
88
|
end
|
|
@@ -2,7 +2,7 @@ require_relative "loaded_entity_generator"
|
|
|
2
2
|
|
|
3
3
|
module Foobara
|
|
4
4
|
module RemoteGenerator
|
|
5
|
-
|
|
5
|
+
module Generators
|
|
6
6
|
class AggregateEntityGenerator < LoadedEntityGenerator
|
|
7
7
|
class << self
|
|
8
8
|
def new(relevant_manifest)
|
|
@@ -26,7 +26,7 @@ module Foobara
|
|
|
26
26
|
|
|
27
27
|
def model_generators
|
|
28
28
|
@model_generators ||= types_depended_on.select(&:model?).map do |model|
|
|
29
|
-
|
|
29
|
+
AggregateModelGenerator.new(model)
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Foobara
|
|
2
2
|
module RemoteGenerator
|
|
3
|
-
|
|
3
|
+
module Generators
|
|
4
4
|
class AggregateModelGenerator < ModelGenerator
|
|
5
5
|
class << self
|
|
6
6
|
def new(relevant_manifest)
|
|
@@ -27,9 +27,9 @@ module Foobara
|
|
|
27
27
|
def model_generators
|
|
28
28
|
@model_generators ||= types_depended_on.select(&:model?).map do |model|
|
|
29
29
|
if model.detached_entity?
|
|
30
|
-
|
|
30
|
+
AggregateEntityGenerator.new(model)
|
|
31
31
|
else
|
|
32
|
-
|
|
32
|
+
AggregateModelGenerator.new(model)
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Foobara
|
|
2
2
|
module RemoteGenerator
|
|
3
|
-
|
|
3
|
+
module Generators
|
|
4
4
|
class AtomEntityGenerator < LoadedEntityGenerator
|
|
5
5
|
class << self
|
|
6
6
|
def new(relevant_manifest)
|
|
@@ -25,9 +25,9 @@ module Foobara
|
|
|
25
25
|
def model_generators
|
|
26
26
|
@model_generators ||= types_depended_on.select(&:model?).map do |model|
|
|
27
27
|
if model.detached_entity?
|
|
28
|
-
|
|
28
|
+
UnloadedEntityGenerator.new(model)
|
|
29
29
|
else
|
|
30
|
-
|
|
30
|
+
AtomModelGenerator.new(model)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Foobara
|
|
2
2
|
module RemoteGenerator
|
|
3
|
-
|
|
3
|
+
module Generators
|
|
4
4
|
class AtomModelGenerator < ModelGenerator
|
|
5
5
|
class << self
|
|
6
6
|
def new(relevant_manifest)
|
|
@@ -27,9 +27,9 @@ module Foobara
|
|
|
27
27
|
def model_generators
|
|
28
28
|
@model_generators ||= types_depended_on.select(&:model?).map do |model|
|
|
29
29
|
if model.detached_entity?
|
|
30
|
-
|
|
30
|
+
UnloadedEntityGenerator.new(model)
|
|
31
31
|
else
|
|
32
|
-
|
|
32
|
+
AtomModelGenerator.new(model)
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Foobara
|
|
2
|
+
module RemoteGenerator
|
|
3
|
+
module Generators
|
|
4
|
+
module Auth
|
|
5
|
+
class LoginCommandGenerator < TypescriptFromManifestBaseGenerator
|
|
6
|
+
def import_destructure
|
|
7
|
+
ts_instance_path.first
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def ts_instance_path
|
|
11
|
+
["LoginCommand"]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def ts_instance_full_path
|
|
15
|
+
["Foobara", "Auth", "LoginCommand"]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def template_path
|
|
19
|
+
["Foobara", "Auth", "LoginCommand.ts.erb"]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def dependencies
|
|
23
|
+
super + [AccessTokensGenerator.new(relevant_manifest)]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Foobara
|
|
2
2
|
module RemoteGenerator
|
|
3
|
-
|
|
3
|
+
module Generators
|
|
4
4
|
module Auth
|
|
5
5
|
class LoginGenerator < CommandGenerator
|
|
6
6
|
def base_class_path
|
|
@@ -8,7 +8,9 @@ module Foobara
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def dependencies
|
|
11
|
-
super
|
|
11
|
+
super.reject do |generator|
|
|
12
|
+
generator.is_a?(RemoteCommandGenerator)
|
|
13
|
+
end + [LoginCommandGenerator.new(relevant_manifest)]
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
16
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Foobara
|
|
2
|
+
module RemoteGenerator
|
|
3
|
+
module Generators
|
|
4
|
+
module Auth
|
|
5
|
+
class LogoutCommandGenerator < TypescriptFromManifestBaseGenerator
|
|
6
|
+
def import_destructure
|
|
7
|
+
ts_instance_path.first
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def ts_instance_path
|
|
11
|
+
["LogoutCommand"]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def ts_instance_full_path
|
|
15
|
+
["Foobara", "Auth", "LogoutCommand"]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def template_path
|
|
19
|
+
["Foobara", "Auth", "LogoutCommand.ts.erb"]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def dependencies
|
|
23
|
+
super + [AccessTokensGenerator.new(relevant_manifest)]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Foobara
|
|
2
2
|
module RemoteGenerator
|
|
3
|
-
|
|
3
|
+
module Generators
|
|
4
4
|
module Auth
|
|
5
5
|
class LogoutGenerator < CommandGenerator
|
|
6
6
|
def base_class_path
|
|
@@ -8,7 +8,9 @@ module Foobara
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def dependencies
|
|
11
|
-
super
|
|
11
|
+
super.reject do |generator|
|
|
12
|
+
generator.is_a?(RemoteCommandGenerator)
|
|
13
|
+
end + [LogoutCommandGenerator.new(relevant_manifest)]
|
|
12
14
|
end
|
|
13
15
|
end
|
|
14
16
|
end
|
|
@@ -2,7 +2,7 @@ require_relative "../command_generator"
|
|
|
2
2
|
|
|
3
3
|
module Foobara
|
|
4
4
|
module RemoteGenerator
|
|
5
|
-
|
|
5
|
+
module Generators
|
|
6
6
|
module Auth
|
|
7
7
|
class RefreshLoginGenerator < CommandGenerator
|
|
8
8
|
def base_class_path
|
|
@@ -10,7 +10,9 @@ module Foobara
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def dependencies
|
|
13
|
-
super
|
|
13
|
+
super.reject do |generator|
|
|
14
|
+
generator.is_a?(RemoteCommandGenerator)
|
|
15
|
+
end + [LoginCommandGenerator.new(relevant_manifest)]
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
18
|
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require_relative "../typescript_from_manifest_base_generator"
|
|
2
|
+
|
|
3
|
+
module Foobara
|
|
4
|
+
module RemoteGenerator
|
|
5
|
+
module Generators
|
|
6
|
+
module Auth
|
|
7
|
+
class RequiresAuthCommandGenerator < TypescriptFromManifestBaseGenerator
|
|
8
|
+
def import_destructure
|
|
9
|
+
ts_instance_path.first
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def ts_instance_path
|
|
13
|
+
["RequiresAuthCommand"]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def ts_instance_full_path
|
|
17
|
+
["Foobara", "Auth", "RequiresAuthCommand"]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def template_path
|
|
21
|
+
["Foobara", "Auth", "RequiresAuthCommand.ts.erb"]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -2,7 +2,7 @@ require_relative "../command_generator"
|
|
|
2
2
|
|
|
3
3
|
module Foobara
|
|
4
4
|
module RemoteGenerator
|
|
5
|
-
|
|
5
|
+
module Generators
|
|
6
6
|
module Auth
|
|
7
7
|
class RequiresAuthGenerator < CommandGenerator
|
|
8
8
|
def base_class_path
|
|
@@ -10,7 +10,9 @@ module Foobara
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def dependencies
|
|
13
|
-
super
|
|
13
|
+
super.reject do |generator|
|
|
14
|
+
generator.is_a?(RemoteCommandGenerator)
|
|
15
|
+
end + [RequiresAuthCommandGenerator.new(relevant_manifest)]
|
|
14
16
|
end
|
|
15
17
|
end
|
|
16
18
|
end
|
|
@@ -2,7 +2,7 @@ require_relative "command_result_generator"
|
|
|
2
2
|
|
|
3
3
|
module Foobara
|
|
4
4
|
module RemoteGenerator
|
|
5
|
-
|
|
5
|
+
module Generators
|
|
6
6
|
class CommandCastResultGenerator < CommandResultGenerator
|
|
7
7
|
class CastTree
|
|
8
8
|
attr_accessor :children, :declaration_to_cast, :initial
|
|
@@ -43,20 +43,20 @@ module Foobara
|
|
|
43
43
|
|
|
44
44
|
if result_type.detached_entity? && atom?
|
|
45
45
|
declaration = result_type.is_a?(Manifest::TypeDeclaration) ? result_type.to_type : result_type
|
|
46
|
-
return @nested_model_generators = Set[
|
|
46
|
+
return @nested_model_generators = Set[AtomEntityGenerator.new(declaration)]
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
_models_reachable_from_declaration(result_type, initial: true)&.each do |model|
|
|
50
50
|
generator_class = if atom?
|
|
51
51
|
if model.detached_entity?
|
|
52
|
-
|
|
52
|
+
UnloadedEntityGenerator
|
|
53
53
|
else
|
|
54
|
-
|
|
54
|
+
AtomModelGenerator
|
|
55
55
|
end
|
|
56
56
|
elsif aggregate?
|
|
57
|
-
|
|
57
|
+
AggregateModelGenerator
|
|
58
58
|
else
|
|
59
|
-
|
|
59
|
+
ModelGenerator
|
|
60
60
|
end
|
|
61
61
|
|
|
62
62
|
new_generator = generator_class.new(model)
|
|
@@ -3,7 +3,7 @@ require_relative "command_generator"
|
|
|
3
3
|
|
|
4
4
|
module Foobara
|
|
5
5
|
module RemoteGenerator
|
|
6
|
-
|
|
6
|
+
module Generators
|
|
7
7
|
class CommandErrorsGenerator < CommandGenerator
|
|
8
8
|
alias command_manifest relevant_manifest
|
|
9
9
|
|
|
@@ -21,7 +21,7 @@ module Foobara
|
|
|
21
21
|
|
|
22
22
|
def error_generators
|
|
23
23
|
@error_generators ||= possible_errors.values.map(&:error).sort_by(&:error_name).uniq.map do |error|
|
|
24
|
-
|
|
24
|
+
ErrorGenerator.new(error)
|
|
25
25
|
end
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Foobara
|
|
2
2
|
module RemoteGenerator
|
|
3
|
-
|
|
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
|
|