power_stencil 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +198 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/bin/update_plugin_template +79 -0
  13. data/doc/builds.md +267 -0
  14. data/doc/entities.md +964 -0
  15. data/doc/example_use_cases.md +59 -0
  16. data/doc/images/power-stencil-entity-build.svg +481 -0
  17. data/doc/images/power-stencil-entity-creation.svg +375 -0
  18. data/doc/images/power-stencil-simple-flow.svg +265 -0
  19. data/doc/plugins.md +169 -0
  20. data/doc/templates.md +333 -0
  21. data/etc/base_commands_definition.yml +259 -0
  22. data/etc/meta_templates/plugin_seed/etc/command_line.yaml +12 -0
  23. data/etc/meta_templates/plugin_seed/etc/plugin_config.yaml +4 -0
  24. data/etc/meta_templates/plugin_seed/etc/templates/.git_keep +0 -0
  25. data/etc/meta_templates/plugin_seed/lib/{entity}.rb.erb +34 -0
  26. data/etc/meta_templates/plugin_seed/lib/{entity}/entity_definitions/{entity}_entity.rb.erb +11 -0
  27. data/etc/meta_templates/plugin_seed/lib/{entity}/plugin_helper.rb.erb +17 -0
  28. data/etc/meta_templates/plugin_seed/lib/{entity}/version.rb.erb +3 -0
  29. data/etc/meta_templates/plugin_seed/lib/{entity}/{entity}_processor.rb.erb +19 -0
  30. data/etc/meta_templates/plugin_seed/psplugin_{entity}.gemspec +36 -0
  31. data/etc/power_stencil.yaml +92 -0
  32. data/etc/templates/plugin_definition/.gitignore +11 -0
  33. data/etc/templates/plugin_definition/.rspec +3 -0
  34. data/etc/templates/plugin_definition/.travis.yml +5 -0
  35. data/etc/templates/plugin_definition/CODE_OF_CONDUCT.md +74 -0
  36. data/etc/templates/plugin_definition/Gemfile +6 -0
  37. data/etc/templates/plugin_definition/LICENSE.txt +21 -0
  38. data/etc/templates/plugin_definition/README.md +43 -0
  39. data/etc/templates/plugin_definition/Rakefile +6 -0
  40. data/etc/templates/plugin_definition/bin/console +14 -0
  41. data/etc/templates/plugin_definition/bin/setup +8 -0
  42. data/etc/templates/plugin_definition/etc/command_line.yaml +12 -0
  43. data/etc/templates/plugin_definition/etc/plugin_config.yaml +4 -0
  44. data/etc/templates/plugin_definition/etc/templates/.git_keep +1 -0
  45. data/etc/templates/plugin_definition/lib/{entity}.rb.erb +34 -0
  46. data/etc/templates/plugin_definition/lib/{entity}/entity_definitions/{entity}_entity.rb.erb +11 -0
  47. data/etc/templates/plugin_definition/lib/{entity}/plugin_helper.rb.erb +17 -0
  48. data/etc/templates/plugin_definition/lib/{entity}/version.rb.erb +3 -0
  49. data/etc/templates/plugin_definition/lib/{entity}/{entity}_processor.rb.erb +19 -0
  50. data/etc/templates/plugin_definition/psplugin_{entity}.gemspec +36 -0
  51. data/etc/templates/plugin_definition/spec/spec_helper.rb +14 -0
  52. data/etc/templates/plugin_definition/spec/{entity}_spec.rb +9 -0
  53. data/etc/templates/project/.copy_ignore +2 -0
  54. data/etc/templates/project/.gitignore.erb +6 -0
  55. data/etc/templates/project/.ps_project/entities/.gitkeep +0 -0
  56. data/etc/templates/project/.ps_project/entities/README.md +11 -0
  57. data/etc/templates/project/.ps_project/entity_definitions/.gitkeep +0 -0
  58. data/etc/templates/project/.ps_project/entity_definitions/README.md +15 -0
  59. data/etc/templates/project/.ps_project/personal-config.yaml +8 -0
  60. data/etc/templates/project/.ps_project/plugins/.gitkeep +0 -0
  61. data/etc/templates/project/.ps_project/templates-templates/.gitkeep +0 -0
  62. data/etc/templates/project/.ps_project/templates-templates/README.md +13 -0
  63. data/etc/templates/project/.ps_project/user_entities/.gitkeep +0 -0
  64. data/etc/templates/project/.ps_project/user_entities/README.md +12 -0
  65. data/etc/templates/project/.ps_project/versioned-config.yaml +6 -0
  66. data/etc/templates/simple_exec/main.sh +4 -0
  67. data/exe/power_stencil +28 -0
  68. data/lib/power_stencil.rb +53 -0
  69. data/lib/power_stencil/command_processors/build.rb +43 -0
  70. data/lib/power_stencil/command_processors/check.rb +35 -0
  71. data/lib/power_stencil/command_processors/create.rb +70 -0
  72. data/lib/power_stencil/command_processors/delete.rb +38 -0
  73. data/lib/power_stencil/command_processors/edit.rb +35 -0
  74. data/lib/power_stencil/command_processors/entity_helper.rb +105 -0
  75. data/lib/power_stencil/command_processors/get.rb +22 -0
  76. data/lib/power_stencil/command_processors/info.rb +41 -0
  77. data/lib/power_stencil/command_processors/init.rb +47 -0
  78. data/lib/power_stencil/command_processors/new_plugin.rb +31 -0
  79. data/lib/power_stencil/command_processors/root.rb +27 -0
  80. data/lib/power_stencil/command_processors/shell.rb +37 -0
  81. data/lib/power_stencil/command_processors/trace_helper.rb +20 -0
  82. data/lib/power_stencil/dsl/base.rb +24 -0
  83. data/lib/power_stencil/dsl/entities.rb +46 -0
  84. data/lib/power_stencil/dsl/plugin_generation.rb +17 -0
  85. data/lib/power_stencil/engine/base.rb +50 -0
  86. data/lib/power_stencil/engine/build_handling.rb +77 -0
  87. data/lib/power_stencil/engine/directory_processor.rb +111 -0
  88. data/lib/power_stencil/engine/entities_definitions.rb +42 -0
  89. data/lib/power_stencil/engine/entities_handling.rb +76 -0
  90. data/lib/power_stencil/engine/entity_engine.rb +20 -0
  91. data/lib/power_stencil/engine/init_engine.rb +18 -0
  92. data/lib/power_stencil/engine/project_engine.rb +75 -0
  93. data/lib/power_stencil/engine/renderers/erb.rb +21 -0
  94. data/lib/power_stencil/error.rb +20 -0
  95. data/lib/power_stencil/initializer.rb +87 -0
  96. data/lib/power_stencil/plugins/base.rb +54 -0
  97. data/lib/power_stencil/plugins/capabilities.rb +30 -0
  98. data/lib/power_stencil/plugins/command_line.rb +27 -0
  99. data/lib/power_stencil/plugins/config.rb +32 -0
  100. data/lib/power_stencil/plugins/dependencies.rb +32 -0
  101. data/lib/power_stencil/plugins/gem.rb +57 -0
  102. data/lib/power_stencil/plugins/require.rb +77 -0
  103. data/lib/power_stencil/plugins/templates.rb +21 -0
  104. data/lib/power_stencil/project/base.rb +79 -0
  105. data/lib/power_stencil/project/config.rb +54 -0
  106. data/lib/power_stencil/project/create.rb +30 -0
  107. data/lib/power_stencil/project/info.rb +72 -0
  108. data/lib/power_stencil/project/paths.rb +119 -0
  109. data/lib/power_stencil/project/plugins.rb +89 -0
  110. data/lib/power_stencil/project/proxy.rb +13 -0
  111. data/lib/power_stencil/project/templates.rb +56 -0
  112. data/lib/power_stencil/project/versioning.rb +29 -0
  113. data/lib/power_stencil/system_entity_definitions/all.rb +14 -0
  114. data/lib/power_stencil/system_entity_definitions/buildable.rb +23 -0
  115. data/lib/power_stencil/system_entity_definitions/entity_override.rb +8 -0
  116. data/lib/power_stencil/system_entity_definitions/entity_project_common.rb +33 -0
  117. data/lib/power_stencil/system_entity_definitions/has_associated_files.rb +13 -0
  118. data/lib/power_stencil/system_entity_definitions/non_persistent.rb +14 -0
  119. data/lib/power_stencil/system_entity_definitions/plugin.rb +17 -0
  120. data/lib/power_stencil/system_entity_definitions/process_descriptor.rb +15 -0
  121. data/lib/power_stencil/system_entity_definitions/project_config.rb +24 -0
  122. data/lib/power_stencil/system_entity_definitions/project_entity.rb +16 -0
  123. data/lib/power_stencil/system_entity_definitions/simple_exec.rb +47 -0
  124. data/lib/power_stencil/utils/directory_processor.rb +54 -0
  125. data/lib/power_stencil/utils/file_edit.rb +87 -0
  126. data/lib/power_stencil/utils/file_helper.rb +56 -0
  127. data/lib/power_stencil/utils/gem_utils.rb +13 -0
  128. data/lib/power_stencil/utils/secure_require.rb +26 -0
  129. data/lib/power_stencil/utils/semantic_version.rb +128 -0
  130. data/lib/power_stencil/version.rb +3 -0
  131. data/power_stencil.gemspec +32 -0
  132. metadata +287 -0
@@ -0,0 +1,30 @@
1
+ require 'fileutils'
2
+
3
+ module PowerStencil
4
+ module Project
5
+
6
+ module Create
7
+
8
+ include Climatic::Proxy
9
+
10
+ def create_project_tree(path, config_directory_name = PowerStencil.config[:default_config_directory_name])
11
+ path = File.expand_path path
12
+ config_path = File.join path, config_directory_name
13
+ if Dir.exists? config_path
14
+ raise PowerStencil::Error, "The directory '#{path}' already contains a PowerStencil project !" unless config[:force]
15
+ end
16
+ logger.info "Creating project in '#{path}'..."
17
+ render_project_template_in(path)
18
+ end
19
+
20
+ private
21
+
22
+ def render_project_template_in(new_project_config_path)
23
+ engine = PowerStencil::Engine::InitEngine.new
24
+ engine.render_source PowerStencil::Project::Paths.project_system_template_path, new_project_config_path
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,72 @@
1
+ module PowerStencil
2
+ module Project
3
+
4
+ module Info
5
+
6
+ def paths_report
7
+ report = []
8
+ report << "Project root path: '#{project_root}'"
9
+ report << "Project configuration path: '#{project_config_root}'"
10
+ report << if File.exist? project_personal_config_file
11
+ "Local user configuration file: '#{project_personal_config_file}'"
12
+ else
13
+ 'No personal project config file found'
14
+ end
15
+ report << if File.exist? project_versioned_config_file
16
+ "Project (versioned) configuration file: '#{project_versioned_config_file}'"
17
+ else
18
+ 'No versioned project config file found'
19
+ end
20
+ report << "Project entities: '#{project_entities_path}'"
21
+ report << "User (unversioned) entities: '#{user_entities_path}'"
22
+ txt = "Project specific entity definitions: '#{project_entity_definitions_path}'"
23
+ txt << ' (missing)' unless Dir.exist? project_entity_definitions_path
24
+ report << txt
25
+ end
26
+
27
+ def general_report
28
+ report = []
29
+ report << "Project required version: #{config[:min_power_stencil_version]}" unless config[:min_power_stencil_version].nil?
30
+ report << "PowerStencil version: #{PowerStencil::VERSION}"
31
+ end
32
+
33
+ def plugin_report(plugin_name, plugin)
34
+ report = []
35
+ # report << "Plugin '#{plugin_name}'"
36
+ plugin.capabilities.each {|name, status| report << "#{name.to_s}: #{status}"}
37
+ report
38
+ end
39
+
40
+ def entities_report
41
+ report = []
42
+ used_types = {}
43
+ report << "Contains #{engine.root_universe.get_entities.count} entities."
44
+ engine.root_universe.get_entities
45
+ .sort{ |a,b| a.type <=> b.type }
46
+ .each do |entity|
47
+ used_types[entity.type] ||= 0
48
+ used_types[entity.type] += 1
49
+ end
50
+ used_types.each do |type, count|
51
+ report << " #{type}: #{count}"
52
+ end
53
+ report
54
+ end
55
+
56
+ def entity_types_report
57
+ report = []
58
+ PowerStencil::Engine::EntitiesHandling.all_types
59
+ .select { |type, _| type.is_a? Symbol}
60
+ .sort{ |a,b| a.first <=> b.first }
61
+ .each do |type, klass|
62
+ msg = "Type '#{type}' --> #{klass}"
63
+ msg << " (template-template path: '#{entity_type_templates[type]}')" unless entity_type_templates[type].nil?
64
+ report << msg
65
+ end
66
+ report
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+ end
@@ -0,0 +1,119 @@
1
+ module PowerStencil
2
+ module Project
3
+
4
+ module Paths
5
+
6
+ include PowerStencil::Utils::FileHelper
7
+
8
+ attr_reader :project_config_root, :started_from
9
+
10
+ def self.system_templates_path
11
+ File.expand_path File.join('..', '..', '..', '..', 'etc', 'templates'), __FILE__
12
+ end
13
+
14
+ def self.project_system_template_path
15
+ File.join system_templates_path, 'project'
16
+ end
17
+
18
+ def build_run_path(seed)
19
+ File.join build_root_path, timestamped_uniq_dir(seed, Time.now)
20
+ end
21
+
22
+ def build_root_path
23
+ File.join project_root, PowerStencil.config[:project_build_root_directory_name]
24
+ end
25
+
26
+ def template_path(entity_type)
27
+ File.join PowerStencil::Project::Paths.system_templates_path, entity_type.to_s
28
+ end
29
+
30
+ def project_plugins_path
31
+ File.join project_config_root, PowerStencil.config[:project_plugins_directory_name]
32
+ end
33
+
34
+ def project_templates_path
35
+ File.join project_config_root, PowerStencil.config[:project_templates_directory_name]
36
+ end
37
+
38
+ def project_entity_definitions_path
39
+ File.join project_config_root, PowerStencil.config[:project_entity_definitions_directory_name]
40
+ end
41
+
42
+ def project_plugin_path(plugin_name)
43
+ File.join project_plugins_path, plugin_name
44
+ end
45
+
46
+
47
+ def plugin_commands_line_definition_file(plugin_name)
48
+ File.join project_plugin_path(plugin_name), 'etc', 'command_line.yaml'
49
+ end
50
+
51
+ def plugin_config_specific_file(plugin_name)
52
+ File.join project_plugin_path(plugin_name), 'etc', 'plugin_config.yaml'
53
+ end
54
+
55
+ def plugin_processors_dir(plugin_name)
56
+ File.join project_plugin_path(plugin_name), 'lib', plugin_name, 'processors'
57
+ end
58
+
59
+ def plugin_entities_definitions_dir(plugin_name)
60
+ File.join project_plugin_path(plugin_name), 'etc', plugin_name, 'entities_definitions'
61
+ end
62
+
63
+ def project_entity_path(entity)
64
+ File.join project_entities_path, entity.type.to_s, "#{entity.name}.yaml"
65
+ end
66
+
67
+ def user_entity_path(entity)
68
+ File.join user_entities_path, entity.type.to_s, "#{entity.name}.yaml"
69
+ end
70
+
71
+ def project_entities_path
72
+ File.join project_config_root, PowerStencil.config[:project_entities_directory_name]
73
+ end
74
+
75
+ def user_entities_path
76
+ File.join project_config_root, PowerStencil.config[:user_entities_directory_name]
77
+ end
78
+
79
+ def project_root_setup?
80
+ not project_config_root.nil?
81
+ end
82
+
83
+ def project_root
84
+ File.expand_path '..', project_config_root
85
+ end
86
+
87
+ def project_versioned_config_file
88
+ File.join project_config_root, PowerStencil.config[:versioned_project_config_file_name]
89
+ end
90
+
91
+ def project_personal_config_file
92
+ File.join project_config_root, PowerStencil.config[:unversioned_user_project_config_file_name]
93
+ end
94
+
95
+ def config_directory_name
96
+ @config_directory_name ||= PowerStencil.config[:default_config_directory_name]
97
+ end
98
+
99
+ def config_directory_name=(new_name)
100
+ @config_directory_name = new_name
101
+ initialize_paths started_from unless started_from.nil?
102
+ end
103
+
104
+ def initialize_paths(from_path)
105
+ from_path = File.expand_path from_path
106
+ @project_config_root = find_project_root from_path
107
+ raise PowerStencil::Error, "Cannot find a project in '#{from_path}' !" unless project_root_setup?
108
+ @started_from = project_config_root.nil? ? nil : from_path
109
+ project_root
110
+ end
111
+
112
+ def find_project_root(from_path)
113
+ find_recursively_in_path config_directory_name, from_path
114
+ end
115
+
116
+ end
117
+
118
+ end
119
+ end
@@ -0,0 +1,89 @@
1
+ module PowerStencil
2
+ module Project
3
+
4
+ module Plugins
5
+
6
+ def plugins
7
+ @plugins ||= {}
8
+ end
9
+
10
+ def create_plugin_tree(plugin_name, new_plugin_path, overwrite_files: false)
11
+ raise PowerStencil::Error, "Plugin '#{plugin_name}' already exists !" if plugins.keys.include? plugin_name
12
+ raise PowerStencil::Error, "Invalid plugin name '#{plugin_name}'" if (plugin_name.underscore =~ /^[_[:lower:]][_[:alnum:]]*$/).nil?
13
+ entity_engine.dsl = PowerStencil::Dsl::PluginGeneration
14
+ entity_engine.render_source entity_type_templates[:plugin_definition],
15
+ new_plugin_path,
16
+ overwrite_files: overwrite_files,
17
+ main_entry_point: plugin_name
18
+
19
+ end
20
+
21
+ private
22
+
23
+ def bootstrap_plugins
24
+ initialize_gem_plugins
25
+ initialize_local_plugins
26
+ check_plugins_dependencies
27
+ command_line_manager.definition_hash_to_commands
28
+ plugins.each do |plugin_name, plugin|
29
+ if plugin.capabilities[:processors]
30
+ plugin.plugin_module.send PowerStencil::Plugins::Require::SETUP_PROCESSOR_CALLBACK
31
+ end
32
+ end
33
+ end
34
+
35
+ def check_plugins_dependencies
36
+ plugins.each do |plugin_name, plugin|
37
+ begin
38
+ plugin.check_plugin_dependencies
39
+ rescue PowerStencil::Error => pse
40
+ PowerStencil.logger.debug pse.message
41
+ PowerStencil.logger.warn "Discarding invalid plugin '#{plugin_name}'."
42
+ end
43
+ end
44
+ end
45
+
46
+ def initialize_gem_plugins
47
+ # PowerStencil::logger.warn 'Gem plugins not yet supported ! Skipping...'
48
+ if config[:project_plugins].empty?
49
+ PowerStencil.logger.info "No gem plugin found in '#{project_plugins_path}'"
50
+ return
51
+ end
52
+ config[:project_plugins].each do |plugin_definition|
53
+ plugin_name, plugin_requirements = case plugin_definition
54
+ when String
55
+ [plugin_definition, '']
56
+ when Hash
57
+ [plugin_definition.keys.first, plugin_definition.values.first]
58
+ end
59
+ unless PowerStencil::Plugins::Base.gem_locally_installed? plugin_name, plugin_requirements
60
+ PowerStencil::Plugins::Base.install_gem plugin_name, plugin_requirements
61
+ end
62
+ end
63
+ end
64
+
65
+ def initialize_local_plugins
66
+ unless File.directory? project_plugins_path
67
+ PowerStencil.logger.info "No local plugin found in '#{project_plugins_path}'"
68
+ return
69
+ end
70
+
71
+ candidates = Dir.entries(project_plugins_path)
72
+ .select { |e| File.directory? File.join(project_plugins_path, e) }
73
+ .reject { |d| %w(. ..).include? d }
74
+ @plugins = {}
75
+ candidates.each do |candidate|
76
+ begin
77
+ raise PowerStencil::Error, "Plugin '#{candidate}' already exists !" unless plugins[candidate].nil?
78
+ plugins[candidate] = PowerStencil::Plugins::Base.new(candidate, self)
79
+ rescue PowerStencil::Error => pse
80
+ PowerStencil.logger.debug pse.message
81
+ PowerStencil.logger.warn "Discarding invalid plugin '#{candidate}'."
82
+ end
83
+ end
84
+ end
85
+
86
+ end
87
+
88
+ end
89
+ end
@@ -0,0 +1,13 @@
1
+ module PowerStencil
2
+ module Project
3
+
4
+ module Proxy
5
+
6
+ def project
7
+ PowerStencil.project
8
+ end
9
+
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,56 @@
1
+ module PowerStencil
2
+ module Project
3
+
4
+ module Templates
5
+
6
+ def setup_templates_for_entities
7
+ plugins.each do |plugin_name, plugin|
8
+ logger.debug "Checking if plugin '#{plugin_name}' declares some templates..."
9
+ plugin.register_plugin_templates
10
+ end
11
+ end
12
+
13
+ def entity_type_templates
14
+ @entity_type_templates ||= {}
15
+ end
16
+
17
+ def register_template_path_for_type(entity_type, path)
18
+ if entity_type_templates.include? entity_type
19
+ logger.warn "There is already a template-template path registered for entity type '#{entity_type}': '#{entity_type_templates[entity_type]}'."
20
+ end
21
+ raise PowerStencil::Error, "There is no template in path: '#{path}'" unless Dir.exist? path and File.readable? path
22
+ raise PowerStencil::Error, "Trying to register a template for non existing type '#{entity_type}'" unless engine.available_entity_types.include? entity_type
23
+ logger.debug "Registering '#{path}' as template for type '#{entity_type}'."
24
+ entity_type_templates[entity_type] = path
25
+ end
26
+
27
+ def generate_entity_dir_for_entity(entity, force: false)
28
+ unless entity_type_templates[entity.type].nil?
29
+ logger.debug "Generating entity dir for entity '#{entity.as_path}'"
30
+ target_path = File.join project_root, entity.type.to_s, entity.name.to_s
31
+ render_entity_template_in entity, target_path, force: force
32
+ end
33
+ end
34
+
35
+ def delete_entity_dir_for_entity(entity, force: false)
36
+ return unless force
37
+ unless entity_type_templates[entity.type].nil?
38
+ logger.debug "Deleting entity files for entity '#{entity.as_path}'"
39
+ target_path = File.join project_root, entity.type.to_s, entity.name.to_s
40
+ FileUtils.rmtree target_path unless target_path.nil? or target_path.empty?
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def render_entity_template_in(entity, entity_dir_path, force: false)
47
+ entity_engine.render_source entity_type_templates[entity.type],
48
+ entity_dir_path,
49
+ overwrite_files: force,
50
+ main_entry_point: entity.name
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,29 @@
1
+ module PowerStencil
2
+ module Project
3
+
4
+ module Versioning
5
+
6
+ def check_project_version
7
+ return if project_version_valid?
8
+ raise PowerStencil::Error, msg
9
+ end
10
+
11
+ private
12
+
13
+ def project_version_valid?
14
+ unless config[:min_power_stencil_version].nil?
15
+ framework_version = PowerStencil::Utils::SemanticVersion.new PowerStencil::VERSION
16
+ is_valid = framework_version >= config[:min_power_stencil_version]
17
+ if is_valid
18
+ logger.debug "PowerStencil version (v: #{framework_version}) is advanced enough to handle project required version (v: #{config[:min_power_stencil_version]})"
19
+ end
20
+ return is_valid
21
+ end
22
+ logger.debug 'Project does not require any specific PowerStencil version'
23
+ true
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ # This file is required by the engine but not from the gem
2
+ # So it is safe to declare files in the order you need.
3
+
4
+ require 'power_stencil/system_entity_definitions/non_persistent'
5
+ require 'power_stencil/system_entity_definitions/has_associated_files'
6
+ require 'power_stencil/system_entity_definitions/buildable'
7
+ require 'power_stencil/system_entity_definitions/entity_project_common'
8
+
9
+ require 'power_stencil/system_entity_definitions/project_entity'
10
+ require 'power_stencil/system_entity_definitions/project_config'
11
+ require 'power_stencil/system_entity_definitions/plugin'
12
+ require 'power_stencil/system_entity_definitions/process_descriptor'
13
+ require 'power_stencil/system_entity_definitions/simple_exec'
14
+ require 'power_stencil/system_entity_definitions/entity_override'
@@ -0,0 +1,23 @@
1
+ module PowerStencil
2
+ module SystemEntityDefinitions
3
+
4
+ module Buildable
5
+
6
+ def buildable
7
+ buildable_by ''
8
+ end
9
+
10
+ def buildable_by(plugin_name = nil)
11
+ return @build_plugin_name if plugin_name.nil?
12
+ @build_plugin_name = plugin_name
13
+ self.include PowerStencil::SystemEntityDefinitions::HasAssociatedFiles
14
+ end
15
+
16
+ def buildable?
17
+ not @build_plugin_name.nil?
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end