reality-generators 1.0.0 → 1.1.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/lib/reality/generators/buildr_integration.rb +105 -0
- data/lib/reality/generators/generator.rb +122 -0
- data/lib/reality/generators/template.rb +1 -1
- data/lib/reality/generators.rb +3 -0
- data/reality-generators.gemspec +1 -1
- data/test/generators/test_generator.rb +280 -0
- data/test/helper.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 03bc2bd3ea71e9f986d52a15efa87b778ab98758
|
4
|
+
data.tar.gz: e6e5fed040e98cd4584b7a8e9c389b09e7f20a96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd5609694d0b1cb8d3d9976e2c87de06d4d329deef9e8a0c1e9e458d3d54c1658ba21d387d049f76ab8a1034c9a4994137f2453937d19ce94f82b97cd1a0d9c7
|
7
|
+
data.tar.gz: f619d71a563afd4ec8332df622b95bb1fa4eff470fa66eb1dbf87e52079767e2edbb4843e7c16265f5b8cc7dd0fc51a5b9bf4401e0155ae241f9b420d0c0e931
|
data/.gitignore
CHANGED
@@ -0,0 +1,105 @@
|
|
1
|
+
#
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
3
|
+
# you may not use this file except in compliance with the License.
|
4
|
+
# You may obtain a copy of the License at
|
5
|
+
#
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
7
|
+
#
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
11
|
+
# See the License for the specific language governing permissions and
|
12
|
+
# limitations under the License.
|
13
|
+
#
|
14
|
+
|
15
|
+
module Reality #nodoc
|
16
|
+
module Generators #nodoc
|
17
|
+
module Generator
|
18
|
+
class << self
|
19
|
+
# This method is called from a Rake or Buildr task to configure the Buildr
|
20
|
+
# project so that it knows the location of all the generated artifacts and
|
21
|
+
# adds them to the appropriate compile paths etc.
|
22
|
+
def configure_buildr_project(buildr_project, generator_task, templates, target_dir)
|
23
|
+
if buildr_project.nil?
|
24
|
+
task('clean') do
|
25
|
+
rm_rf target_dir
|
26
|
+
end
|
27
|
+
else
|
28
|
+
buildr_project.clean { rm_rf target_dir }
|
29
|
+
file(File.expand_path(target_dir) => [generator_task])
|
30
|
+
|
31
|
+
# Is there java source generated in project?
|
32
|
+
if templates.any? { |template| template.output_path =~ /^main\/java\/.*/ }
|
33
|
+
main_java_dir = "#{target_dir}/main/java"
|
34
|
+
file(main_java_dir => [generator_task]) do
|
35
|
+
mkdir_p main_java_dir
|
36
|
+
end
|
37
|
+
buildr_project.compile.using :javac
|
38
|
+
buildr_project.compile.from main_java_dir
|
39
|
+
# Need to force this as it may have already been cached and thus will not recalculate
|
40
|
+
buildr_project.iml.main_generated_source_directories << main_java_dir if buildr_project.iml?
|
41
|
+
end
|
42
|
+
|
43
|
+
# Is there resources generated in project?
|
44
|
+
if templates.any? { |template| template.output_path =~ /^main\/resources\/.*/ }
|
45
|
+
main_resources_dir = "#{target_dir}/main/resources"
|
46
|
+
file(main_resources_dir => [generator_task]) do
|
47
|
+
mkdir_p main_resources_dir
|
48
|
+
end
|
49
|
+
buildr_project.resources.enhance([generator_task])
|
50
|
+
buildr_project.resources.filter.into buildr_project.path_to(:target, :main, :resources) unless buildr_project.resources.target
|
51
|
+
buildr_project.resources do |t|
|
52
|
+
t.enhance do
|
53
|
+
if File.exist?(main_resources_dir)
|
54
|
+
FileUtils.mkdir_p buildr_project.resources.target.to_s
|
55
|
+
FileUtils.cp_r "#{main_resources_dir}/.", buildr_project.resources.target.to_s
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
buildr_project.iml.main_generated_resource_directories << main_resources_dir if buildr_project.iml?
|
60
|
+
end
|
61
|
+
|
62
|
+
# Is there assets generated in project?
|
63
|
+
if templates.any? { |template| template.output_path =~ /^main\/webapp\/.*/ }
|
64
|
+
webapp_dir = File.expand_path("#{target_dir}/main/webapp")
|
65
|
+
buildr_project.assets.enhance([generator_task])
|
66
|
+
buildr_project.assets.paths << file(webapp_dir => [generator_task]) do
|
67
|
+
mkdir_p webapp_dir
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Is there test java source generated in project?
|
72
|
+
if templates.any? { |template| template.output_path =~ /^test\/java\/.*/ }
|
73
|
+
test_java_dir = "#{target_dir}/test/java"
|
74
|
+
file(test_java_dir => [generator_task]) do
|
75
|
+
mkdir_p test_java_dir
|
76
|
+
end
|
77
|
+
buildr_project.test.compile.from test_java_dir
|
78
|
+
# Need to force this as it may have already been cached and thus will not recalculate
|
79
|
+
buildr_project.iml.test_generated_source_directories << test_java_dir if buildr_project.iml?
|
80
|
+
end
|
81
|
+
|
82
|
+
# Is there resources generated in project?
|
83
|
+
if templates.any? { |template| template.output_path =~ /^test\/resources\/.*/ }
|
84
|
+
test_resources_dir = "#{target_dir}/test/resources"
|
85
|
+
file(test_resources_dir => [generator_task]) do
|
86
|
+
mkdir_p test_resources_dir
|
87
|
+
end
|
88
|
+
buildr_project.test.resources.enhance([generator_task])
|
89
|
+
buildr_project.test.resources.filter.into buildr_project.path_to(:target, :test, :resources) unless buildr_project.test.resources.target
|
90
|
+
buildr_project.test.resources do |t|
|
91
|
+
t.enhance do
|
92
|
+
if File.exist?(test_resources_dir)
|
93
|
+
FileUtils.mkdir_p buildr_project.test.resources.target.to_s
|
94
|
+
FileUtils.cp_r "#{test_resources_dir}/.", buildr_project.test.resources.target.to_s
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
buildr_project.iml.test_generated_resource_directories << test_resources_dir if buildr_project.iml?
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
#
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
3
|
+
# you may not use this file except in compliance with the License.
|
4
|
+
# You may obtain a copy of the License at
|
5
|
+
#
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
7
|
+
#
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
11
|
+
# See the License for the specific language governing permissions and
|
12
|
+
# limitations under the License.
|
13
|
+
#
|
14
|
+
|
15
|
+
module Reality #nodoc
|
16
|
+
module Generators #nodoc
|
17
|
+
|
18
|
+
module Generator
|
19
|
+
class << self
|
20
|
+
|
21
|
+
# Return a list of templates loaded from specified template_set_keys
|
22
|
+
def load_templates_from_template_sets(template_set_container, template_set_keys)
|
23
|
+
template_map = {}
|
24
|
+
load_templates(template_set_container, template_map, template_set_keys, [])
|
25
|
+
template_map.values
|
26
|
+
end
|
27
|
+
|
28
|
+
# Actually perform the generation of files from specified templates.
|
29
|
+
# Files are generated to the specified target directory. Any files that
|
30
|
+
# are not generated by this process are deleted. The files generated are
|
31
|
+
# based on the specified templates.
|
32
|
+
# The traversal starts from a root element of specified element_type and
|
33
|
+
# traverses all elements that are contained transitively by the root element.
|
34
|
+
# The templates then generate files from traversed elements.
|
35
|
+
def generate(template_set_container, element_type, element, directory, templates, filter)
|
36
|
+
unprocessed_files = (Dir["#{directory}/**/*.*"] + Dir["#{directory}/**/*"]).uniq
|
37
|
+
|
38
|
+
Generators.debug "Templates to process: #{templates.collect { |t| t.name }.inspect}"
|
39
|
+
|
40
|
+
targets = {}
|
41
|
+
collect_generation_targets(template_set_container, element_type, element, element, targets)
|
42
|
+
|
43
|
+
templates.each do |template|
|
44
|
+
Generators.debug "Evaluating template: #{template.name}"
|
45
|
+
elements = targets[template.target]
|
46
|
+
|
47
|
+
elements.each do |element_pair|
|
48
|
+
element = element_pair[1]
|
49
|
+
if template.applicable?(element_pair[0]) && (filter.nil? || filter.call(template.target, element))
|
50
|
+
template.generate(directory, element, unprocessed_files)
|
51
|
+
end
|
52
|
+
end if elements
|
53
|
+
end
|
54
|
+
|
55
|
+
unprocessed_files.sort.reverse.each do |file|
|
56
|
+
if File.directory?(file)
|
57
|
+
if (Dir.entries(file) - %w(. ..)).empty?
|
58
|
+
Generators.debug "Removing #{file} as no longer generated"
|
59
|
+
FileUtils.rmdir file
|
60
|
+
end
|
61
|
+
else
|
62
|
+
Generators.debug "Removing #{file} as no longer generated"
|
63
|
+
FileUtils.rm_f file
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
Generators.info 'Generator completed'
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def load_templates(template_set_container, template_map, template_set_keys, processed_template_sets)
|
73
|
+
template_set_keys.each do |template_set_key|
|
74
|
+
next if processed_template_sets.include?(template_set_key)
|
75
|
+
template_set = template_set_container.template_set_by_name(template_set_key)
|
76
|
+
processed_template_sets << template_set_key
|
77
|
+
load_templates(template_set_container, template_map, template_set.required_template_sets, processed_template_sets)
|
78
|
+
template_set.templates.each do |template|
|
79
|
+
template_map[template.name] = template
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Collect all generation targets. This is a map of type to an array of element pairs of that type.
|
85
|
+
# The element pair includes two elements, the "parent" standard element that is facet as per normal
|
86
|
+
# and the actual element that is used for generation. The first element is used when checking if
|
87
|
+
# element is applicable? to be generated while the second is basis of generation.
|
88
|
+
# i.e.
|
89
|
+
#
|
90
|
+
# {
|
91
|
+
# :repository => [ [repository, repository] ],
|
92
|
+
# :data_module => [ [module1, module1], [module2, module2]],
|
93
|
+
# :entity => [[entity1, entity1], [entity2, entity2]],
|
94
|
+
# :'keycloak.client' => [[repository, client]],
|
95
|
+
# ...
|
96
|
+
# }
|
97
|
+
#
|
98
|
+
def collect_generation_targets(template_set_container, element_type, scope_element, element, targets)
|
99
|
+
(targets[element_type] ||= []) << [scope_element, element]
|
100
|
+
|
101
|
+
template_set_container.target_manager.targets_by_container(element_type).each do |target|
|
102
|
+
subelements = nil
|
103
|
+
subscope = nil
|
104
|
+
if target.standard?
|
105
|
+
subelements = element.send(target.access_method)
|
106
|
+
elsif element.facet_enabled?(target.facet_key)
|
107
|
+
subelements = element.send(target.facet_key).send(target.access_method)
|
108
|
+
subscope = element
|
109
|
+
end
|
110
|
+
|
111
|
+
next unless subelements
|
112
|
+
subelements = [subelements] unless subelements.is_a?(Array)
|
113
|
+
|
114
|
+
subelements.each do |subelement|
|
115
|
+
collect_generation_targets(template_set_container, target.qualified_key, subscope || subelement, subelement, targets)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -112,7 +112,7 @@ module Reality #nodoc
|
|
112
112
|
class SingleFileOutputTemplate < Template
|
113
113
|
attr_reader :output_filename_pattern
|
114
114
|
|
115
|
-
def initialize(template_set, facets, target, template_key, output_filename_pattern, helpers, options = {})
|
115
|
+
def initialize(template_set, facets, target, template_key, output_filename_pattern, helpers = [], options = {})
|
116
116
|
super(template_set, facets, target, template_key, helpers, options)
|
117
117
|
@output_filename_pattern = output_filename_pattern
|
118
118
|
end
|
data/lib/reality/generators.rb
CHANGED
@@ -26,3 +26,6 @@ require 'reality/generators/ruby_template'
|
|
26
26
|
require 'reality/generators/erb_template'
|
27
27
|
require 'reality/generators/template_set'
|
28
28
|
require 'reality/generators/template_set_container'
|
29
|
+
require 'reality/generators/generator'
|
30
|
+
|
31
|
+
require 'reality/generators/buildr_integration'
|
data/reality-generators.gemspec
CHANGED
@@ -0,0 +1,280 @@
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
class Reality::Generators::TestGenerator < Reality::TestCase
|
5
|
+
|
6
|
+
class Attribute < Reality.base_element(:name => true, :container_key => :entity)
|
7
|
+
def qualified_name
|
8
|
+
"#{entity.qualified_name}.#{name}"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Entity < Reality.base_element(:name => true, :container_key => :repository)
|
13
|
+
def qualified_name
|
14
|
+
"#{repository.name}.#{name}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def attribute(name, options = {}, &block)
|
18
|
+
attribute_map[name.to_s] = Attribute.new(self, name, options, &block)
|
19
|
+
end
|
20
|
+
|
21
|
+
def attributes
|
22
|
+
attribute_map.values
|
23
|
+
end
|
24
|
+
|
25
|
+
def attribute_map
|
26
|
+
@attribute_map ||= {}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class PersistenceUnit < Reality.base_element(:name => true, :container_key => :jpa_repository)
|
31
|
+
end
|
32
|
+
|
33
|
+
class JpaRepository < Reality.base_element(:container_key => :repository)
|
34
|
+
|
35
|
+
def unit(name, options = {}, &block)
|
36
|
+
unit_map[name.to_s] = PersistenceUnit.new(self, name, options, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def units
|
40
|
+
unit_map.values
|
41
|
+
end
|
42
|
+
|
43
|
+
def unit_map
|
44
|
+
@unit_map ||= {}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class Repository < Reality.base_element(:name => true)
|
49
|
+
def entity(name, options = {}, &block)
|
50
|
+
entity_map[name.to_s] = Entity.new(self, name, options, &block)
|
51
|
+
end
|
52
|
+
|
53
|
+
def entities
|
54
|
+
entity_map.values
|
55
|
+
end
|
56
|
+
|
57
|
+
def entity_map
|
58
|
+
@entity_map ||= {}
|
59
|
+
end
|
60
|
+
|
61
|
+
def facet_enabled?(facet)
|
62
|
+
facet == :jpa ? !!@jpa : false
|
63
|
+
end
|
64
|
+
|
65
|
+
def jpa
|
66
|
+
@jpa
|
67
|
+
end
|
68
|
+
|
69
|
+
def enable_jpa!
|
70
|
+
@jpa = JpaRepository.new(self)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_collect_generation_targets
|
75
|
+
repository = Repository.new(:MyRepo) do |r|
|
76
|
+
r.entity(:MyEntityA) do |e|
|
77
|
+
e.attribute(:MyAttr1)
|
78
|
+
e.attribute(:MyAttr2)
|
79
|
+
end
|
80
|
+
|
81
|
+
r.entity(:MyEntityB) do |e|
|
82
|
+
e.attribute(:MyAttr3)
|
83
|
+
e.attribute(:MyAttr4)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
TestTemplateSetContainer.target_manager.target(:repository)
|
88
|
+
TestTemplateSetContainer.target_manager.target(:entity, :repository)
|
89
|
+
TestTemplateSetContainer.target_manager.target(:attribute, :entity)
|
90
|
+
TestTemplateSetContainer.target_manager.target(:unit, :repository, :facet_key => :jpa)
|
91
|
+
|
92
|
+
targets = {}
|
93
|
+
Reality::Generators::Generator.send(:collect_generation_targets, TestTemplateSetContainer, :repository, repository, repository, targets)
|
94
|
+
|
95
|
+
assert_equal true, targets.include?(:repository)
|
96
|
+
assert_equal true, targets.include?(:entity)
|
97
|
+
assert_equal true, targets.include?(:attribute)
|
98
|
+
assert_equal 3, targets.size
|
99
|
+
|
100
|
+
assert_equal 1, targets[:repository].size
|
101
|
+
assert_equal 2, targets[:entity].size
|
102
|
+
assert_equal 4, targets[:attribute].size
|
103
|
+
|
104
|
+
assert_equal :MyRepo, targets[:repository][0][0].name
|
105
|
+
assert_equal :MyRepo, targets[:repository][0][1].name
|
106
|
+
assert_equal 'MyRepo.MyEntityA', targets[:entity][0][0].qualified_name
|
107
|
+
assert_equal 'MyRepo.MyEntityA', targets[:entity][0][1].qualified_name
|
108
|
+
assert_equal 'MyRepo.MyEntityB', targets[:entity][1][0].qualified_name
|
109
|
+
assert_equal 'MyRepo.MyEntityB', targets[:entity][1][1].qualified_name
|
110
|
+
assert_equal 'MyRepo.MyEntityA.MyAttr1', targets[:attribute][0][0].qualified_name
|
111
|
+
assert_equal 'MyRepo.MyEntityA.MyAttr1', targets[:attribute][0][1].qualified_name
|
112
|
+
assert_equal 'MyRepo.MyEntityA.MyAttr2', targets[:attribute][1][0].qualified_name
|
113
|
+
assert_equal 'MyRepo.MyEntityA.MyAttr2', targets[:attribute][1][1].qualified_name
|
114
|
+
assert_equal 'MyRepo.MyEntityB.MyAttr3', targets[:attribute][2][0].qualified_name
|
115
|
+
assert_equal 'MyRepo.MyEntityB.MyAttr3', targets[:attribute][2][1].qualified_name
|
116
|
+
assert_equal 'MyRepo.MyEntityB.MyAttr4', targets[:attribute][3][0].qualified_name
|
117
|
+
assert_equal 'MyRepo.MyEntityB.MyAttr4', targets[:attribute][3][1].qualified_name
|
118
|
+
|
119
|
+
repository.enable_jpa!
|
120
|
+
|
121
|
+
targets = {}
|
122
|
+
Reality::Generators::Generator.send(:collect_generation_targets, TestTemplateSetContainer, :repository, repository, repository, targets)
|
123
|
+
|
124
|
+
# No units have been defined so no extra targets
|
125
|
+
assert_equal 3, targets.size
|
126
|
+
|
127
|
+
repository.jpa.unit(:MyUnit1)
|
128
|
+
repository.jpa.unit(:MyUnit2)
|
129
|
+
|
130
|
+
targets = {}
|
131
|
+
Reality::Generators::Generator.send(:collect_generation_targets, TestTemplateSetContainer, :repository, repository, repository, targets)
|
132
|
+
|
133
|
+
assert_equal true, targets.include?(:repository)
|
134
|
+
assert_equal true, targets.include?(:entity)
|
135
|
+
assert_equal true, targets.include?(:attribute)
|
136
|
+
assert_equal true, targets.include?(:'jpa.unit')
|
137
|
+
assert_equal 4, targets.size
|
138
|
+
|
139
|
+
assert_equal 1, targets[:repository].size
|
140
|
+
assert_equal 2, targets[:entity].size
|
141
|
+
assert_equal 4, targets[:attribute].size
|
142
|
+
assert_equal 2, targets[:'jpa.unit'].size
|
143
|
+
|
144
|
+
assert_equal :MyRepo, targets[:'jpa.unit'][0][0].name
|
145
|
+
assert_equal :MyUnit1, targets[:'jpa.unit'][0][1].name
|
146
|
+
assert_equal :MyRepo, targets[:'jpa.unit'][1][0].name
|
147
|
+
assert_equal :MyUnit2, targets[:'jpa.unit'][1][1].name
|
148
|
+
end
|
149
|
+
|
150
|
+
class RepositoryTemplate < Reality::Generators::SingleFileOutputTemplate
|
151
|
+
def render_to_string(context_binding)
|
152
|
+
eval('"Repository: #{repository.name}"', context_binding)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
class EntityTemplate < Reality::Generators::SingleFileOutputTemplate
|
157
|
+
def render_to_string(context_binding)
|
158
|
+
eval('"Entity: #{entity.name}"', context_binding)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
class AttributeTemplate < Reality::Generators::SingleFileOutputTemplate
|
163
|
+
def render_to_string(context_binding)
|
164
|
+
eval('"Attribute: #{attribute.name}"', context_binding)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
class UnitTemplate < Reality::Generators::SingleFileOutputTemplate
|
169
|
+
def render_to_string(context_binding)
|
170
|
+
eval('"Unit: #{unit.name}"', context_binding)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_generate
|
175
|
+
repository = Repository.new(:MyRepo) do |r|
|
176
|
+
r.entity(:MyEntityA) do |e|
|
177
|
+
e.attribute(:MyAttr1)
|
178
|
+
e.attribute(:MyAttr2)
|
179
|
+
end
|
180
|
+
|
181
|
+
r.entity(:MyEntityB) do |e|
|
182
|
+
e.attribute(:MyAttr3)
|
183
|
+
e.attribute(:MyAttr4)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
TestTemplateSetContainer.target_manager.target(:repository)
|
188
|
+
TestTemplateSetContainer.target_manager.target(:entity, :repository)
|
189
|
+
TestTemplateSetContainer.target_manager.target(:attribute, :entity)
|
190
|
+
TestTemplateSetContainer.target_manager.target(:unit, :repository, :facet_key => :jpa)
|
191
|
+
|
192
|
+
template_set = TestTemplateSetContainer.template_set(:test) do |template_set|
|
193
|
+
RepositoryTemplate.new(template_set, [], :repository, 'repository.java', 'main/java/#{repository.name}.java')
|
194
|
+
|
195
|
+
EntityTemplate.new(template_set, [], :entity, 'entity.java', 'main/java/#{entity.qualified_name.gsub(".","/")}.java', [], :guard => 'entity.qualified_name == "MyRepo.MyEntityB"')
|
196
|
+
AttributeTemplate.new(template_set, [], :attribute, 'attribute.java', 'main/java/#{attribute.qualified_name.gsub(".","/")}.java')
|
197
|
+
UnitTemplate.new(template_set, [], :'jpa.unit', 'unit.java', 'main/java/units/#{unit.name.gsub(".","/")}.java', [], {})
|
198
|
+
end
|
199
|
+
|
200
|
+
target_directory = "#{temp_dir}/generated/erb_template"
|
201
|
+
|
202
|
+
FileUtils.mkdir_p "#{target_directory}/some/dir/to/delete"
|
203
|
+
FileUtils.mkdir_p "#{target_directory}/main/java"
|
204
|
+
FileUtils.touch "#{target_directory}/main/java/Touched.java"
|
205
|
+
repo_file = "#{target_directory}/main/java/MyRepo.java"
|
206
|
+
File.open(repo_file, 'wb') do |f|
|
207
|
+
f.write 'Repository: MyRepo'
|
208
|
+
end
|
209
|
+
File.utime(File.atime(repo_file), DateTime.new(2001, 2, 3).to_time, repo_file)
|
210
|
+
original_mtime = File.mtime(repo_file)
|
211
|
+
|
212
|
+
filter = Proc.new { |artifact_type, artifact| artifact_type != :attribute || %w(MyAttr1 MyAttr2).include?(artifact.name.to_s) }
|
213
|
+
Reality::Generators::Generator.
|
214
|
+
generate(TestTemplateSetContainer, :repository, repository, target_directory, template_set.templates, filter)
|
215
|
+
|
216
|
+
assert_equal false, File.directory?("#{target_directory}/some")
|
217
|
+
assert_equal false, File.exist?("#{target_directory}/main/java/Touched.java")
|
218
|
+
assert_equal true, File.directory?("#{target_directory}/main/java")
|
219
|
+
assert_equal true, File.exist?(repo_file)
|
220
|
+
assert_equal 'Repository: MyRepo', IO.read(repo_file)
|
221
|
+
|
222
|
+
# Ensure the file is not updated if contents identical
|
223
|
+
assert_equal original_mtime, File.mtime(repo_file)
|
224
|
+
|
225
|
+
# The guard says no for next element
|
226
|
+
assert_equal false, File.exist?("#{target_directory}/main/java/MyRepo/MyEntityA.java")
|
227
|
+
|
228
|
+
assert_equal true, File.exist?("#{target_directory}/main/java/MyRepo/MyEntityB.java")
|
229
|
+
assert_equal 'Entity: MyEntityB', IO.read("#{target_directory}/main/java/MyRepo/MyEntityB.java")
|
230
|
+
|
231
|
+
assert_equal true, File.exist?("#{target_directory}/main/java/MyRepo/MyEntityA/MyAttr1.java")
|
232
|
+
assert_equal 'Attribute: MyAttr1', IO.read("#{target_directory}/main/java/MyRepo/MyEntityA/MyAttr1.java")
|
233
|
+
|
234
|
+
assert_equal true, File.exist?("#{target_directory}/main/java/MyRepo/MyEntityA/MyAttr2.java")
|
235
|
+
assert_equal 'Attribute: MyAttr2', IO.read("#{target_directory}/main/java/MyRepo/MyEntityA/MyAttr2.java")
|
236
|
+
|
237
|
+
# The filters says no
|
238
|
+
assert_equal false, File.exist?("#{target_directory}/main/java/MyRepo/MyEntityB/MyAttr3.java")
|
239
|
+
assert_equal false, File.exist?("#{target_directory}/main/java/MyRepo/MyEntityB/MyAttr4.java")
|
240
|
+
end
|
241
|
+
|
242
|
+
def test_load_templates_from_template_sets
|
243
|
+
|
244
|
+
TestTemplateSetContainer.target_manager.target(:repository)
|
245
|
+
TestTemplateSetContainer.target_manager.target(:entity, :repository)
|
246
|
+
TestTemplateSetContainer.target_manager.target(:attribute, :entity)
|
247
|
+
TestTemplateSetContainer.target_manager.target(:unit, :repository, :facet_key => :jpa)
|
248
|
+
|
249
|
+
TestTemplateSetContainer.template_set(:template_set_1) do |template_set|
|
250
|
+
RepositoryTemplate.new(template_set, [], :repository, 'repository1.java', 'main/java/#{repository.name}1.java')
|
251
|
+
|
252
|
+
EntityTemplate.new(template_set, [], :entity, 'entity.java', 'main/java/#{entity.qualified_name.gsub(".","/")}.java', [], :guard => 'entity.qualified_name == "MyRepo.MyEntityB"')
|
253
|
+
AttributeTemplate.new(template_set, [], :attribute, 'attribute.java', 'main/java/#{attribute.qualified_name.gsub(".","/")}.java')
|
254
|
+
UnitTemplate.new(template_set, [], :'jpa.unit', 'unit.java', 'main/java/units/#{unit.name.gsub(".","/")}.java', [], {})
|
255
|
+
end
|
256
|
+
|
257
|
+
TestTemplateSetContainer.template_set(:template_set_2) do |template_set|
|
258
|
+
RepositoryTemplate.new(template_set, [], :repository, 'repository2.java', 'main/java/#{repository.name}2.java')
|
259
|
+
end
|
260
|
+
|
261
|
+
TestTemplateSetContainer.template_set(:template_set_3) do |template_set|
|
262
|
+
RepositoryTemplate.new(template_set, [], :repository, 'repository3.java', 'main/java/#{repository.name}3.java')
|
263
|
+
end
|
264
|
+
|
265
|
+
TestTemplateSetContainer.template_set(:template_set_4) do |template_set|
|
266
|
+
RepositoryTemplate.new(template_set, [], :repository, 'repository4.java', 'main/java/#{repository.name}3.java')
|
267
|
+
|
268
|
+
AttributeTemplate.new(template_set, [], :attribute, 'attribute4.java', 'main/java/#{attribute.qualified_name.gsub(".","/")}4.java')
|
269
|
+
end
|
270
|
+
|
271
|
+
template_set_keys = [:template_set_1, :template_set_4]
|
272
|
+
templates = Reality::Generators::Generator.
|
273
|
+
load_templates_from_template_sets(TestTemplateSetContainer, template_set_keys)
|
274
|
+
|
275
|
+
assert_equal 6, templates.size
|
276
|
+
assert_equal %w(template_set_1:attribute.java template_set_1:entity.java template_set_1:repository1.java template_set_1:unit.java template_set_4:attribute4.java template_set_4:repository4.java),
|
277
|
+
templates.collect{|t| t.name}.sort
|
278
|
+
|
279
|
+
end
|
280
|
+
end
|
data/test/helper.rb
CHANGED
@@ -37,7 +37,7 @@ class Reality::TestCase < Minitest::Test
|
|
37
37
|
def temp_dir
|
38
38
|
if @temp_dir.nil?
|
39
39
|
base_temp_dir = ENV['TEST_TMP_DIR'] || File.expand_path("#{File.dirname(__FILE__)}/../tmp")
|
40
|
-
@temp_dir = "#{base_temp_dir}/generators-#{Time.now.to_i}"
|
40
|
+
@temp_dir = "#{base_temp_dir}/tests/generators-#{Time.now.to_i}"
|
41
41
|
FileUtils.mkdir_p @temp_dir
|
42
42
|
end
|
43
43
|
@temp_dir
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reality-generators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Donald
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: reality-core
|
@@ -96,8 +96,10 @@ files:
|
|
96
96
|
- README.md
|
97
97
|
- Rakefile
|
98
98
|
- lib/reality/generators.rb
|
99
|
+
- lib/reality/generators/buildr_integration.rb
|
99
100
|
- lib/reality/generators/core.rb
|
100
101
|
- lib/reality/generators/erb_template.rb
|
102
|
+
- lib/reality/generators/generator.rb
|
101
103
|
- lib/reality/generators/render_context.rb
|
102
104
|
- lib/reality/generators/ruby_template.rb
|
103
105
|
- lib/reality/generators/target_manager.rb
|
@@ -108,6 +110,7 @@ files:
|
|
108
110
|
- test/generators/templates/mytemplate.java.erb
|
109
111
|
- test/generators/templates/rubytemplate.rb
|
110
112
|
- test/generators/test_erb_template.rb
|
113
|
+
- test/generators/test_generator.rb
|
111
114
|
- test/generators/test_render_context.rb
|
112
115
|
- test/generators/test_ruby_template.rb
|
113
116
|
- test/generators/test_target_manager.rb
|