rgen 0.4.3 → 0.4.4
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.
- data/CHANGELOG +6 -0
- data/lib/mmgen/metamodel_generator.rb +2 -1
- data/lib/mmgen/mm_ext/{ecore_ext.rb → ecore_mmgen_ext.rb} +3 -7
- data/lib/mmgen/templates/metamodel_generator.tpl +10 -8
- data/lib/rgen/ecore/ecore_ext.rb +69 -0
- data/lib/rgen/ecore/ecore_transformer.rb +1 -1
- data/lib/rgen/metamodel_builder/builder_extensions.rb +10 -2
- data/lib/rgen/serializer/xmi11_serializer.rb +101 -0
- data/lib/rgen/serializer/xmi20_serializer.rb +7 -7
- data/lib/rgen/serializer/xml_serializer.rb +47 -14
- data/test/ea_serializer_test.rb +29 -0
- data/test/ea_serializer_test/ea_testmodel_regenerated.xml +821 -0
- data/test/metamodel_roundtrip_test.rb +1 -2
- data/test/metamodel_roundtrip_test/TestModel.rb +1 -0
- data/test/metamodel_roundtrip_test/TestModel_Regenerated.rb +34 -35
- data/test/metamodel_roundtrip_test/houseMetamodel_Regenerated.ecore +128 -236
- data/test/rgen_test.rb +1 -0
- metadata +93 -95
- data/lib/rgen/metamodel_builder.rb.bak +0 -196
- data/lib/rgen/metamodel_builder/builder_extensions.rb.bak +0 -437
- data/lib/rgen/metamodel_builder/builder_runtime.rb.bak +0 -73
- data/lib/rgen/name_helper.rb.bak +0 -37
- data/lib/rgen/template_language.rb.bak +0 -289
- data/lib/rgen/template_language/directory_template_container.rb.bak +0 -69
- data/lib/rgen/template_language/output_handler.rb.bak +0 -88
- data/lib/rgen/template_language/template_container.rb.bak +0 -196
- data/lib/rgen/transformer.rb.bak +0 -381
- data/test/environment_test.rb.bak +0 -52
- data/test/metamodel_builder_test.rb.bak +0 -443
- data/test/output_handler_test.rb.bak +0 -50
- data/test/template_language_test.rb.bak +0 -72
- data/test/transformer_test.rb.bak +0 -223
data/test/rgen_test.rb
CHANGED
metadata
CHANGED
@@ -1,138 +1,121 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0
|
3
|
-
specification_version: 1
|
4
2
|
name: rgen
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.4.
|
7
|
-
date: 2008-08-12 00:00:00 +02:00
|
8
|
-
summary: Ruby Modelling and Generator Framework
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email:
|
12
|
-
homepage:
|
13
|
-
rubyforge_project: rgen
|
14
|
-
description: RGen is a framework supporting Model Driven Software Development (MDSD). This means that it helps you build Metamodels, instantiate Models, modify and transform Models and finally generate arbitrary textual content from it.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.4.4
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Martin Thiede
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-09-10 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: RGen is a framework supporting Model Driven Software Development (MDSD). This means that it helps you build Metamodels, instantiate Models, modify and transform Models and finally generate arbitrary textual content from it.
|
17
|
+
email: martin dot thiede at gmx de
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- CHANGELOG
|
25
|
+
- MIT-LICENSE
|
31
26
|
files:
|
32
27
|
- lib/instantiators
|
33
|
-
- lib/metamodels
|
34
|
-
- lib/mmgen
|
35
|
-
- lib/rgen
|
36
|
-
- lib/transformers
|
37
28
|
- lib/instantiators/ea_instantiator.rb
|
29
|
+
- lib/metamodels
|
38
30
|
- lib/metamodels/uml13_metamodel.rb
|
39
31
|
- lib/metamodels/uml13_metamodel_ext.rb
|
32
|
+
- lib/mmgen
|
40
33
|
- lib/mmgen/metamodel_generator.rb
|
41
34
|
- lib/mmgen/mmgen.rb
|
42
35
|
- lib/mmgen/mm_ext
|
36
|
+
- lib/mmgen/mm_ext/ecore_mmgen_ext.rb
|
43
37
|
- lib/mmgen/templates
|
44
|
-
- lib/mmgen/mm_ext/ecore_ext.rb
|
45
38
|
- lib/mmgen/templates/annotations.tpl
|
46
39
|
- lib/mmgen/templates/metamodel_generator.tpl
|
40
|
+
- lib/rgen
|
47
41
|
- lib/rgen/array_extensions.rb
|
48
42
|
- lib/rgen/auto_class_creator.rb
|
49
43
|
- lib/rgen/ecore
|
50
|
-
- lib/rgen/environment.rb
|
51
|
-
- lib/rgen/instantiator
|
52
|
-
- lib/rgen/metamodel_builder
|
53
|
-
- lib/rgen/metamodel_builder.rb
|
54
|
-
- lib/rgen/metamodel_builder.rb.bak
|
55
|
-
- lib/rgen/model_comparator.rb
|
56
|
-
- lib/rgen/model_dumper.rb
|
57
|
-
- lib/rgen/name_helper.rb
|
58
|
-
- lib/rgen/name_helper.rb.bak
|
59
|
-
- lib/rgen/serializer
|
60
|
-
- lib/rgen/template_language
|
61
|
-
- lib/rgen/template_language.rb
|
62
|
-
- lib/rgen/template_language.rb.bak
|
63
|
-
- lib/rgen/transformer.rb
|
64
|
-
- lib/rgen/transformer.rb.bak
|
65
44
|
- lib/rgen/ecore/ecore.rb
|
45
|
+
- lib/rgen/ecore/ecore_ext.rb
|
66
46
|
- lib/rgen/ecore/ecore_instantiator.rb
|
67
47
|
- lib/rgen/ecore/ecore_transformer.rb
|
48
|
+
- lib/rgen/environment.rb
|
49
|
+
- lib/rgen/instantiator
|
68
50
|
- lib/rgen/instantiator/abstract_instantiator.rb
|
69
51
|
- lib/rgen/instantiator/abstract_xml_instantiator.rb
|
70
52
|
- lib/rgen/instantiator/default_xml_instantiator.rb
|
71
53
|
- lib/rgen/instantiator/ecore_xml_instantiator.rb
|
72
54
|
- lib/rgen/instantiator/nodebased_xml_instantiator.rb
|
73
55
|
- lib/rgen/instantiator/xmi11_instantiator.rb
|
56
|
+
- lib/rgen/metamodel_builder
|
74
57
|
- lib/rgen/metamodel_builder/builder_extensions.rb
|
75
|
-
- lib/rgen/metamodel_builder/builder_extensions.rb.bak
|
76
58
|
- lib/rgen/metamodel_builder/builder_runtime.rb
|
77
|
-
- lib/rgen/metamodel_builder/builder_runtime.rb.bak
|
78
59
|
- lib/rgen/metamodel_builder/data_types.rb
|
79
60
|
- lib/rgen/metamodel_builder/intermediate
|
61
|
+
- lib/rgen/metamodel_builder/intermediate/annotation.rb
|
80
62
|
- lib/rgen/metamodel_builder/metamodel_description.rb
|
81
63
|
- lib/rgen/metamodel_builder/mm_multiple.rb
|
82
64
|
- lib/rgen/metamodel_builder/module_extension.rb
|
83
|
-
- lib/rgen/metamodel_builder
|
65
|
+
- lib/rgen/metamodel_builder.rb
|
66
|
+
- lib/rgen/model_comparator.rb
|
67
|
+
- lib/rgen/model_dumper.rb
|
68
|
+
- lib/rgen/name_helper.rb
|
69
|
+
- lib/rgen/serializer
|
70
|
+
- lib/rgen/serializer/xmi11_serializer.rb
|
84
71
|
- lib/rgen/serializer/xmi20_serializer.rb
|
85
72
|
- lib/rgen/serializer/xml_serializer.rb
|
73
|
+
- lib/rgen/template_language
|
86
74
|
- lib/rgen/template_language/directory_template_container.rb
|
87
|
-
- lib/rgen/template_language/directory_template_container.rb.bak
|
88
75
|
- lib/rgen/template_language/output_handler.rb
|
89
|
-
- lib/rgen/template_language/output_handler.rb.bak
|
90
76
|
- lib/rgen/template_language/template_container.rb
|
91
|
-
- lib/rgen/template_language/template_container.rb.bak
|
92
77
|
- lib/rgen/template_language/template_helper.rb
|
78
|
+
- lib/rgen/template_language.rb
|
79
|
+
- lib/rgen/transformer.rb
|
80
|
+
- lib/transformers
|
93
81
|
- lib/transformers/uml13_to_ecore.rb
|
94
82
|
- test/array_extensions_test.rb
|
95
83
|
- test/ea_instantiator_test.rb
|
84
|
+
- test/ea_serializer_test
|
85
|
+
- test/ea_serializer_test/ea_testmodel_regenerated.xml
|
86
|
+
- test/ea_serializer_test.rb
|
96
87
|
- test/ecore_self_test.rb
|
97
88
|
- test/environment_test.rb
|
98
|
-
- test/environment_test.rb.bak
|
99
89
|
- test/metamodel_builder_test.rb
|
100
|
-
- test/metamodel_builder_test.rb.bak
|
101
90
|
- test/metamodel_roundtrip_test
|
102
|
-
- test/metamodel_roundtrip_test.rb
|
103
|
-
- test/output_handler_test.rb
|
104
|
-
- test/output_handler_test.rb.bak
|
105
|
-
- test/rgen_test.rb
|
106
|
-
- test/template_language_test
|
107
|
-
- test/template_language_test.rb
|
108
|
-
- test/template_language_test.rb.bak
|
109
|
-
- test/testmodel
|
110
|
-
- test/transformer_test.rb
|
111
|
-
- test/transformer_test.rb.bak
|
112
|
-
- test/xml_instantiator_test
|
113
|
-
- test/xml_instantiator_test.rb
|
114
91
|
- test/metamodel_roundtrip_test/houseMetamodel.ecore
|
115
92
|
- test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb
|
116
93
|
- test/metamodel_roundtrip_test/houseMetamodel_Regenerated.ecore
|
117
94
|
- test/metamodel_roundtrip_test/TestModel.rb
|
118
95
|
- test/metamodel_roundtrip_test/TestModel_Regenerated.rb
|
96
|
+
- test/metamodel_roundtrip_test.rb
|
97
|
+
- test/output_handler_test.rb
|
98
|
+
- test/rgen_test.rb
|
99
|
+
- test/template_language_test
|
119
100
|
- test/template_language_test/expected_result.txt
|
120
101
|
- test/template_language_test/indentStringTestDefaultIndent.out
|
121
102
|
- test/template_language_test/indentStringTestTabIndent.out
|
122
103
|
- test/template_language_test/templates
|
123
|
-
- test/template_language_test/testout.txt
|
124
104
|
- test/template_language_test/templates/code
|
125
|
-
- test/template_language_test/templates/content
|
126
|
-
- test/template_language_test/templates/indent_string_test.tpl
|
127
|
-
- test/template_language_test/templates/index
|
128
|
-
- test/template_language_test/templates/null_context_test.tpl
|
129
|
-
- test/template_language_test/templates/root.tpl
|
130
105
|
- test/template_language_test/templates/code/array.tpl
|
106
|
+
- test/template_language_test/templates/content
|
131
107
|
- test/template_language_test/templates/content/author.tpl
|
132
108
|
- test/template_language_test/templates/content/chapter.tpl
|
109
|
+
- test/template_language_test/templates/indent_string_test.tpl
|
110
|
+
- test/template_language_test/templates/index
|
133
111
|
- test/template_language_test/templates/index/c
|
134
|
-
- test/template_language_test/templates/index/chapter.tpl
|
135
112
|
- test/template_language_test/templates/index/c/cmod.tpl
|
113
|
+
- test/template_language_test/templates/index/chapter.tpl
|
114
|
+
- test/template_language_test/templates/null_context_test.tpl
|
115
|
+
- test/template_language_test/templates/root.tpl
|
116
|
+
- test/template_language_test/testout.txt
|
117
|
+
- test/template_language_test.rb
|
118
|
+
- test/testmodel
|
136
119
|
- test/testmodel/class_model_checker.rb
|
137
120
|
- test/testmodel/ea_testmodel.eap
|
138
121
|
- test/testmodel/ea_testmodel.xml
|
@@ -140,38 +123,35 @@ files:
|
|
140
123
|
- test/testmodel/ecore_model_checker.rb
|
141
124
|
- test/testmodel/manual_testmodel.xml
|
142
125
|
- test/testmodel/object_model_checker.rb
|
126
|
+
- test/transformer_test.rb
|
127
|
+
- test/xml_instantiator_test
|
143
128
|
- test/xml_instantiator_test/simple_ecore_model_checker.rb
|
144
129
|
- test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb
|
145
130
|
- test/xml_instantiator_test/simple_xmi_metamodel.rb
|
146
131
|
- test/xml_instantiator_test/simple_xmi_to_ecore.rb
|
132
|
+
- test/xml_instantiator_test.rb
|
147
133
|
- redist/xmlscan
|
148
134
|
- redist/xmlscan/ChangeLog
|
149
135
|
- redist/xmlscan/doc
|
150
|
-
- redist/xmlscan/install.rb
|
151
|
-
- redist/xmlscan/lib
|
152
|
-
- redist/xmlscan/memo
|
153
|
-
- redist/xmlscan/README
|
154
|
-
- redist/xmlscan/samples
|
155
|
-
- redist/xmlscan/test.rb
|
156
|
-
- redist/xmlscan/tests
|
157
|
-
- redist/xmlscan/THANKS
|
158
136
|
- redist/xmlscan/doc/changes.html
|
159
137
|
- redist/xmlscan/doc/changes.rd
|
160
138
|
- redist/xmlscan/doc/en
|
161
|
-
- redist/xmlscan/doc/ja
|
162
|
-
- redist/xmlscan/doc/src
|
163
139
|
- redist/xmlscan/doc/en/conformance.html
|
164
140
|
- redist/xmlscan/doc/en/conformance.rd
|
165
141
|
- redist/xmlscan/doc/en/manual.html
|
166
142
|
- redist/xmlscan/doc/en/manual.rd
|
143
|
+
- redist/xmlscan/doc/ja
|
167
144
|
- redist/xmlscan/doc/ja/conformance.ja.html
|
168
145
|
- redist/xmlscan/doc/ja/conformance.ja.rd
|
169
146
|
- redist/xmlscan/doc/ja/manual.ja.html
|
170
147
|
- redist/xmlscan/doc/ja/manual.ja.rd
|
148
|
+
- redist/xmlscan/doc/src
|
171
149
|
- redist/xmlscan/doc/src/conformance.rd.src
|
172
150
|
- redist/xmlscan/doc/src/langsplit.rb
|
173
151
|
- redist/xmlscan/doc/src/Makefile
|
174
152
|
- redist/xmlscan/doc/src/manual.rd.src
|
153
|
+
- redist/xmlscan/install.rb
|
154
|
+
- redist/xmlscan/lib
|
175
155
|
- redist/xmlscan/lib/xmlscan
|
176
156
|
- redist/xmlscan/lib/xmlscan/encoding.rb
|
177
157
|
- redist/xmlscan/lib/xmlscan/htmlscan.rb
|
@@ -181,17 +161,17 @@ files:
|
|
181
161
|
- redist/xmlscan/lib/xmlscan/version.rb
|
182
162
|
- redist/xmlscan/lib/xmlscan/visitor.rb
|
183
163
|
- redist/xmlscan/lib/xmlscan/xmlchar.rb
|
164
|
+
- redist/xmlscan/memo
|
184
165
|
- redist/xmlscan/memo/CONFORMANCE
|
185
166
|
- redist/xmlscan/memo/contentspec.ry
|
186
167
|
- redist/xmlscan/memo/PRODUCTIONS
|
168
|
+
- redist/xmlscan/README
|
169
|
+
- redist/xmlscan/samples
|
187
170
|
- redist/xmlscan/samples/chibixml.rb
|
188
171
|
- redist/xmlscan/samples/getxmlchar.rb
|
189
172
|
- redist/xmlscan/samples/rexml.rb
|
190
173
|
- redist/xmlscan/samples/xmlbench
|
191
|
-
- redist/xmlscan/samples/xmlbench.rb
|
192
|
-
- redist/xmlscan/samples/xmlconftest.rb
|
193
174
|
- redist/xmlscan/samples/xmlbench/parser
|
194
|
-
- redist/xmlscan/samples/xmlbench/xmlbench-lib.rb
|
195
175
|
- redist/xmlscan/samples/xmlbench/parser/chibixml.rb
|
196
176
|
- redist/xmlscan/samples/xmlbench/parser/nqxml.rb
|
197
177
|
- redist/xmlscan/samples/xmlbench/parser/rexml.rb
|
@@ -200,6 +180,11 @@ files:
|
|
200
180
|
- redist/xmlscan/samples/xmlbench/parser/xmlscan-chibixml.rb
|
201
181
|
- redist/xmlscan/samples/xmlbench/parser/xmlscan-rexml.rb
|
202
182
|
- redist/xmlscan/samples/xmlbench/parser/xmlscan.rb
|
183
|
+
- redist/xmlscan/samples/xmlbench/xmlbench-lib.rb
|
184
|
+
- redist/xmlscan/samples/xmlbench.rb
|
185
|
+
- redist/xmlscan/samples/xmlconftest.rb
|
186
|
+
- redist/xmlscan/test.rb
|
187
|
+
- redist/xmlscan/tests
|
203
188
|
- redist/xmlscan/tests/deftestcase.rb
|
204
189
|
- redist/xmlscan/tests/runtest.rb
|
205
190
|
- redist/xmlscan/tests/testall.rb
|
@@ -210,11 +195,13 @@ files:
|
|
210
195
|
- redist/xmlscan/tests/testscanner.rb
|
211
196
|
- redist/xmlscan/tests/testxmlchar.rb
|
212
197
|
- redist/xmlscan/tests/visitor.rb
|
198
|
+
- redist/xmlscan/THANKS
|
213
199
|
- README
|
214
200
|
- CHANGELOG
|
215
201
|
- MIT-LICENSE
|
216
|
-
|
217
|
-
|
202
|
+
has_rdoc: true
|
203
|
+
homepage: ruby-gen.org
|
204
|
+
post_install_message:
|
218
205
|
rdoc_options:
|
219
206
|
- --main
|
220
207
|
- README
|
@@ -224,15 +211,26 @@ rdoc_options:
|
|
224
211
|
- test
|
225
212
|
- -x
|
226
213
|
- metamodels
|
227
|
-
|
228
|
-
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
214
|
+
require_paths:
|
215
|
+
- lib
|
216
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
+
requirements:
|
218
|
+
- - ">="
|
219
|
+
- !ruby/object:Gem::Version
|
220
|
+
version: "0"
|
221
|
+
version:
|
222
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
|
+
requirements:
|
224
|
+
- - ">="
|
225
|
+
- !ruby/object:Gem::Version
|
226
|
+
version: "0"
|
227
|
+
version:
|
235
228
|
requirements: []
|
236
229
|
|
237
|
-
|
230
|
+
rubyforge_project: rgen
|
231
|
+
rubygems_version: 1.1.1
|
232
|
+
signing_key:
|
233
|
+
specification_version: 2
|
234
|
+
summary: Ruby Modelling and Generator Framework
|
235
|
+
test_files: []
|
238
236
|
|
@@ -1,196 +0,0 @@
|
|
1
|
-
# RGen Framework
|
2
|
-
# (c) Martin Thiede, 2006
|
3
|
-
|
4
|
-
require 'rgen/metamodel_builder/builder_runtime'
|
5
|
-
require 'rgen/metamodel_builder/builder_extensions'
|
6
|
-
require 'rgen/metamodel_builder/module_extension'
|
7
|
-
require 'rgen/metamodel_builder/data_types'
|
8
|
-
require 'rgen/metamodel_builder/mm_multiple'
|
9
|
-
require 'rgen/ecore/ecore_instantiator'
|
10
|
-
|
11
|
-
module RGen
|
12
|
-
|
13
|
-
# MetamodelBuilder can be used to create a metamodel, i.e. Ruby classes which
|
14
|
-
# act as metamodel elements.
|
15
|
-
#
|
16
|
-
# To create a new metamodel element, create a Ruby class which inherits from
|
17
|
-
# MetamodelBuilder::MMBase
|
18
|
-
#
|
19
|
-
# class Person < RGen::MetamodelBuilder::MMBase
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# This way a couple of class methods are made available to the new class.
|
23
|
-
# These methods can be used to:
|
24
|
-
# * add attributes to the class
|
25
|
-
# * add associations with other classes
|
26
|
-
#
|
27
|
-
# Here is an example:
|
28
|
-
#
|
29
|
-
# class Person < RGen::MetamodelBuilder::MMBase
|
30
|
-
# has_attr 'name', String
|
31
|
-
# has_attr 'age', Integer
|
32
|
-
# end
|
33
|
-
#
|
34
|
-
# class House < RGen::MetamodelBuilder::MMBase
|
35
|
-
# has_attr 'address' # String is default
|
36
|
-
# end
|
37
|
-
#
|
38
|
-
# Person.many_to_many 'homes', House, 'inhabitants'
|
39
|
-
#
|
40
|
-
# See BuilderExtensions for details about the available class methods.
|
41
|
-
#
|
42
|
-
# =Attributes
|
43
|
-
#
|
44
|
-
# The example above creates two classes 'Person' and 'House'. Person has the attributes
|
45
|
-
# 'name' and 'age', House has the attribute 'address'. The attributes can be
|
46
|
-
# accessed on instances of the classes in the following way:
|
47
|
-
#
|
48
|
-
# p = Person.new
|
49
|
-
# p.name = "MyName"
|
50
|
-
# p.age = 22
|
51
|
-
# p.name # => "MyName"
|
52
|
-
# p.age # => 22
|
53
|
-
#
|
54
|
-
# Note that the class Person takes care of the type of its attributes. As
|
55
|
-
# declared above, a 'name' can only be a String, an 'age' must be an Integer.
|
56
|
-
# So the following would return an exception:
|
57
|
-
#
|
58
|
-
# p.name = :myName # => exception: can not put a Symbol where a String is expected
|
59
|
-
#
|
60
|
-
# If the type of an attribute should be left undefined, use Object as type.
|
61
|
-
#
|
62
|
-
# =Associations
|
63
|
-
#
|
64
|
-
# As well as attributes show up as instance methods, associations bring their own
|
65
|
-
# accessor methods. For the Person-to-House association this would be:
|
66
|
-
#
|
67
|
-
# h1 = House.new
|
68
|
-
# h1.address = "Street1"
|
69
|
-
# h2 = House.new
|
70
|
-
# h2.address = "Street2"
|
71
|
-
# p.addHomes(h1)
|
72
|
-
# p.addHomes(h2)
|
73
|
-
# p.removeHomes(h1)
|
74
|
-
# p.homes # => [ h2 ]
|
75
|
-
#
|
76
|
-
# The Person-to-House association is _bidirectional_. This means that with the
|
77
|
-
# addition of a House to a Person, the Person is also added to the House. Thus:
|
78
|
-
#
|
79
|
-
# h1.inhabitants # => []
|
80
|
-
# h2.inhabitants # => [ p ]
|
81
|
-
#
|
82
|
-
# Note that the association is defined between two specific classes, instances of
|
83
|
-
# different classes can not be added. Thus, the following would result in an
|
84
|
-
# exception:
|
85
|
-
#
|
86
|
-
# p.addHomes(:justASymbol) # => exception: can not put a Symbol where a House is expected
|
87
|
-
#
|
88
|
-
# =ECore Metamodel description
|
89
|
-
#
|
90
|
-
# The class methods described above are used to create a Ruby representation of the metamodel
|
91
|
-
# we have in mind in a very simple and easy way. We don't have to care about all the details
|
92
|
-
# of a metamodel at this point (e.g. multiplicities, changeability, etc).
|
93
|
-
#
|
94
|
-
# At the same time however, an instance of the ECore metametamodel (i.e. a ECore based
|
95
|
-
# description of our metamodel) is provided for all the Ruby classes and modules we create.
|
96
|
-
# Since we did not provide the nitty-gritty details of the metamodel, defaults are used to
|
97
|
-
# fully complete the ECore metamodel description.
|
98
|
-
#
|
99
|
-
# In order to access the ECore metamodel description, just call the +ecore+ method on a
|
100
|
-
# Ruby class or module object belonging to your metamodel.
|
101
|
-
#
|
102
|
-
# Here is the example continued from above:
|
103
|
-
#
|
104
|
-
# Person.ecore.eAttributes.name # => ["name", "age"]
|
105
|
-
# h2pRef = House.ecore.eReferences.first
|
106
|
-
# h2pRef.eType # => Person
|
107
|
-
# h2pRef.eOpposite.eType # => House
|
108
|
-
# h2pRef.lowerBound # => 0
|
109
|
-
# h2pRef.upperBound # => -1
|
110
|
-
# h2pRef.many # => true
|
111
|
-
# h2pRef.containment # => false
|
112
|
-
#
|
113
|
-
# Note that the use of array_extensions.rb is assumed here to make model navigation convenient.
|
114
|
-
#
|
115
|
-
# The following metamodel builder methods are supported, see individual method description
|
116
|
-
# for details:
|
117
|
-
#
|
118
|
-
# Attributes:
|
119
|
-
# * BuilderExtensions#has_attr
|
120
|
-
#
|
121
|
-
# Unidirectional references:
|
122
|
-
# * BuilderExtensions#has_one
|
123
|
-
# * BuilderExtensions#has_many
|
124
|
-
# * BuilderExtensions#contains_one_uni
|
125
|
-
# * BuilderExtensions#contains_many_uni
|
126
|
-
#
|
127
|
-
# Bidirectional references:
|
128
|
-
# * BuilderExtensions#one_to_one
|
129
|
-
# * BuilderExtensions#one_to_many
|
130
|
-
# * BuilderExtensions#many_to_one
|
131
|
-
# * BuilderExtensions#many_to_many
|
132
|
-
# * BuilderExtensions#contains_one
|
133
|
-
# * BuilderExtensions#contains_many
|
134
|
-
#
|
135
|
-
# Every builder command can optionally take a specification of further ECore properties.
|
136
|
-
# Additional properties for Attributes and References are (with defaults in brackets):
|
137
|
-
# * :ordered (true),
|
138
|
-
# * :unique (true),
|
139
|
-
# * :changeable (true),
|
140
|
-
# * :volatile (false),
|
141
|
-
# * :transient (false),
|
142
|
-
# * :unsettable (false),
|
143
|
-
# * :derived (false),
|
144
|
-
# * :lowerBound (0),
|
145
|
-
# * :resolveProxies (true) <i>references only</i>,
|
146
|
-
#
|
147
|
-
# Using these additional properties, the above example can be refined as follows:
|
148
|
-
#
|
149
|
-
# class Person < RGen::MetamodelBuilder::MMBase
|
150
|
-
# has_attr 'name', String, :lowerBound => 1
|
151
|
-
# has_attr 'yearOfBirth', Integer,
|
152
|
-
# has_attr 'age', Integer, :derived => true
|
153
|
-
# def age_derived
|
154
|
-
# Time.now.year - yearOfBirth
|
155
|
-
# end
|
156
|
-
# end
|
157
|
-
#
|
158
|
-
# Person.many_to_many 'homes', House, 'inhabitants', :upperBound => 5
|
159
|
-
#
|
160
|
-
# Person.ecore.eReferences.find{|r| r.name == 'homes'}.upperBound # => 5
|
161
|
-
#
|
162
|
-
# This way we state that there must be a name for each person, we introduce a new attribute
|
163
|
-
# 'yearOfBirth' and make 'age' a derived attribute. We also say that a person can
|
164
|
-
# have at most 5 houses in our metamodel.
|
165
|
-
#
|
166
|
-
# ==Derived attributes and references
|
167
|
-
#
|
168
|
-
# If the attribute 'derived' of an attribute or reference is set to true, a method +attributeName_derived+
|
169
|
-
# has to be provided. This method is called whenever the original attribute is accessed. The
|
170
|
-
# original attribute can not be written if it is derived.
|
171
|
-
#
|
172
|
-
#
|
173
|
-
module MetamodelBuilder
|
174
|
-
|
175
|
-
# Use this class as a start for new metamodel elements (i.e. Ruby classes)
|
176
|
-
# by inheriting for it.
|
177
|
-
#
|
178
|
-
# See MetamodelBuilder for an example.
|
179
|
-
class MMBase
|
180
|
-
include BuilderRuntime
|
181
|
-
include DataTypes
|
182
|
-
extend BuilderExtensions
|
183
|
-
extend ModuleExtension
|
184
|
-
extend RGen::ECore::ECoreInstantiator
|
185
|
-
|
186
|
-
def initialize(arg=nil)
|
187
|
-
arg.each_pair { |k,v| setGeneric(k, v) } if arg.is_a?(Hash)
|
188
|
-
end
|
189
|
-
def self.method_added(m)
|
190
|
-
raise "Do not add methods to model classes directly, add them to the ClassModule instead"
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
end
|
195
|
-
|
196
|
-
end
|