power_stencil 0.6.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) 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 +1 -0
  8. data/doc/templates.md +23 -18
  9. data/etc/base_commands_definition.yml +14 -0
  10. data/etc/power_stencil.yaml +7 -1
  11. data/etc/templates/project/.zzzgitignore.erb +8 -3
  12. data/lib/power_stencil.rb +1 -0
  13. data/lib/power_stencil/command_processors/build.rb +15 -2
  14. data/lib/power_stencil/command_processors/check.rb +12 -0
  15. data/lib/power_stencil/command_processors/create.rb +6 -5
  16. data/lib/power_stencil/command_processors/delete.rb +23 -15
  17. data/lib/power_stencil/command_processors/edit.rb +4 -2
  18. data/lib/power_stencil/command_processors/plugin.rb +21 -6
  19. data/lib/power_stencil/command_processors/shell.rb +10 -3
  20. data/lib/power_stencil/dsl/entities.rb +0 -16
  21. data/lib/power_stencil/engine/entities_definitions.rb +16 -7
  22. data/lib/power_stencil/engine/entities_handling.rb +1 -1
  23. data/lib/power_stencil/engine/project_engine.rb +6 -10
  24. data/lib/power_stencil/initializer.rb +4 -7
  25. data/lib/power_stencil/plugins/entity_definitions.rb +15 -0
  26. data/lib/power_stencil/plugins/require.rb +1 -0
  27. data/lib/power_stencil/plugins/templates.rb +3 -3
  28. data/lib/power_stencil/project/base.rb +24 -9
  29. data/lib/power_stencil/project/create.rb +23 -2
  30. data/lib/power_stencil/project/git.rb +75 -0
  31. data/lib/power_stencil/project/info.rb +14 -1
  32. data/lib/power_stencil/project/paths.rb +22 -6
  33. data/lib/power_stencil/project/plugins.rb +1 -1
  34. data/lib/power_stencil/project/templates.rb +15 -22
  35. data/lib/power_stencil/system_entity_definitions/all.rb +2 -1
  36. data/lib/power_stencil/system_entity_definitions/buildable.rb +1 -1
  37. data/lib/power_stencil/system_entity_definitions/entity_override.rb +6 -0
  38. data/lib/power_stencil/system_entity_definitions/entity_project_common.rb +13 -5
  39. data/lib/power_stencil/system_entity_definitions/{has_associated_files.rb → entity_templates.rb} +2 -2
  40. data/lib/power_stencil/system_entity_definitions/project_config.rb +1 -1
  41. data/lib/power_stencil/system_entity_definitions/project_entity.rb +7 -0
  42. data/lib/power_stencil/system_entity_definitions/simple_exec.rb +3 -3
  43. data/lib/power_stencil/system_entity_definitions/source_provider.rb +15 -0
  44. data/lib/power_stencil/version.rb +1 -1
  45. data/power_stencil.gemspec +1 -0
  46. metadata +20 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 687808cf09467280d9b69cc408051a26c27910f1
4
- data.tar.gz: 30ab8477a45c06b3263b8eaeeabf013b8641830c
3
+ metadata.gz: 1f2f1b74e85edac12e51c2d02482f15f06e58e89
4
+ data.tar.gz: b346762e7dc8314ea998fac76f1df8fa6a08ca5e
5
5
  SHA512:
6
- metadata.gz: 6839ca4af2d78718eaf88c378c424109f9bc5f8cab5ef1ab944ee01a1a437fcb85304638c2d46196f8690d502cee40698416caaa0ef1492676363ee0220db2a5
7
- data.tar.gz: f448a6a57f64bd209f9682f94581ad9fbd19433ad51a46e8fd6bbcc6aeaadedb4de5a6d1bccd21b1833eba6f4e0ffb94061acbc677360d131d6cff77ba7fa6f2
6
+ metadata.gz: 9facec67f2da0cbaebd9117326bf5544497e23d2981b07565763ab7d36950b93fd8d3ff87cc09016e52c79707da2a982e06cf899d1a23682f80895b960d927ab
7
+ data.tar.gz: 1d6b61bde1d41cd5baa82b50d56b0225979dd79b09fabce5aae4e378004cadf5795db8ad570677b3fc01e50ad787d03c51e1985dbca4cc93cfd220764a26b2bf
@@ -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>