power_stencil 0.5.1 → 0.7.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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab-ci.yml +2 -0
  3. data/README.md +3 -7
  4. data/doc/builds.md +10 -1
  5. data/doc/entities.md +59 -50
  6. data/doc/images/power-stencil-entity-creation.svg +247 -114
  7. data/doc/plugins.md +49 -1
  8. data/doc/templates.md +23 -18
  9. data/etc/base_commands_definition.yml +28 -1
  10. data/etc/meta_templates/plugin_seed/psplugin_{entity}.gemspec +3 -1
  11. data/etc/power_stencil.yaml +7 -1
  12. data/etc/templates/plugin_definition/psplugin_{entity}.gemspec +3 -1
  13. data/etc/templates/project/.zzzgitignore.erb +8 -3
  14. data/lib/power_stencil.rb +1 -0
  15. data/lib/power_stencil/command_processors/build.rb +16 -3
  16. data/lib/power_stencil/command_processors/check.rb +12 -0
  17. data/lib/power_stencil/command_processors/create.rb +6 -5
  18. data/lib/power_stencil/command_processors/delete.rb +23 -15
  19. data/lib/power_stencil/command_processors/edit.rb +4 -2
  20. data/lib/power_stencil/command_processors/init.rb +2 -2
  21. data/lib/power_stencil/command_processors/plugin.rb +20 -6
  22. data/lib/power_stencil/command_processors/root.rb +1 -1
  23. data/lib/power_stencil/command_processors/shell.rb +10 -3
  24. data/lib/power_stencil/dsl/entities.rb +0 -16
  25. data/lib/power_stencil/engine/build_handling.rb +1 -2
  26. data/lib/power_stencil/engine/directory_processor.rb +6 -1
  27. data/lib/power_stencil/engine/entities_definitions.rb +16 -7
  28. data/lib/power_stencil/engine/entities_handling.rb +1 -1
  29. data/lib/power_stencil/engine/project_engine.rb +6 -10
  30. data/lib/power_stencil/initializer.rb +4 -7
  31. data/lib/power_stencil/plugins/base.rb +18 -9
  32. data/lib/power_stencil/plugins/capabilities.rb +10 -8
  33. data/lib/power_stencil/plugins/command_line.rb +1 -4
  34. data/lib/power_stencil/plugins/config.rb +1 -5
  35. data/lib/power_stencil/plugins/entity_definitions.rb +15 -0
  36. data/lib/power_stencil/plugins/gem.rb +14 -35
  37. data/lib/power_stencil/plugins/paths.rb +38 -0
  38. data/lib/power_stencil/plugins/require.rb +10 -16
  39. data/lib/power_stencil/plugins/templates.rb +3 -3
  40. data/lib/power_stencil/project/base.rb +24 -9
  41. data/lib/power_stencil/project/config.rb +3 -2
  42. data/lib/power_stencil/project/create.rb +23 -2
  43. data/lib/power_stencil/project/git.rb +75 -0
  44. data/lib/power_stencil/project/info.rb +14 -1
  45. data/lib/power_stencil/project/paths.rb +22 -26
  46. data/lib/power_stencil/project/plugins.rb +18 -23
  47. data/lib/power_stencil/project/templates.rb +15 -22
  48. data/lib/power_stencil/system_entity_definitions/all.rb +2 -1
  49. data/lib/power_stencil/system_entity_definitions/buildable.rb +1 -1
  50. data/lib/power_stencil/system_entity_definitions/entity_override.rb +6 -0
  51. data/lib/power_stencil/system_entity_definitions/entity_project_common.rb +13 -5
  52. data/lib/power_stencil/system_entity_definitions/{has_associated_files.rb → entity_templates.rb} +2 -2
  53. data/lib/power_stencil/system_entity_definitions/project_config.rb +1 -1
  54. data/lib/power_stencil/system_entity_definitions/project_entity.rb +7 -0
  55. data/lib/power_stencil/system_entity_definitions/simple_exec.rb +3 -3
  56. data/lib/power_stencil/system_entity_definitions/source_provider.rb +15 -0
  57. data/lib/power_stencil/utils/gem_utils.rb +22 -2
  58. data/lib/power_stencil/version.rb +1 -1
  59. data/power_stencil.gemspec +2 -1
  60. metadata +23 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc9ed77abcf4685805caa1819d0692724a94dbc4
4
- data.tar.gz: f40cf20d9083d1c83f75167750be7986f79353ce
3
+ metadata.gz: 75be0351239fd3b94c0cbb5b3482ed98172c3119
4
+ data.tar.gz: ffc7878ce34439f0947a1b568eb56eb07c746514
5
5
  SHA512:
6
- metadata.gz: 0484e39c8be5b21407f7223536a8f9295b484414d413e904cee70c0580ac2b716875eaa9cd2ffa8ddca8a3db17b421ff2f1b7ac0f7fae0672c71826f11d29339
7
- data.tar.gz: ad786d9773577cf4a9f90e724b06eb5ba8b4687b7fa2f0dc52acdcce18f8913006b30d407aa05ccb06ec7fc65f4c8e5cabe51c29756951e71367bb4e28dd72ab
6
+ metadata.gz: 97ea218bf8fe32f520732d741221984e2e5a4e2f50712aac9f389209e2cedb88a7e550bbe4b3284fb5bdcd0aa8492f5278a2869b2277e8d42497c7702998c921
7
+ data.tar.gz: e7a94779f26e44892aaf80d76f4c12a53517017896a48718096c4b03178918424407a22c338fa41c5b7672ac095c603235c81a2751ae8c7d4e02c13bfc45bf89
@@ -3,6 +3,8 @@ image: "ruby:2.3"
3
3
  before_script:
4
4
  - gem install bundler --no-document
5
5
  - bundle install --jobs $(nproc) "${FLAGS[@]}"
6
+ - git config --global user.email "noone@nowhere.org"
7
+ - git config --global user.name "Testman"
6
8
 
7
9
  rspec:
8
10
  script:
data/README.md CHANGED
@@ -75,6 +75,8 @@ Then you can install the `PowerStencil` gem by issuing the usual:
75
75
 
76
76
  $ gem install power_stencil
77
77
 
78
+ :hand: It is **strongly** advised to have `git` installed on your system, as `PowerStencil` is integrated with `git` to provide a better user experience.
79
+
78
80
  If you want to create [Graphviz] graphs, you probably may want to install it for your system. If you are using an _apt-based_ system like Ubuntu or Debian it may probably be as simple as:
79
81
 
80
82
  $ sudo apt install graphviz
@@ -139,13 +141,7 @@ Once the project created, if you are anywhere within the project tree, you don't
139
141
 
140
142
  **:information_source: The rest of this documentation will assume you are at the root of this created project.**
141
143
 
142
- **:information_source: Of course, once you've been creating a new project, you should version it with Git:**
143
-
144
- $ git init
145
- $ git add .
146
- $ git commit -a -m 'Initial commit'
147
-
148
- This will allow you to track any change resulting of your interactions with `power_stencil` command line.
144
+ **:information_source: If you have `git` installed on your system, **the repository of the newly created project has been automatically turned into a git repository. And any action done through the `power_stencil` command-line will be automatically tracked by `git`**. Only things you will do outside of the `power_stencil` command-line (adding or modifying templates, creating or modifying entity types... any manual action) will require a user action to make `git` take it in account. You can completely de-activate this behaviour if you want to fully manage things by yourself by adding `:no-git: true` in the `.ps_project/versioned-config.yaml`, yet there is no good reason for that... Unless you know what you are doing, you should keep the default settings.
149
145
 
150
146
  ## `PowerStencil` project structure
151
147
 
@@ -20,6 +20,15 @@ Builds
20
20
 
21
21
  You build a [buildable] entity by issuing `power_stencil build <entity_type>/<entity_name>`. If you try to build an entity which is not buildable, the process fail with an error message.
22
22
 
23
+ **:information_source: You can get the list of buildable entities in your repository by issuing a `power_stencil build --list`:**
24
+
25
+ ```
26
+ $ power_stencil build --list
27
+ - 'simple_exec' (buildable by 'PowerStencil core' and provided by 'PowerStencil core').
28
+ ```
29
+
30
+ We will see later in the [templates] part what to do with this `simple_exec` entity type.
31
+
23
32
  Let's describe a bit more in detail what this build process is:
24
33
 
25
34
  ![entity-build-flow]
@@ -32,7 +41,7 @@ I guess you understood this is not a "real" _compilation_ process we are discuss
32
41
 
33
42
  The mechanism of the compilation is coming from the [universe_compiler] Gem, but the two following features are the ones you really need to understand.
34
43
 
35
- :information_source: The compilation process can be applied to any entity, ie it doesn't need to be [buildable] (see in next paragraph how to run the compilation). But an entity needs to be [buildable] to use `power_stencil build` which corresponds actually to _compilation_ + _detemplatization_.
44
+ :information_source: The compilation process is actually applied to all entities, ie it doesn't need to be [buildable] (see in next paragraph how to run the compilation). But an entity needs to be [buildable] to use `power_stencil build` which corresponds actually to _compilation_ + _detemplatization_.
36
45
 
37
46
  ## Extending an entity
38
47
 
@@ -58,8 +58,8 @@ $ power_stencil info
58
58
  PROJECT REPORT
59
59
  --------------------------------------------------------------------------------
60
60
  General information:
61
- - Project required version: 0.2.18
62
- - PowerStencil version: 0.2.18
61
+ - Project required version: 0.6.1
62
+ - PowerStencil version: 0.6.1
63
63
  --------------------------------------------------------------------------------
64
64
  Paths:
65
65
  - Project root path: '/tmp/tst2'
@@ -75,31 +75,31 @@ PROJECT REPORT
75
75
  - project_config: 1
76
76
  --------------------------------------------------------------------------------
77
77
  Available entity types:
78
- - Type 'base_entity' --> PowerStencil::SystemEntityDefinitions::ProjectEntity
79
- - Type 'entity_override' --> UniverseCompiler::Entity::Override
80
- - Type 'plugin_definition' --> PowerStencil::SystemEntityDefinitions::Plugin (template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.2.18/etc/templates/plugin_definition')
81
- - Type 'process_descriptor' --> PowerStencil::SystemEntityDefinitions::ProcessDescriptor
82
- - Type 'project_config' --> PowerStencil::SystemEntityDefinitions::ProjectConfig
83
- - Type 'simple_exec' --> PowerStencil::SystemEntityDefinitions::SimpleExec (template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.2.18/etc/templates/simple_exec')
78
+ - Type 'base_entity' --> PowerStencil::SystemEntityDefinitions::ProjectEntity (provided by 'PowerStencil core')
79
+ - Type 'entity_override' --> UniverseCompiler::Entity::Override (provided by 'PowerStencil core')
80
+ - Type 'plugin_definition' --> PowerStencil::SystemEntityDefinitions::Plugin (provided by 'PowerStencil core') template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.6.1/etc/templates/plugin_definition'
81
+ - Type 'process_descriptor' --> PowerStencil::SystemEntityDefinitions::ProcessDescriptor (provided by 'PowerStencil core')
82
+ - Type 'project_config' --> PowerStencil::SystemEntityDefinitions::ProjectConfig (provided by 'PowerStencil core')
83
+ - Type 'simple_exec' --> PowerStencil::SystemEntityDefinitions::SimpleExec (provided by 'PowerStencil core') template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.6.1/etc/templates/simple_exec'
84
84
  ```
85
85
 
86
86
  It provides a lot of information about the project, but let's focus on the `Entities` and `Available entity types` parts of the report.
87
87
 
88
88
  You can see here above that only 6 types of entity are defined by default in a brand new created `PowerStencil` project. You can find them below with some of their core features:
89
89
 
90
- | entity type | system | persisted | buildable | has associated files |
91
- |-------------|:------:|:---------:|:---------:|:--------------------:|
90
+ | entity type | system | persisted | buildable | provides templates |
91
+ |-------------|:------:|:---------:|:---------:|:------------------:|
92
92
  |base_entity||X
93
93
  |entity_override||X
94
- |plugin_definition|X
94
+ |plugin_definition|X|||X
95
95
  |process_descriptor||X
96
96
  |project_config|X
97
97
  |simple_exec||X|X|X
98
98
 
99
- - You should not care about _system_ entities unless you are developing features in `PowerStencil`.
100
- - By default any entity type, including those you may create, is _persistent_.
101
- - A _buildable_ entity is an entity you can run `power_stencil build` against. More about this in the [builds] part.
102
- - When an entity _has associated files_, it means its [templates] are in `<project_root>/<entity_type>/<entity_name>` folder. We'll talk about this more in depth in the [templates] and [builds] part.
99
+ - You should not care about _system_ entity types unless you are developing features in `PowerStencil`. You cannot instantiate any of them like others.
100
+ - By default any entity type, including those you may instantiate, is _persistent_.
101
+ - A _buildable_ entity type is an entity type you can run `power_stencil build` against its instantiated entities. More about this in the [builds] part.
102
+ - When an entity type _provides templates_, it means its [templates] will generated in `<project_root>/templates/<entity_type>/<entity_name>` folder when you create an entity of this type. We'll talk about this more in depth in the [templates] and [builds] part.
103
103
 
104
104
  On top of this `power_stencil info` brings you information about the actual Ruby classes implementing those entity types.
105
105
 
@@ -178,20 +178,23 @@ We have seen the `power_stencil info` returns (among other) the number of entiti
178
178
  $ power_stencil check
179
179
  RAW ENTITIES
180
180
  'base_entity/my_1st_entity':
181
- - Storage path: '/tmp/tst2/.ps_project/entities/base_entity/my_1st_entity.yaml'
182
- - Status : Valid
183
- - Buildable : false
181
+ - Storage path : '/tmp/tst2/.ps_project/entities/base_entity/my_1st_entity.yaml'
182
+ - Provided by : 'PowerStencil core'
183
+ - Status : Valid
184
+ - Buildable : false
184
185
  'base_entity/my_2nd_entity':
185
- - Storage path: '/tmp/tst2/.ps_project/entities/base_entity/my_2nd_entity.yaml'
186
- - Status : Valid
187
- - Buildable : false
186
+ - Storage path : '/tmp/tst2/.ps_project/entities/base_entity/my_2nd_entity.yaml'
187
+ - Provided by : 'PowerStencil core'
188
+ - Status : Valid
189
+ - Buildable : false
188
190
  'project_config/Project Config':
189
- - Storage path: ''
190
- - Status : Valid
191
- - Buildable : false
191
+ - Storage path : ''
192
+ - Provided by : 'PowerStencil core'
193
+ - Status : Valid
194
+ - Buildable : false
192
195
  ```
193
196
 
194
- The goal of this command is normally to check the validity of entities, but it brings as well extra information like if the entity is _buildable_ or even where it is stored in the repository.
197
+ The goal of this command is normally to check the validity of entities, but it brings as well extra information like if the entity is _buildable_ or even where it is stored in the repository or if is provided by the core system (PowerStencil core) or a plugin.
195
198
 
196
199
  :information_source: You can notice that the `project_config` entity has no storage path, the reason being [it is not persisted](#default-entity-types) in the entities repository (its content actually comes from config files outside of the repository).
197
200
 
@@ -203,13 +206,15 @@ By default `power_stencil check` will check all entities in the repository but y
203
206
  $ power_stencil check base_entity/my_1st_entity 'project_config/Project Config'
204
207
  RAW ENTITIES
205
208
  'base_entity/my_1st_entity':
206
- - Storage path: '/tmp/tst2/.ps_project/entities/base_entity/my_1st_entity.yaml'
207
- - Status : Valid
208
- - Buildable : false
209
+ - Storage path : '/tmp/tst2/.ps_project/entities/base_entity/my_1st_entity.yaml'
210
+ - Provided by : 'PowerStencil core'
211
+ - Status : Valid
212
+ - Buildable : false
209
213
  'project_config/Project Config':
210
- - Storage path: ''
211
- - Status : Valid
212
- - Buildable : false
214
+ - Storage path : ''
215
+ - Provided by : 'PowerStencil core'
216
+ - Status : Valid
217
+ - Buildable : false
213
218
  ```
214
219
  Another possibility is to check a list of objects using a regular expression (applied to the ID of an entity, ie `<entity_type</<entity_name>`) by using the `--regexp` option:
215
220
 
@@ -217,13 +222,15 @@ Another possibility is to check a list of objects using a regular expression (ap
217
222
  $ power_stencil check base_ --regexp
218
223
  RAW ENTITIES
219
224
  'base_entity/my_1st_entity':
220
- - Storage path: '/tmp/tst2/.ps_project/entities/base_entity/my_1st_entity.yaml'
221
- - Status : Valid
222
- - Buildable : false
225
+ - Storage path : '/tmp/tst2/.ps_project/entities/base_entity/my_1st_entity.yaml'
226
+ - Provided by : 'PowerStencil core'
227
+ - Status : Valid
228
+ - Buildable : false
223
229
  'base_entity/my_2nd_entity':
224
- - Storage path: '/tmp/tst2/.ps_project/entities/base_entity/my_2nd_entity.yaml'
225
- - Status : Valid
226
- - Buildable : false
230
+ - Storage path : '/tmp/tst2/.ps_project/entities/base_entity/my_2nd_entity.yaml'
231
+ - Provided by : 'PowerStencil core'
232
+ - Status : Valid
233
+ - Buildable : false
227
234
  ```
228
235
 
229
236
  ## Querying and graphing entities
@@ -336,9 +343,10 @@ Created 'base_entity/dev_entity'
336
343
  $ power_stencil check base_entity/dev_entity
337
344
  RAW ENTITIES
338
345
  'base_entity/dev_entity':
339
- - Storage path: '/tmp/tst2/.ps_project/user_entities/base_entity/dev_entity.yaml'
340
- - Status : Valid
341
- - Buildable : false
346
+ - Storage path : '/tmp/tst2/.ps_project/user_entities/base_entity/dev_entity.yaml'
347
+ - Provided by : 'PowerStencil core'
348
+ - Status : Valid
349
+ - Buildable : false
342
350
  ```
343
351
  You can notice where the YAML file has been created.
344
352
 
@@ -346,9 +354,9 @@ Of course you can then delete the entity like any other...
346
354
  ```shell
347
355
  $ power_stencil delete base_entity/dev_entity --auto
348
356
  Deleted 'base_entity/dev_entity'
349
-
350
357
  ```
351
358
 
359
+ :hand: As opposed to versioned entities, the templates are not generated in `<project_root>/templates/<entity_type>/<entity_name>` but instead in `<project_root>/unversioned-templates/<entity_type>/<entity_name>`. Anything below `<project_root>/unversioned-templates`, as its name suggests will not be versioned...
352
360
 
353
361
  ## Updating entities
354
362
 
@@ -487,13 +495,13 @@ $ power_stencil info
487
495
  .
488
496
  --------------------------------------------------------------------------------
489
497
  Available entity types:
490
- - Type 'base_entity' --> PowerStencil::SystemEntityDefinitions::ProjectEntity
498
+ - Type 'base_entity' --> PowerStencil::SystemEntityDefinitions::ProjectEntity (provided by 'PowerStencil core')
491
499
  - Type 'custom_entity' --> MyCustomEntity
492
- - Type 'entity_override' --> UniverseCompiler::Entity::Override
493
- - Type 'plugin_definition' --> PowerStencil::SystemEntityDefinitions::Plugin (template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.2.18/etc/templates/plugin_definition')
494
- - Type 'process_descriptor' --> PowerStencil::SystemEntityDefinitions::ProcessDescriptor
495
- - Type 'project_config' --> PowerStencil::SystemEntityDefinitions::ProjectConfig
496
- - Type 'simple_exec' --> PowerStencil::SystemEntityDefinitions::SimpleExec (template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.2.18/etc/templates/simple_exec')
500
+ - Type 'entity_override' --> UniverseCompiler::Entity::Override (provided by 'PowerStencil core')
501
+ - Type 'plugin_definition' --> PowerStencil::SystemEntityDefinitions::Plugin (provided by 'PowerStencil core') template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.6.1/etc/templates/plugin_definition'
502
+ - Type 'process_descriptor' --> PowerStencil::SystemEntityDefinitions::ProcessDescriptor (provided by 'PowerStencil core')
503
+ - Type 'project_config' --> PowerStencil::SystemEntityDefinitions::ProjectConfig (provided by 'PowerStencil core')
504
+ - Type 'simple_exec' --> PowerStencil::SystemEntityDefinitions::SimpleExec (provided by 'PowerStencil core') template-template path: '/opt/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/power_stencil-0.6.1/etc/templates/simple_exec'
497
505
  ```
498
506
  You see that the `custom_entity` type appeared in the list. Need another proof ?
499
507
  ```shell
@@ -503,9 +511,10 @@ Created 'custom_entity/my_1st_custom_entity'
503
511
  $ power_stencil check cust -r
504
512
  RAW ENTITIES
505
513
  'custom_entity/my_1st_custom_entity':
506
- - Storage path: '/tmp/tst2/.ps_project/entities/custom_entity/my_1st_custom_entity.yaml'
507
- - Status : Valid
508
- - Buildable : false
514
+ - Storage path : '/tmp/tst2/.ps_project/entities/custom_entity/my_1st_custom_entity.yaml'
515
+ - Provided by : 'PowerStencil core'
516
+ - Status : Valid
517
+ - Buildable : false
509
518
 
510
519
  $ power_stencil get custom_entity/my_1st_custom_entity --raw
511
520
  --- !ruby/object:MyCustomEntity
@@ -9,9 +9,9 @@
9
9
  xmlns="http://www.w3.org/2000/svg"
10
10
  xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
11
  xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
- width="246.6871mm"
13
- height="153.63528mm"
14
- viewBox="0 0 246.68711 153.63528"
12
+ width="397.49957mm"
13
+ height="153.6353mm"
14
+ viewBox="0 0 397.49958 153.6353"
15
15
  version="1.1"
16
16
  id="svg8"
17
17
  inkscape:version="0.92.3 (2405546, 2018-03-11)"
@@ -20,6 +20,31 @@
20
20
  id="title1457">PowerStencil entity creation flow description</title>
21
21
  <defs
22
22
  id="defs2">
23
+ <marker
24
+ inkscape:stockid="Arrow1Send"
25
+ orient="auto"
26
+ refY="0"
27
+ refX="0"
28
+ id="marker1186"
29
+ style="overflow:visible"
30
+ inkscape:isstock="true">
31
+ <path
32
+ id="path1184"
33
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
34
+ style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.00000003pt;stroke-opacity:1"
35
+ transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
36
+ inkscape:connector-curvature="0" />
37
+ </marker>
38
+ <inkscape:path-effect
39
+ effect="bspline"
40
+ id="path-effect1111"
41
+ is_visible="true"
42
+ weight="33.333333"
43
+ steps="2"
44
+ helper_size="0"
45
+ apply_no_weight="true"
46
+ apply_with_weight="true"
47
+ only_selected="false" />
23
48
  <marker
24
49
  inkscape:isstock="true"
25
50
  style="overflow:visible"
@@ -27,7 +52,8 @@
27
52
  refX="0"
28
53
  refY="0"
29
54
  orient="auto"
30
- inkscape:stockid="Arrow1Send">
55
+ inkscape:stockid="Arrow1Send"
56
+ inkscape:collect="always">
31
57
  <path
32
58
  inkscape:connector-curvature="0"
33
59
  transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
@@ -86,6 +112,31 @@
86
112
  apply_no_weight="true"
87
113
  apply_with_weight="true"
88
114
  only_selected="false" />
115
+ <marker
116
+ inkscape:isstock="true"
117
+ style="overflow:visible"
118
+ id="marker1231-8"
119
+ refX="0"
120
+ refY="0"
121
+ orient="auto"
122
+ inkscape:stockid="Arrow1Send">
123
+ <path
124
+ inkscape:connector-curvature="0"
125
+ transform="matrix(-0.2,0,0,-0.2,-1.2,0)"
126
+ style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.00000003pt;stroke-opacity:1"
127
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
128
+ id="path1229-7" />
129
+ </marker>
130
+ <inkscape:path-effect
131
+ only_selected="false"
132
+ apply_with_weight="true"
133
+ apply_no_weight="true"
134
+ helper_size="0"
135
+ steps="2"
136
+ weight="33.333333"
137
+ is_visible="true"
138
+ id="path-effect1227-4"
139
+ effect="bspline" />
89
140
  </defs>
90
141
  <sodipodi:namedview
91
142
  id="base"
@@ -95,8 +146,8 @@
95
146
  inkscape:pageopacity="0.0"
96
147
  inkscape:pageshadow="2"
97
148
  inkscape:zoom="0.7"
98
- inkscape:cx="530.80204"
99
- inkscape:cy="231.40443"
149
+ inkscape:cx="691.24662"
150
+ inkscape:cy="306.60718"
100
151
  inkscape:document-units="mm"
101
152
  inkscape:current-layer="layer1"
102
153
  showgrid="false"
@@ -130,37 +181,44 @@
130
181
  inkscape:label="Calque 1"
131
182
  inkscape:groupmode="layer"
132
183
  id="layer1"
133
- transform="translate(13.469479,-90.846419)">
184
+ transform="translate(113.48204,-90.846423)">
185
+ <path
186
+ style="opacity:1;vector-effect:none;fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.88228047;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1186)"
187
+ d="m -48.999241,171.83879 c 60.854543,0 121.708712,0 182.562501,0"
188
+ id="path1109"
189
+ inkscape:connector-curvature="0"
190
+ inkscape:path-effect="#path-effect1111"
191
+ inkscape:original-d="m -48.999241,171.83879 c 60.854543,-2.6e-4 121.708712,-2.6e-4 182.562501,0" />
134
192
  <rect
135
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#a7c2db;fill-opacity:0;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.00654888;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4.02619566, 4.02619566;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
193
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#a7c2db;fill-opacity:0;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1.29813564;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:5.19254323, 5.19254323;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
136
194
  id="rect927"
137
- width="225.68056"
138
- height="132.62874"
139
- x="-2.9662042"
140
- y="101.34969"
141
- ry="5.5490241" />
195
+ width="376.20145"
196
+ height="132.33716"
197
+ x="-102.83297"
198
+ y="101.49549"
199
+ ry="5.5368247" />
142
200
  <path
143
- inkscape:original-d="m 66.030921,191.14748 c 20.219814,-6.66165 40.439659,-13.32303 60.659529,-19.98415"
201
+ inkscape:original-d="m 66.030921,191.14748 c 19.950452,-6.45185 39.900939,-12.90345 59.851439,-19.35479"
144
202
  inkscape:path-effect="#path-effect1227"
145
203
  inkscape:connector-curvature="0"
146
204
  id="path1225"
147
- d="m 66.030921,191.14748 c 20.219896,-6.6614 40.439739,-13.32278 60.659529,-19.98415"
148
- style="fill:#4d4d4d;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.88228047;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1231)" />
205
+ d="M 66.030921,191.14748 C 85.98145,184.69587 105.93194,178.24427 125.88236,171.79269"
206
+ style="fill:#4d4d4d;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.84002388;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1231)" />
149
207
  <path
150
- style="fill:#4d4d4d;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.88228047;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"
151
- d="m 66.030921,151.17918 c 20.219896,6.6614 40.439739,13.32278 60.659529,19.98415"
208
+ style="fill:#4d4d4d;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.88874269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Send)"
209
+ d="m 65.996854,151.12108 c 19.962565,6.79369 39.925066,13.58735 59.887526,20.381"
152
210
  id="path1079"
153
211
  inkscape:connector-curvature="0"
154
212
  inkscape:path-effect="#path-effect1081"
155
- inkscape:original-d="m 66.030921,151.17918 c 20.219814,6.66165 40.439659,13.32303 60.659529,19.98415" />
213
+ inkscape:original-d="m 65.996854,151.12108 c 19.962479,6.79394 39.924986,13.5876 59.887526,20.381" />
156
214
  <text
157
215
  xml:space="preserve"
158
216
  style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#999999;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
159
- x="5.2615628"
217
+ x="-92.926559"
160
218
  y="110.55138"
161
219
  id="text1006-9"><tspan
162
220
  sodipodi:role="line"
163
- x="5.2615628"
221
+ x="-92.926559"
164
222
  y="110.55138"
165
223
  style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#999999;stroke-width:0.26458332px"
166
224
  id="tspan1026">Entity creation process (power_stencil create)</tspan></text>
@@ -234,141 +292,216 @@
234
292
  </g>
235
293
  </g>
236
294
  <g
237
- id="g1265">
295
+ id="g1039"
296
+ transform="translate(-98.27381,-31.074538)">
238
297
  <g
239
- transform="translate(-81.557176,70.303571)"
240
- id="g1087">
298
+ id="g1026">
241
299
  <rect
242
300
  ry="1.7865629"
243
- y="132.60976"
244
- x="87.683319"
301
+ y="202.91333"
302
+ x="6.126143"
245
303
  height="21.836939"
246
304
  width="87.226822"
247
305
  id="rect933"
248
306
  style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c8e1c8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7077052;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
249
307
  <text
250
308
  id="text937"
251
- y="138.95341"
252
- x="93.796112"
309
+ y="209.25699"
310
+ x="12.238936"
253
311
  style="font-style:normal;font-weight:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
254
312
  xml:space="preserve"><tspan
255
313
  id="tspan941"
256
314
  style="stroke-width:0.26458332px"
257
- y="138.95341"
258
- x="93.796112"
315
+ y="209.25699"
316
+ x="12.238936"
259
317
  sodipodi:role="line">templates-templates</tspan><tspan
260
318
  id="tspan1007"
261
319
  style="stroke-width:0.26458332px"
262
- y="144.74118"
263
- x="93.796112"
320
+ y="215.04475"
321
+ x="12.238936"
264
322
  sodipodi:role="line">within project in </tspan><tspan
265
323
  id="tspan1009"
266
324
  style="stroke-width:0.26458332px"
267
- y="150.52893"
268
- x="93.796112"
325
+ y="220.8325"
326
+ x="12.238936"
269
327
  sodipodi:role="line">.ps_project/templates-templates</tspan></text>
270
328
  </g>
271
329
  <g
272
- transform="translate(-63.122026,6.511274)"
273
- id="g1068">
330
+ id="g1019">
274
331
  <rect
275
332
  style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#a7c2db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7077052;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
276
333
  id="rect1058"
277
334
  width="87.226822"
278
335
  height="21.836939"
279
- x="69.248169"
280
- y="174.56511"
336
+ x="6.126143"
337
+ y="181.07639"
281
338
  ry="1.7865629" />
282
339
  <text
283
340
  id="text1017"
284
- y="183.84898"
285
- x="112.80054"
341
+ y="190.36026"
342
+ x="49.678513"
286
343
  style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
287
344
  xml:space="preserve"><tspan
288
345
  id="tspan1013"
289
346
  style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px"
290
- y="183.84898"
291
- x="112.80054"
347
+ y="190.36026"
348
+ x="49.678513"
292
349
  sodipodi:role="line">Custom Project</tspan><tspan
293
350
  style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px"
294
- y="189.63675"
295
- x="112.80054"
351
+ y="196.14803"
352
+ x="49.678513"
296
353
  sodipodi:role="line"
297
354
  id="tspan1015">Entity Types</tspan></text>
298
355
  </g>
299
356
  </g>
300
357
  <g
301
- id="g1074-5"
302
- transform="translate(54.418475,47.33271)">
358
+ id="g1107">
303
359
  <g
304
- id="g911">
305
- <g
306
- id="g1149"
307
- transform="translate(-15.411332,-8.7791363)"
308
- style="">
309
- <rect
310
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c8e1c8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7077052;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
311
- id="rect1139"
312
- width="87.226822"
313
- height="21.836939"
314
- x="87.683319"
315
- y="132.60976"
316
- ry="1.7865629" />
317
- <text
318
- xml:space="preserve"
319
- style="font-style:normal;font-weight:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
320
- x="93.796112"
321
- y="138.95341"
322
- id="text1147"><tspan
323
- sodipodi:role="line"
324
- x="93.796112"
325
- y="138.95341"
326
- style="stroke-width:0.26458332px"
327
- id="tspan1143">templates in project in </tspan><tspan
328
- sodipodi:role="line"
329
- x="93.796112"
330
- y="144.74118"
331
- style="stroke-width:0.26458332px"
332
- id="tspan1145">&lt;entity_type&gt;/&lt;entity_name&gt;</tspan></text>
333
- </g>
334
- <g
335
- id="g892">
336
- <rect
337
- ry="1.7865629"
338
- y="101.99368"
339
- x="72.27198"
340
- height="21.836939"
341
- width="87.226822"
342
- id="rect1062-3"
343
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#a7c2db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7077052;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
344
- <text
345
- id="text819-3"
346
- y="110.46727"
347
- x="115.78365"
348
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
349
- xml:space="preserve"><tspan
350
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px"
351
- y="110.46727"
352
- x="115.78365"
353
- sodipodi:role="line"
354
- id="tspan951-7">Project Entities</tspan></text>
355
- <text
356
- xml:space="preserve"
357
- style="font-style:normal;font-weight:normal;font-size:2.72649646px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15579979px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
358
- x="115.86675"
359
- y="115.04259"
360
- id="text882"><tspan
361
- sodipodi:role="line"
362
- id="tspan880"
363
- x="116.30076"
364
- y="115.04259"
365
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.72649646px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.15579979px">Stored in </tspan><tspan
366
- sodipodi:role="line"
367
- x="115.86675"
368
- y="118.45071"
369
- style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.72649646px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.15579979px"
370
- id="tspan884">.ps_project/entities/&lt;entity_type&gt;/&lt;entity_name&gt;.yaml</tspan></text>
371
- </g>
360
+ id="g1088">
361
+ <rect
362
+ ry="2.7240984"
363
+ y="171.79269"
364
+ x="125.88236"
365
+ height="33.296322"
366
+ width="137.29633"
367
+ id="rect1139"
368
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c8e1c8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.70367658;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
369
+ <text
370
+ id="text1147"
371
+ y="177.50699"
372
+ x="132.80325"
373
+ style="font-style:normal;font-weight:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
374
+ xml:space="preserve"><tspan
375
+ id="tspan1143"
376
+ style="stroke-width:0.26458332px"
377
+ y="177.50699"
378
+ x="132.80325"
379
+ sodipodi:role="line">templates for <tspan
380
+ style="font-weight:bold"
381
+ id="tspan924">versioned</tspan> entities in:</tspan><tspan
382
+ id="tspan1145"
383
+ style="stroke-width:0.26458332px"
384
+ y="183.29475"
385
+ x="132.80325"
386
+ sodipodi:role="line">templates/&lt;entity_type&gt;/&lt;entity_name&gt;</tspan><tspan
387
+ style="stroke-width:0.26458332px"
388
+ y="189.0825"
389
+ x="132.80325"
390
+ sodipodi:role="line"
391
+ id="tspan922" /><tspan
392
+ style="stroke-width:0.26458332px"
393
+ y="194.87027"
394
+ x="132.80325"
395
+ sodipodi:role="line"
396
+ id="tspan918">templates for <tspan
397
+ style="font-weight:bold"
398
+ id="tspan926">unversioned</tspan> entities in:</tspan><tspan
399
+ style="stroke-width:0.26458332px"
400
+ y="200.65804"
401
+ x="132.80325"
402
+ sodipodi:role="line"
403
+ id="tspan920">unversioned-templates/&lt;entity_type&gt;/&lt;entity_name&gt;</tspan></text>
404
+ </g>
405
+ <g
406
+ id="g1077">
407
+ <rect
408
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#a7c2db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7077052;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
409
+ id="rect1062-3"
410
+ width="136.91151"
411
+ height="32.911507"
412
+ x="125.88438"
413
+ y="138.59058"
414
+ ry="2.6926153" />
415
+ <text
416
+ xml:space="preserve"
417
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
418
+ x="195.23486"
419
+ y="149.33342"
420
+ id="text819-3"><tspan
421
+ id="tspan951-7"
422
+ sodipodi:role="line"
423
+ x="195.23486"
424
+ y="149.33342"
425
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px">Project Entities</tspan></text>
426
+ <text
427
+ id="text882"
428
+ y="159.20033"
429
+ x="195.30766"
430
+ style="font-style:normal;font-weight:normal;font-size:2.72649646px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15579979px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
431
+ xml:space="preserve"><tspan
432
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.15579979px"
433
+ y="159.20033"
434
+ x="195.98152"
435
+ id="tspan880"
436
+ sodipodi:role="line">Stored in </tspan><tspan
437
+ id="tspan884"
438
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.23333311px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.15579979px"
439
+ y="162.99988"
440
+ x="195.30766"
441
+ sodipodi:role="line">.ps_project/entities/&lt;entity_type&gt;/&lt;entity_name&gt;.yaml</tspan></text>
442
+ </g>
443
+ </g>
444
+ <g
445
+ id="g1069"
446
+ transform="translate(-1.0213384,-111.88095)">
447
+ <g
448
+ id="g1056">
449
+ <rect
450
+ ry="1.7865629"
451
+ y="315.04086"
452
+ x="7.0617967"
453
+ height="21.836939"
454
+ width="87.226822"
455
+ id="rect933-7"
456
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#c8e1c8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7077052;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
457
+ <text
458
+ id="text937-8"
459
+ y="321.38452"
460
+ x="13.17459"
461
+ style="font-style:normal;font-weight:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
462
+ xml:space="preserve"><tspan
463
+ id="tspan941-5"
464
+ style="stroke-width:0.26458332px"
465
+ y="321.38452"
466
+ x="13.17459"
467
+ sodipodi:role="line">templates-templates</tspan><tspan
468
+ id="tspan1009-3"
469
+ style="stroke-width:0.26458332px"
470
+ y="327.17227"
471
+ x="13.17459"
472
+ sodipodi:role="line">within plugins. Path is </tspan><tspan
473
+ style="stroke-width:0.26458332px"
474
+ y="332.96005"
475
+ x="13.17459"
476
+ sodipodi:role="line"
477
+ id="tspan1043">customizable (see plugins doc)</tspan></text>
478
+ </g>
479
+ <g
480
+ id="g1049">
481
+ <rect
482
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#a7c2db;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7077052;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
483
+ id="rect1058-8"
484
+ width="87.226822"
485
+ height="21.836939"
486
+ x="7.0617967"
487
+ y="293.20392"
488
+ ry="1.7865629" />
489
+ <text
490
+ id="text1017-3"
491
+ y="302.48779"
492
+ x="50.614166"
493
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
494
+ xml:space="preserve"><tspan
495
+ id="tspan1013-7"
496
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px"
497
+ y="302.48779"
498
+ x="50.614166"
499
+ sodipodi:role="line">Plugins</tspan><tspan
500
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.63020849px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;stroke-width:0.26458332px"
501
+ y="308.27554"
502
+ x="50.614166"
503
+ sodipodi:role="line"
504
+ id="tspan1015-9">Entity Types</tspan></text>
372
505
  </g>
373
506
  </g>
374
507
  </g>