activefacts-metamodel 1.8.1 → 1.8.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -1
- data/Rakefile +23 -0
- data/activefacts-metamodel.gemspec +2 -1
- data/cql/Metamodel.cql +8 -0
- data/lib/activefacts/metamodel/extensions.rb +187 -8
- data/lib/activefacts/metamodel/metamodel.rb +122 -111
- data/lib/activefacts/metamodel/version.rb +1 -1
- data/orm/Metamodel.orm +3130 -2859
- metadata +24 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 191d182dcc1294a8a95c45837cb280eb7c5f6aa5
|
4
|
+
data.tar.gz: dc363ab895323a22cdecc5f6e475a5ca5e833346
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 620e4357c3c17757a3e62267350aaa7d8270176dd07ef32ef1a618ab9cbbf35c82f1ad251fc133e1e848351bf88ed44a608ff47fe351d522fe2f8645d9939246
|
7
|
+
data.tar.gz: 3f2721be2e27a9ec39b00054c83176add5122f18814b9ef5c6a6c29d00288ba80298043a90b60506bb847c111d45c9db58b474685aa8570e199bc95abfaa69dc
|
data/Gemfile
CHANGED
@@ -3,7 +3,7 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
if ENV['PWD'] =~ %r{\A#{ENV['HOME']}/work}
|
6
|
-
$
|
6
|
+
$stderr.puts "Using work area gems for #{File.basename(File.dirname(__FILE__))} from activefacts-metamodel"
|
7
7
|
gem 'activefacts-api', path: '/Users/cjh/work/activefacts/api'
|
8
8
|
# gem 'activefacts-api', git: 'git://github.com/cjheath/activefacts-api.git'
|
9
9
|
end
|
data/Rakefile
CHANGED
@@ -6,6 +6,7 @@ RSpec::Core::RakeTask.new(:spec)
|
|
6
6
|
|
7
7
|
task :default => :spec
|
8
8
|
|
9
|
+
desc "Bump gem version patch number"
|
9
10
|
task :bump do
|
10
11
|
path = File.expand_path('../lib/activefacts/metamodel/version.rb', __FILE__)
|
11
12
|
lines = File.open(path) do |fp| fp.readlines; end
|
@@ -21,3 +22,25 @@ task :bump do
|
|
21
22
|
)
|
22
23
|
end
|
23
24
|
end
|
25
|
+
|
26
|
+
desc "Generate new CQL from the ORM file"
|
27
|
+
task :cql do
|
28
|
+
system "afgen --cql orm/Metamodel.orm > Metamodel.cql"
|
29
|
+
system "afgen --cql cql/Metamodel.cql 2>/dev/null | diff -ub - Metamodel.cql | tee Metamodel.cql.diffs"
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Generate new Ruby from the ORM file"
|
33
|
+
task :ruby do
|
34
|
+
system %q{
|
35
|
+
afgen --ruby cql/Metamodel.cql 2>/dev/null |
|
36
|
+
sed '2a\
|
37
|
+
module ActiveFacts
|
38
|
+
|
39
|
+
3s/:://
|
40
|
+
3,$s/^/ /
|
41
|
+
$a\
|
42
|
+
end
|
43
|
+
' > metamodel.rb
|
44
|
+
}
|
45
|
+
system "diff -ub lib/activefacts/metamodel/metamodel.rb metamodel.rb"
|
46
|
+
end
|
@@ -24,5 +24,6 @@ This gem provides the core representations for the Fact Modeling tools of Active
|
|
24
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
25
25
|
spec.add_development_dependency "rspec", "~> 3.3"
|
26
26
|
|
27
|
-
spec.add_runtime_dependency "activefacts-api", ">= 1.8", "~> 1.8.
|
27
|
+
spec.add_runtime_dependency "activefacts-api", ">= 1.8", "~> 1.8.5"
|
28
|
+
spec.add_development_dependency "activefacts", "~> 1.8", "~> 1.8.0"
|
28
29
|
end
|
data/cql/Metamodel.cql
CHANGED
@@ -22,6 +22,7 @@ Implication Rule Name is written as String;
|
|
22
22
|
Length is written as Unsigned Integer(32);
|
23
23
|
Literal is written as String;
|
24
24
|
Name is written as String(64);
|
25
|
+
Nesting Mode is written as String restricted to {'Array', 'Bag', 'Map', 'Repetition'};
|
25
26
|
Numerator is written as Decimal;
|
26
27
|
Offset is written as Decimal;
|
27
28
|
Ordinal is written as Unsigned Integer(16);
|
@@ -57,6 +58,7 @@ Component is identified by Guid where
|
|
57
58
|
Component has one Guid,
|
58
59
|
Guid is of at most one Component;
|
59
60
|
Component projects at most one Name;
|
61
|
+
Component has at most one Ordinal rank;
|
60
62
|
|
61
63
|
Composition is identified by Guid where
|
62
64
|
Composition has one Guid,
|
@@ -311,6 +313,7 @@ Fact Type Shape is for one Fact Type,
|
|
311
313
|
Fact Type Shape has at most one Rotation Setting;
|
312
314
|
|
313
315
|
Injection is a kind of Mapping;
|
316
|
+
ValueField is a kind of Injection;
|
314
317
|
|
315
318
|
Mirror Role is a kind of Role;
|
316
319
|
Mirror Role is for at most one Role (as Base Role),
|
@@ -323,6 +326,11 @@ Nesting is where
|
|
323
326
|
Absorption is nested under index-Role in Ordinal position,
|
324
327
|
Absorption in Ordinal position is nested under one Role,
|
325
328
|
Role keys nesting of Absorption at Ordinal priority;
|
329
|
+
Absorption uses at most one Nesting Mode;
|
330
|
+
Nesting has at most one key-Name;
|
331
|
+
Absorption is nested under index Role in Ordinal position
|
332
|
+
if and only if
|
333
|
+
that Absorption uses some Nesting Mode;
|
326
334
|
|
327
335
|
ORM Diagram is a kind of Diagram;
|
328
336
|
Shape is in one ORM Diagram,
|
@@ -267,9 +267,7 @@ module ActiveFacts
|
|
267
267
|
end
|
268
268
|
|
269
269
|
def is_mandatory
|
270
|
-
|
271
|
-
# REVISIT: Handle mirror roles
|
272
|
-
return fact_type.implying_role.is_mandatory if fact_type.is_a?(LinkFactType)
|
270
|
+
return true if fact_type.is_a?(LinkFactType) # Handle objectification roles
|
273
271
|
all_role_ref.detect{|rr|
|
274
272
|
rs = rr.role_sequence
|
275
273
|
rs.all_role_ref.size == 1 and
|
@@ -286,7 +284,8 @@ module ActiveFacts
|
|
286
284
|
# Return true if this role is functional (has only one instance wrt its player)
|
287
285
|
# A role in an objectified fact type is deemed to refer to the implicit role of the objectification.
|
288
286
|
def is_functional
|
289
|
-
|
287
|
+
return true if fact_type.is_a?(LinkFactType) # Handle objectification roles
|
288
|
+
|
290
289
|
fact_type.entity_type or
|
291
290
|
fact_type.all_role.size != 2 or
|
292
291
|
uniqueness_constraint
|
@@ -305,7 +304,8 @@ module ActiveFacts
|
|
305
304
|
|
306
305
|
# Is there are internal uniqueness constraint on this role only?
|
307
306
|
def is_unique
|
308
|
-
#
|
307
|
+
return true if fact_type.is_a?(LinkFactType) # Handle objectification roles
|
308
|
+
|
309
309
|
uniqueness_constraint ? true : false
|
310
310
|
end
|
311
311
|
|
@@ -600,6 +600,10 @@ module ActiveFacts
|
|
600
600
|
end
|
601
601
|
end
|
602
602
|
|
603
|
+
def rank_in_preferred_identifier(role)
|
604
|
+
preferred_identifier.role_sequence.all_role_ref_in_order.map(&:role).index(role)
|
605
|
+
end
|
606
|
+
|
603
607
|
# An array of all direct subtypes:
|
604
608
|
def subtypes
|
605
609
|
# REVISIT: There's no sorting here. Should there be?
|
@@ -1120,15 +1124,15 @@ module ActiveFacts
|
|
1120
1124
|
|
1121
1125
|
class MirrorRole
|
1122
1126
|
def is_mandatory
|
1123
|
-
|
1127
|
+
base_role.is_mandatory
|
1124
1128
|
end
|
1125
1129
|
|
1126
1130
|
def is_unique
|
1127
|
-
|
1131
|
+
base_role.is_unique
|
1128
1132
|
end
|
1129
1133
|
|
1130
1134
|
def is_functional
|
1131
|
-
|
1135
|
+
base_role.is_functional
|
1132
1136
|
end
|
1133
1137
|
|
1134
1138
|
def uniqueness_constraint
|
@@ -1343,5 +1347,180 @@ module ActiveFacts
|
|
1343
1347
|
end
|
1344
1348
|
end
|
1345
1349
|
|
1350
|
+
class Mapping
|
1351
|
+
def inspect
|
1352
|
+
"#{self.class.basename} (#{rank_kind}) of #{object_type.name}"
|
1353
|
+
end
|
1354
|
+
|
1355
|
+
def show_trace
|
1356
|
+
trace :composition, "#{ordinal ? "#{ordinal}: " : ''}#{inspect} #{name ? " (as #{name})" : ''}" do
|
1357
|
+
yield if block_given?
|
1358
|
+
all_member.sort_by{|member| [member.ordinal, member.name]}.each do |member|
|
1359
|
+
member.show_trace
|
1360
|
+
end
|
1361
|
+
end
|
1362
|
+
end
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
class Nesting
|
1366
|
+
def show_trace
|
1367
|
+
# The index role has a counterpart played by the parent object in the enclosing Absorption
|
1368
|
+
reading = index_role.fact_type.default_reading
|
1369
|
+
trace :composition, "#{ordinal}: Nesting under #{index_role.object_type.name}#{key_name ? " (as #{key_name})" : ''} in #{reading.inspect}}"
|
1370
|
+
end
|
1371
|
+
end
|
1372
|
+
|
1373
|
+
class Absorption
|
1374
|
+
def inspect
|
1375
|
+
"#{super} in #{parent_role.fact_type.reading_preferably_starting_with_role(parent_role).expand.inspect}"
|
1376
|
+
end
|
1377
|
+
|
1378
|
+
def show_trace
|
1379
|
+
super() do
|
1380
|
+
if nesting_mode || all_nesting.size > 0
|
1381
|
+
trace :composition, "Nested using #{nesting_mode || 'unspecified'} mode" do
|
1382
|
+
all_nesting.sort_by(&:ordinal).each(&:show_trace)
|
1383
|
+
end
|
1384
|
+
end
|
1385
|
+
end
|
1386
|
+
end
|
1387
|
+
|
1388
|
+
def is_type_inheritance
|
1389
|
+
child_role.fact_type.is_a?(TypeInheritance) && child_role.fact_type
|
1390
|
+
end
|
1391
|
+
|
1392
|
+
def is_supertype_absorption
|
1393
|
+
is_type_inheritance && child_role.fact_type.supertype == object_type
|
1394
|
+
end
|
1395
|
+
|
1396
|
+
def is_subtype_absorption
|
1397
|
+
is_type_inheritance && parent_role.fact_type.supertype == object_type
|
1398
|
+
end
|
1399
|
+
end
|
1400
|
+
|
1401
|
+
class Indicator
|
1402
|
+
def inspect
|
1403
|
+
"#{self.class.basename} #{role.fact_type.default_reading.inspect}"
|
1404
|
+
end
|
1405
|
+
|
1406
|
+
def show_trace
|
1407
|
+
trace :composition, "#{ordinal ? "#{ordinal}: " : ''}#{inspect} #{name ? " (as #{name})" : ''}"
|
1408
|
+
end
|
1409
|
+
end
|
1410
|
+
|
1411
|
+
class Discriminator
|
1412
|
+
def inspect
|
1413
|
+
"#{self.class.basename} #{role.fact_type.default_reading.inspect}"
|
1414
|
+
end
|
1415
|
+
|
1416
|
+
def show_trace
|
1417
|
+
trace :composition, "#{ordinal ? "#{ordinal}: " : ''}#{inspect} #{name ? " (as #{name})" : ''}"
|
1418
|
+
end
|
1419
|
+
end
|
1420
|
+
|
1421
|
+
class ValueField
|
1422
|
+
def inspect
|
1423
|
+
"#{self.class.basename} #{object_type.name.inspect}"
|
1424
|
+
end
|
1425
|
+
|
1426
|
+
def show_trace
|
1427
|
+
trace :composition, "#{ordinal}: #{inspect} #{name ? " (as #{name})" : ''}"
|
1428
|
+
end
|
1429
|
+
end
|
1430
|
+
|
1431
|
+
class Component
|
1432
|
+
# The ranking key of a component indicates its importance to its parent:
|
1433
|
+
# Ranking assigns a total order, but is computed in groups:
|
1434
|
+
RANK_SUPER = 0 # Supertypes, with the identifying supertype first, others alphabetical
|
1435
|
+
RANK_IDENT = 1 # Identifying components (absorptions, indicator), in order of the identifier
|
1436
|
+
RANK_VALUE = 2 # A ValueField
|
1437
|
+
RANK_INJECTION = 3 # Injections, in alphabetical order
|
1438
|
+
RANK_DISCRIMINATOR = 4 # Discriminator components, in alphabetical order
|
1439
|
+
RANK_FOREIGN = 5 # REVISIT: Foreign key components
|
1440
|
+
RANK_INDICATOR = 6 # Indicators in alphabetical order
|
1441
|
+
RANK_MANDATORY = 7 # Absorption: unique mandatory
|
1442
|
+
RANK_NON_MANDATORY = 8 # Absorption: unique optional
|
1443
|
+
RANK_MULTIPLE = 9 # Absorption: manifold
|
1444
|
+
RANK_SUBTYPE = 10 # Subtypes in alphabetical order
|
1445
|
+
RANK_SCOPING = 11 # Scoping in alphabetical order
|
1446
|
+
|
1447
|
+
def rank_key
|
1448
|
+
parent_et = parent &&
|
1449
|
+
parent.object_type.is_a?(EntityType) &&
|
1450
|
+
parent.object_type
|
1451
|
+
|
1452
|
+
case self
|
1453
|
+
when Indicator
|
1454
|
+
if parent_et && (position = parent_et.rank_in_preferred_identifier(role))
|
1455
|
+
[RANK_IDENT, position] # An identifying unary
|
1456
|
+
else
|
1457
|
+
[RANK_INDICATOR, name || role.role_name || role.fact_type.default_reading] # A non-identifying unary
|
1458
|
+
end
|
1459
|
+
|
1460
|
+
when Discriminator
|
1461
|
+
[RANK_DISCRIMINATOR, name || object_type.name]
|
1462
|
+
|
1463
|
+
when ValueField
|
1464
|
+
[RANK_IDENT]
|
1465
|
+
|
1466
|
+
when Injection
|
1467
|
+
[RANK_INJECTION, name || object_type.name] # REVISIT: A different sub-key for ranking may be needed
|
1468
|
+
|
1469
|
+
when Absorption
|
1470
|
+
if is_type_inheritance
|
1471
|
+
# We are traversing a type inheritance fact type. Is this object_type the subtype or supertype?
|
1472
|
+
if is_supertype_absorption
|
1473
|
+
# What's the rank of this supertype?
|
1474
|
+
tis = parent_role.object_type.all_type_inheritance_as_subtype.sort_by{|ti| ti.provides_identification ? '' : ti.supertype.name }
|
1475
|
+
[RANK_SUPER, child_role.fact_type.provides_identification ? 0 : 1+tis.index(parent_role.fact_type)]
|
1476
|
+
else
|
1477
|
+
# What's the rank of this subtype?
|
1478
|
+
tis = parent_role.object_type.all_type_inheritance_as_supertype.sort_by{|ti| ti.subtype.name }
|
1479
|
+
[RANK_SUBTYPE, tis.index(parent_role.fact_type)]
|
1480
|
+
end
|
1481
|
+
elsif parent_et && (position = parent_et.rank_in_preferred_identifier(child_role))
|
1482
|
+
[RANK_IDENT, position]
|
1483
|
+
else
|
1484
|
+
if parent_role.is_unique
|
1485
|
+
[parent_role.is_mandatory ? RANK_MANDATORY : RANK_NON_MANDATORY, name || child_role.role_name || object_type.name]
|
1486
|
+
else
|
1487
|
+
[RANK_MULTIPLE, name || child_role.role_name || object_type.name]
|
1488
|
+
end
|
1489
|
+
end
|
1490
|
+
|
1491
|
+
when Scoping
|
1492
|
+
[RANK_SCOPING, name || object_type.name]
|
1493
|
+
|
1494
|
+
else
|
1495
|
+
raise "unexpected #{self.class.basename} in Component#rank_key"
|
1496
|
+
end
|
1497
|
+
end
|
1498
|
+
|
1499
|
+
def rank_kind
|
1500
|
+
return "composite" if self.class == Mapping
|
1501
|
+
case rank_key[0]
|
1502
|
+
when RANK_SUPER; "supertype"
|
1503
|
+
when RANK_IDENT; "existential"
|
1504
|
+
when RANK_VALUE; "self-value"
|
1505
|
+
when RANK_INJECTION; "injection"
|
1506
|
+
when RANK_DISCRIMINATOR; "discriminator"
|
1507
|
+
when RANK_FOREIGN; "foreignkey"
|
1508
|
+
when RANK_INDICATOR; "indicator"
|
1509
|
+
when RANK_MANDATORY; "mandatory"
|
1510
|
+
when RANK_NON_MANDATORY; "optional"
|
1511
|
+
when RANK_MULTIPLE; "multiple"
|
1512
|
+
when RANK_SUBTYPE; "subtype"
|
1513
|
+
when RANK_SCOPING; "scoping"
|
1514
|
+
end
|
1515
|
+
end
|
1516
|
+
|
1517
|
+
def inspect
|
1518
|
+
"#{self.class.basename}"
|
1519
|
+
end
|
1520
|
+
|
1521
|
+
def show_trace
|
1522
|
+
trace :composition, "#{ordinal ? "#{ordinal}: " : ''}#{inspect}#{name ? " (as #{name})" : ''}"
|
1523
|
+
end
|
1524
|
+
end
|
1346
1525
|
end
|
1347
1526
|
end
|
@@ -2,68 +2,68 @@ require 'activefacts/api'
|
|
2
2
|
|
3
3
|
module ActiveFacts
|
4
4
|
module Metamodel
|
5
|
-
|
5
|
+
|
6
6
|
class Adjective < String
|
7
7
|
value_type :length => 64
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
class AgentName < String
|
11
11
|
value_type
|
12
12
|
one_to_one :agent # See Agent.agent_name
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
class AggregateCode < String
|
16
16
|
value_type :length => 32
|
17
17
|
one_to_one :aggregate # See Aggregate.aggregate_code
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
class Annotation < String
|
21
21
|
value_type
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
class Assimilation < String
|
25
25
|
value_type
|
26
26
|
restrict 'absorbed', 'partitioned', 'separate'
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
class ContextNoteKind < String
|
30
30
|
value_type
|
31
31
|
restrict 'as_opposed_to', 'because', 'so_that', 'to_avoid'
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
class Date < ::Date
|
35
35
|
value_type
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
class Denominator < UnsignedInteger
|
39
39
|
value_type :length => 32
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
class Discussion < String
|
43
43
|
value_type
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
class DisplayRoleNamesSetting < String
|
47
47
|
value_type
|
48
48
|
restrict 'false', 'true'
|
49
49
|
end
|
50
|
-
|
50
|
+
|
51
51
|
class EnforcementCode < String
|
52
52
|
value_type :length => 16
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
class EphemeraURL < String
|
56
56
|
value_type
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
class Exponent < SignedInteger
|
60
60
|
value_type :length => 16
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
class Frequency < UnsignedInteger
|
64
64
|
value_type :length => 32
|
65
65
|
end
|
66
|
-
|
66
|
+
|
67
67
|
class Guid < ::Guid
|
68
68
|
value_type
|
69
69
|
one_to_one :alternative_set # See AlternativeSet.guid
|
@@ -74,20 +74,20 @@ module ActiveFacts
|
|
74
74
|
one_to_one :shape # See Shape.guid
|
75
75
|
one_to_one :step # See Step.guid
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
class ImplicationRuleName < String
|
79
79
|
value_type
|
80
80
|
one_to_one :implication_rule # See ImplicationRule.implication_rule_name
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
83
|
class Length < UnsignedInteger
|
84
84
|
value_type :length => 32
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
class Literal < String
|
88
88
|
value_type
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
class Name < String
|
92
92
|
value_type :length => 64
|
93
93
|
one_to_one :composition # See Composition.name
|
@@ -96,118 +96,124 @@ module ActiveFacts
|
|
96
96
|
one_to_one :unit # See Unit.name
|
97
97
|
one_to_one :vocabulary # See Vocabulary.name
|
98
98
|
end
|
99
|
-
|
99
|
+
|
100
|
+
class NestingMode < String
|
101
|
+
value_type
|
102
|
+
restrict 'Array', 'Bag', 'Map', 'Repetition'
|
103
|
+
end
|
104
|
+
|
100
105
|
class Numerator < Decimal
|
101
106
|
value_type
|
102
107
|
end
|
103
|
-
|
108
|
+
|
104
109
|
class Offset < Decimal
|
105
110
|
value_type
|
106
111
|
end
|
107
|
-
|
112
|
+
|
108
113
|
class Ordinal < UnsignedInteger
|
109
114
|
value_type :length => 16
|
110
115
|
end
|
111
|
-
|
116
|
+
|
112
117
|
class Pronoun < String
|
113
118
|
value_type :length => 20
|
114
119
|
restrict 'feminine', 'masculine', 'neuter', 'personal'
|
115
120
|
end
|
116
|
-
|
121
|
+
|
117
122
|
class RegularExpression < String
|
118
123
|
value_type
|
119
124
|
end
|
120
|
-
|
125
|
+
|
121
126
|
class RingType < String
|
122
127
|
value_type
|
123
128
|
end
|
124
|
-
|
129
|
+
|
125
130
|
class RotationSetting < String
|
126
131
|
value_type
|
127
132
|
restrict 'left', 'right'
|
128
133
|
end
|
129
|
-
|
134
|
+
|
130
135
|
class Scale < UnsignedInteger
|
131
136
|
value_type :length => 32
|
132
137
|
end
|
133
|
-
|
138
|
+
|
134
139
|
class Subscript < UnsignedInteger
|
135
140
|
value_type :length => 16
|
136
141
|
end
|
137
|
-
|
142
|
+
|
138
143
|
class Text < String
|
139
144
|
value_type :length => 256
|
140
145
|
end
|
141
|
-
|
146
|
+
|
142
147
|
class TransactionPhase < String
|
143
148
|
value_type
|
144
149
|
restrict 'assert', 'commit'
|
145
150
|
end
|
146
|
-
|
151
|
+
|
147
152
|
class X < SignedInteger
|
148
153
|
value_type :length => 32
|
149
154
|
end
|
150
|
-
|
155
|
+
|
151
156
|
class Y < SignedInteger
|
152
157
|
value_type :length => 32
|
153
158
|
end
|
154
|
-
|
159
|
+
|
155
160
|
class Agent
|
156
161
|
identified_by :agent_name
|
157
162
|
one_to_one :agent_name, :mandatory => true # See AgentName.agent
|
158
163
|
end
|
159
|
-
|
164
|
+
|
160
165
|
class Aggregate
|
161
166
|
identified_by :aggregate_code
|
162
167
|
one_to_one :aggregate_code, :mandatory => true # See AggregateCode.aggregate
|
163
168
|
end
|
164
|
-
|
169
|
+
|
165
170
|
class AlternativeSet
|
166
171
|
identified_by :guid
|
167
172
|
one_to_one :guid, :mandatory => true # See Guid.alternative_set
|
168
173
|
maybe :members_are_exclusive
|
169
174
|
end
|
170
|
-
|
175
|
+
|
171
176
|
class Coefficient
|
172
177
|
identified_by :numerator, :denominator, :is_precise
|
173
178
|
has_one :denominator, :mandatory => true # See Denominator.all_coefficient
|
174
179
|
maybe :is_precise
|
175
180
|
has_one :numerator, :mandatory => true # See Numerator.all_coefficient
|
176
181
|
end
|
177
|
-
|
182
|
+
|
178
183
|
class Component
|
179
184
|
identified_by :guid
|
180
185
|
one_to_one :guid, :mandatory => true # See Guid.component
|
181
186
|
has_one :name # See Name.all_component
|
187
|
+
has_one :ordinal # See Ordinal.all_component
|
182
188
|
has_one :parent, :class => "Mapping", :counterpart => :member # See Mapping.all_member
|
183
189
|
end
|
184
|
-
|
190
|
+
|
185
191
|
class Composition
|
186
192
|
identified_by :guid
|
187
193
|
one_to_one :guid, :mandatory => true # See Guid.composition
|
188
194
|
one_to_one :name, :mandatory => true # See Name.composition
|
189
195
|
end
|
190
|
-
|
196
|
+
|
191
197
|
class Concept
|
192
198
|
identified_by :guid
|
193
199
|
one_to_one :guid, :mandatory => true # See Guid.concept
|
194
200
|
has_one :implication_rule # See ImplicationRule.all_concept
|
195
201
|
has_one :topic # See Topic.all_concept
|
196
202
|
end
|
197
|
-
|
203
|
+
|
198
204
|
class ConceptAnnotation
|
199
205
|
identified_by :concept, :mapping_annotation
|
200
206
|
has_one :concept, :mandatory => true # See Concept.all_concept_annotation
|
201
207
|
has_one :mapping_annotation, :class => Annotation, :mandatory => true # See Annotation.all_concept_annotation_as_mapping_annotation
|
202
208
|
end
|
203
|
-
|
209
|
+
|
204
210
|
class Constraint
|
205
211
|
identified_by :concept
|
206
212
|
one_to_one :concept, :mandatory => true # See Concept.constraint
|
207
213
|
has_one :name # See Name.all_constraint
|
208
214
|
has_one :vocabulary # See Vocabulary.all_constraint
|
209
215
|
end
|
210
|
-
|
216
|
+
|
211
217
|
class ContextNote
|
212
218
|
identified_by :concept
|
213
219
|
one_to_one :concept, :mandatory => true # See Concept.context_note
|
@@ -215,38 +221,38 @@ module ActiveFacts
|
|
215
221
|
has_one :discussion, :mandatory => true # See Discussion.all_context_note
|
216
222
|
has_one :relevant_concept, :class => Concept # See Concept.all_context_note_as_relevant_concept
|
217
223
|
end
|
218
|
-
|
224
|
+
|
219
225
|
class Discriminator < Component
|
220
226
|
end
|
221
|
-
|
227
|
+
|
222
228
|
class Enforcement
|
223
229
|
identified_by :constraint
|
224
230
|
has_one :agent # See Agent.all_enforcement
|
225
231
|
one_to_one :constraint, :mandatory => true # See Constraint.enforcement
|
226
232
|
has_one :enforcement_code, :mandatory => true # See EnforcementCode.all_enforcement
|
227
233
|
end
|
228
|
-
|
234
|
+
|
229
235
|
class Fact
|
230
236
|
identified_by :concept
|
231
237
|
one_to_one :concept, :mandatory => true # See Concept.fact
|
232
238
|
has_one :fact_type, :mandatory => true # See FactType.all_fact
|
233
239
|
has_one :population, :mandatory => true # See Population.all_fact
|
234
240
|
end
|
235
|
-
|
241
|
+
|
236
242
|
class FactType
|
237
243
|
identified_by :concept
|
238
244
|
one_to_one :concept, :mandatory => true # See Concept.fact_type
|
239
245
|
end
|
240
|
-
|
246
|
+
|
241
247
|
class ImplicationRule
|
242
248
|
identified_by :implication_rule_name
|
243
249
|
one_to_one :implication_rule_name, :mandatory => true # See ImplicationRuleName.implication_rule
|
244
250
|
end
|
245
|
-
|
251
|
+
|
246
252
|
class Indicator < Component
|
247
253
|
has_one :role, :mandatory => true # See Role.all_indicator
|
248
254
|
end
|
249
|
-
|
255
|
+
|
250
256
|
class Instance
|
251
257
|
identified_by :concept
|
252
258
|
one_to_one :concept, :mandatory => true # See Concept.instance
|
@@ -255,20 +261,20 @@ module ActiveFacts
|
|
255
261
|
has_one :population, :mandatory => true # See Population.all_instance
|
256
262
|
has_one :value # See Value.all_instance
|
257
263
|
end
|
258
|
-
|
264
|
+
|
259
265
|
class LinkFactType < FactType
|
260
266
|
end
|
261
|
-
|
267
|
+
|
262
268
|
class Location
|
263
269
|
identified_by :x, :y
|
264
270
|
has_one :x, :mandatory => true # See X.all_location
|
265
271
|
has_one :y, :mandatory => true # See Y.all_location
|
266
272
|
end
|
267
|
-
|
273
|
+
|
268
274
|
class Mapping < Component
|
269
275
|
has_one :object_type, :mandatory => true # See ObjectType.all_mapping
|
270
276
|
end
|
271
|
-
|
277
|
+
|
272
278
|
class PresenceConstraint < Constraint
|
273
279
|
maybe :is_mandatory
|
274
280
|
maybe :is_preferred_identifier
|
@@ -276,12 +282,12 @@ module ActiveFacts
|
|
276
282
|
has_one :min_frequency, :class => Frequency # See Frequency.all_presence_constraint_as_min_frequency
|
277
283
|
has_one :role_sequence, :mandatory => true # See RoleSequence.all_presence_constraint
|
278
284
|
end
|
279
|
-
|
285
|
+
|
280
286
|
class Query
|
281
287
|
identified_by :concept
|
282
288
|
one_to_one :concept, :mandatory => true # See Concept.query
|
283
289
|
end
|
284
|
-
|
290
|
+
|
285
291
|
class Reading
|
286
292
|
identified_by :fact_type, :ordinal
|
287
293
|
has_one :fact_type, :mandatory => true # See FactType.all_reading
|
@@ -290,13 +296,13 @@ module ActiveFacts
|
|
290
296
|
has_one :role_sequence, :mandatory => true # See RoleSequence.all_reading
|
291
297
|
has_one :text, :mandatory => true # See Text.all_reading
|
292
298
|
end
|
293
|
-
|
299
|
+
|
294
300
|
class RingConstraint < Constraint
|
295
301
|
has_one :other_role, :class => "Role" # See Role.all_ring_constraint_as_other_role
|
296
302
|
has_one :ring_type, :mandatory => true # See RingType.all_ring_constraint
|
297
303
|
has_one :role # See Role.all_ring_constraint
|
298
304
|
end
|
299
|
-
|
305
|
+
|
300
306
|
class Role
|
301
307
|
identified_by :fact_type, :ordinal
|
302
308
|
one_to_one :concept, :mandatory => true # See Concept.role
|
@@ -306,13 +312,13 @@ module ActiveFacts
|
|
306
312
|
has_one :ordinal, :mandatory => true # See Ordinal.all_role
|
307
313
|
has_one :role_name, :class => Name # See Name.all_role_as_role_name
|
308
314
|
end
|
309
|
-
|
315
|
+
|
310
316
|
class RoleSequence
|
311
317
|
identified_by :guid
|
312
318
|
one_to_one :guid, :mandatory => true # See Guid.role_sequence
|
313
319
|
maybe :has_unused_dependency_to_force_table_in_norma
|
314
320
|
end
|
315
|
-
|
321
|
+
|
316
322
|
class RoleValue
|
317
323
|
identified_by :fact, :role
|
318
324
|
has_one :fact, :mandatory => true # See Fact.all_role_value
|
@@ -320,13 +326,13 @@ module ActiveFacts
|
|
320
326
|
has_one :population, :mandatory => true # See Population.all_role_value
|
321
327
|
has_one :role, :mandatory => true # See Role.all_role_value
|
322
328
|
end
|
323
|
-
|
329
|
+
|
324
330
|
class Scoping < Mapping
|
325
331
|
end
|
326
|
-
|
332
|
+
|
327
333
|
class SetConstraint < Constraint
|
328
334
|
end
|
329
|
-
|
335
|
+
|
330
336
|
class Shape
|
331
337
|
identified_by :guid
|
332
338
|
one_to_one :guid, :mandatory => true # See Guid.shape
|
@@ -334,7 +340,7 @@ module ActiveFacts
|
|
334
340
|
has_one :location # See Location.all_shape
|
335
341
|
has_one :orm_diagram, :class => "ORMDiagram", :mandatory => true # See ORMDiagram.all_shape
|
336
342
|
end
|
337
|
-
|
343
|
+
|
338
344
|
class Step
|
339
345
|
identified_by :guid
|
340
346
|
has_one :alternative_set # See AlternativeSet.all_step
|
@@ -343,17 +349,17 @@ module ActiveFacts
|
|
343
349
|
maybe :is_disallowed
|
344
350
|
maybe :is_optional
|
345
351
|
end
|
346
|
-
|
352
|
+
|
347
353
|
class SubsetConstraint < SetConstraint
|
348
354
|
has_one :subset_role_sequence, :class => RoleSequence, :mandatory => true # See RoleSequence.all_subset_constraint_as_subset_role_sequence
|
349
355
|
has_one :superset_role_sequence, :class => RoleSequence, :mandatory => true # See RoleSequence.all_subset_constraint_as_superset_role_sequence
|
350
356
|
end
|
351
|
-
|
357
|
+
|
352
358
|
class Topic
|
353
359
|
identified_by :topic_name
|
354
360
|
one_to_one :topic_name, :class => Name, :mandatory => true # See Name.topic_as_topic_name
|
355
361
|
end
|
356
|
-
|
362
|
+
|
357
363
|
class Unit
|
358
364
|
identified_by :concept
|
359
365
|
has_one :coefficient # See Coefficient.all_unit
|
@@ -365,7 +371,7 @@ module ActiveFacts
|
|
365
371
|
one_to_one :plural_name, :class => Name, :counterpart => :plural_named_unit # See Name.plural_named_unit
|
366
372
|
has_one :vocabulary, :mandatory => true # See Vocabulary.all_unit
|
367
373
|
end
|
368
|
-
|
374
|
+
|
369
375
|
class Value
|
370
376
|
identified_by :literal, :is_literal_string, :unit
|
371
377
|
maybe :is_literal_string
|
@@ -373,12 +379,12 @@ module ActiveFacts
|
|
373
379
|
has_one :unit # See Unit.all_value
|
374
380
|
has_one :value_type, :mandatory => true # See ValueType.all_value
|
375
381
|
end
|
376
|
-
|
382
|
+
|
377
383
|
class ValueConstraint < Constraint
|
378
384
|
has_one :regular_expression # See RegularExpression.all_value_constraint
|
379
385
|
one_to_one :role, :counterpart => :role_value_constraint # See Role.role_value_constraint
|
380
386
|
end
|
381
|
-
|
387
|
+
|
382
388
|
class Variable
|
383
389
|
identified_by :query, :ordinal
|
384
390
|
has_one :object_type, :mandatory => true # See ObjectType.all_variable
|
@@ -390,109 +396,111 @@ module ActiveFacts
|
|
390
396
|
has_one :subscript # See Subscript.all_variable
|
391
397
|
has_one :value # See Value.all_variable
|
392
398
|
end
|
393
|
-
|
399
|
+
|
394
400
|
class Vocabulary
|
395
401
|
identified_by :name
|
396
402
|
one_to_one :name, :mandatory => true # See Name.vocabulary
|
397
403
|
end
|
398
|
-
|
404
|
+
|
399
405
|
class Absorption < Mapping
|
400
406
|
one_to_one :absorption, :counterpart => :reverse_absorption # See Absorption.reverse_absorption
|
401
407
|
has_one :child_role, :class => Role, :mandatory => true # See Role.all_absorption_as_child_role
|
402
408
|
maybe :flattens
|
409
|
+
has_one :nesting_mode # See NestingMode.all_absorption
|
403
410
|
has_one :parent_role, :class => Role, :mandatory => true # See Role.all_absorption_as_parent_role
|
404
411
|
one_to_one :reverse_absorption, :class => Absorption # See Absorption.absorption_as_reverse_absorption
|
405
412
|
end
|
406
|
-
|
413
|
+
|
407
414
|
class Aggregation
|
408
415
|
identified_by :aggregate, :aggregated_variable
|
409
416
|
has_one :aggregate, :mandatory => true # See Aggregate.all_aggregation
|
410
417
|
has_one :aggregated_variable, :class => Variable, :mandatory => true # See Variable.all_aggregation_as_aggregated_variable
|
411
418
|
has_one :variable, :mandatory => true # See Variable.all_aggregation
|
412
419
|
end
|
413
|
-
|
420
|
+
|
414
421
|
class Agreement
|
415
422
|
identified_by :context_note
|
416
423
|
one_to_one :context_note, :mandatory => true # See ContextNote.agreement
|
417
424
|
has_one :date # See Date.all_agreement
|
418
425
|
end
|
419
|
-
|
426
|
+
|
420
427
|
class Bound
|
421
428
|
identified_by :value, :is_inclusive
|
422
429
|
maybe :is_inclusive
|
423
430
|
has_one :value, :mandatory => true # See Value.all_bound
|
424
431
|
end
|
425
|
-
|
432
|
+
|
426
433
|
class Composite
|
427
434
|
identified_by :mapping
|
428
435
|
has_one :composition, :mandatory => true # See Composition.all_composite
|
429
436
|
one_to_one :mapping, :mandatory => true # See Mapping.composite
|
430
437
|
end
|
431
|
-
|
438
|
+
|
432
439
|
class ConstraintShape < Shape
|
433
440
|
has_one :constraint, :mandatory => true # See Constraint.all_constraint_shape
|
434
441
|
end
|
435
|
-
|
442
|
+
|
436
443
|
class ContextAccordingTo
|
437
444
|
identified_by :context_note, :agent
|
438
445
|
has_one :agent, :mandatory => true # See Agent.all_context_according_to
|
439
446
|
has_one :context_note, :mandatory => true # See ContextNote.all_context_according_to
|
440
447
|
has_one :date # See Date.all_context_according_to
|
441
448
|
end
|
442
|
-
|
449
|
+
|
443
450
|
class ContextAgreedBy
|
444
451
|
identified_by :agreement, :agent
|
445
452
|
has_one :agent, :mandatory => true # See Agent.all_context_agreed_by
|
446
453
|
has_one :agreement, :mandatory => true # See Agreement.all_context_agreed_by
|
447
454
|
end
|
448
|
-
|
455
|
+
|
449
456
|
class Derivation
|
450
457
|
identified_by :derived_unit, :base_unit
|
451
458
|
has_one :base_unit, :class => Unit, :mandatory => true # See Unit.all_derivation_as_base_unit
|
452
459
|
has_one :derived_unit, :class => Unit, :mandatory => true # See Unit.all_derivation_as_derived_unit
|
453
460
|
has_one :exponent # See Exponent.all_derivation
|
454
461
|
end
|
455
|
-
|
462
|
+
|
456
463
|
class Diagram
|
457
464
|
identified_by :vocabulary, :name
|
458
465
|
has_one :name, :mandatory => true # See Name.all_diagram
|
459
466
|
has_one :vocabulary, :mandatory => true # See Vocabulary.all_diagram
|
460
467
|
end
|
461
|
-
|
468
|
+
|
462
469
|
class DiscriminatedRole
|
463
470
|
identified_by :discriminator, :role
|
464
471
|
has_one :discriminator, :mandatory => true # See Discriminator.all_discriminated_role
|
465
472
|
has_one :role, :mandatory => true # See Role.all_discriminated_role
|
466
473
|
has_one :value, :mandatory => true # See Value.all_discriminated_role
|
467
474
|
end
|
468
|
-
|
475
|
+
|
469
476
|
class FactTypeShape < Shape
|
470
477
|
has_one :display_role_names_setting # See DisplayRoleNamesSetting.all_fact_type_shape
|
471
478
|
has_one :fact_type, :mandatory => true # See FactType.all_fact_type_shape
|
472
479
|
has_one :rotation_setting # See RotationSetting.all_fact_type_shape
|
473
480
|
end
|
474
|
-
|
481
|
+
|
475
482
|
class Injection < Mapping
|
476
483
|
end
|
477
|
-
|
484
|
+
|
478
485
|
class MirrorRole < Role
|
479
486
|
one_to_one :base_role, :class => Role # See Role.mirror_role_as_base_role
|
480
487
|
end
|
481
|
-
|
488
|
+
|
482
489
|
class ModelNoteShape < Shape
|
483
490
|
has_one :context_note, :mandatory => true # See ContextNote.all_model_note_shape
|
484
491
|
end
|
485
|
-
|
492
|
+
|
486
493
|
class Nesting
|
487
494
|
identified_by :absorption, :ordinal
|
488
495
|
has_one :absorption, :mandatory => true # See Absorption.all_nesting
|
489
496
|
has_one :index_role, :class => Role, :mandatory => true # See Role.all_nesting_as_index_role
|
490
497
|
has_one :ordinal, :mandatory => true # See Ordinal.all_nesting
|
498
|
+
has_one :key_name, :class => Name # See Name.all_nesting_as_key_name
|
491
499
|
end
|
492
|
-
|
500
|
+
|
493
501
|
class ORMDiagram < Diagram
|
494
502
|
end
|
495
|
-
|
503
|
+
|
496
504
|
class ObjectType
|
497
505
|
identified_by :vocabulary, :name
|
498
506
|
one_to_one :concept, :mandatory => true # See Concept.object_type
|
@@ -501,16 +509,16 @@ module ActiveFacts
|
|
501
509
|
has_one :pronoun # See Pronoun.all_object_type
|
502
510
|
has_one :vocabulary, :mandatory => true # See Vocabulary.all_object_type
|
503
511
|
end
|
504
|
-
|
512
|
+
|
505
513
|
class ObjectTypeShape < Shape
|
506
514
|
maybe :has_expanded_reference_mode
|
507
515
|
has_one :object_type, :mandatory => true # See ObjectType.all_object_type_shape
|
508
516
|
end
|
509
|
-
|
517
|
+
|
510
518
|
class ObjectifiedFactTypeNameShape < Shape
|
511
519
|
one_to_one :fact_type_shape, :mandatory => true # See FactTypeShape.objectified_fact_type_name_shape
|
512
520
|
end
|
513
|
-
|
521
|
+
|
514
522
|
class Play
|
515
523
|
identified_by :step, :role
|
516
524
|
has_one :role, :mandatory => true # See Role.all_play
|
@@ -518,34 +526,34 @@ module ActiveFacts
|
|
518
526
|
has_one :variable, :mandatory => true # See Variable.all_play
|
519
527
|
maybe :is_input
|
520
528
|
end
|
521
|
-
|
529
|
+
|
522
530
|
class Population
|
523
531
|
identified_by :vocabulary, :name
|
524
532
|
one_to_one :concept, :mandatory => true # See Concept.population
|
525
533
|
has_one :name, :mandatory => true # See Name.all_population
|
526
534
|
has_one :vocabulary # See Vocabulary.all_population
|
527
535
|
end
|
528
|
-
|
536
|
+
|
529
537
|
class ReadingShape < Shape
|
530
538
|
one_to_one :fact_type_shape, :mandatory => true # See FactTypeShape.reading_shape
|
531
539
|
has_one :reading, :mandatory => true # See Reading.all_reading_shape
|
532
540
|
end
|
533
|
-
|
541
|
+
|
534
542
|
class RingConstraintShape < ConstraintShape
|
535
543
|
has_one :fact_type_shape, :mandatory => true # See FactTypeShape.all_ring_constraint_shape
|
536
544
|
end
|
537
|
-
|
545
|
+
|
538
546
|
class RoleDisplay
|
539
547
|
identified_by :fact_type_shape, :ordinal
|
540
548
|
has_one :fact_type_shape, :mandatory => true # See FactTypeShape.all_role_display
|
541
549
|
has_one :ordinal, :mandatory => true # See Ordinal.all_role_display
|
542
550
|
has_one :role, :mandatory => true # See Role.all_role_display
|
543
551
|
end
|
544
|
-
|
552
|
+
|
545
553
|
class RoleNameShape < Shape
|
546
554
|
one_to_one :role_display, :mandatory => true # See RoleDisplay.role_name_shape
|
547
555
|
end
|
548
|
-
|
556
|
+
|
549
557
|
class RoleRef
|
550
558
|
identified_by :role_sequence, :ordinal
|
551
559
|
has_one :ordinal, :mandatory => true # See Ordinal.all_role_ref
|
@@ -555,48 +563,51 @@ module ActiveFacts
|
|
555
563
|
one_to_one :play # See Play.role_ref
|
556
564
|
has_one :trailing_adjective, :class => Adjective # See Adjective.all_role_ref_as_trailing_adjective
|
557
565
|
end
|
558
|
-
|
566
|
+
|
559
567
|
class SetComparisonConstraint < SetConstraint
|
560
568
|
end
|
561
|
-
|
569
|
+
|
562
570
|
class SetComparisonRoles
|
563
571
|
identified_by :set_comparison_constraint, :ordinal
|
564
572
|
has_one :ordinal, :mandatory => true # See Ordinal.all_set_comparison_roles
|
565
573
|
has_one :role_sequence, :mandatory => true # See RoleSequence.all_set_comparison_roles
|
566
574
|
has_one :set_comparison_constraint, :mandatory => true # See SetComparisonConstraint.all_set_comparison_roles
|
567
575
|
end
|
568
|
-
|
576
|
+
|
569
577
|
class SetEqualityConstraint < SetComparisonConstraint
|
570
578
|
end
|
571
|
-
|
579
|
+
|
572
580
|
class SetExclusionConstraint < SetComparisonConstraint
|
573
581
|
maybe :is_mandatory
|
574
582
|
end
|
575
|
-
|
583
|
+
|
576
584
|
class ValueConstraintShape < ConstraintShape
|
577
585
|
has_one :object_type_shape # See ObjectTypeShape.all_value_constraint_shape
|
578
586
|
one_to_one :role_display # See RoleDisplay.value_constraint_shape
|
579
587
|
end
|
580
|
-
|
588
|
+
|
589
|
+
class ValueField < Injection
|
590
|
+
end
|
591
|
+
|
581
592
|
class ValueRange
|
582
593
|
identified_by :minimum_bound, :maximum_bound
|
583
594
|
has_one :maximum_bound, :class => Bound # See Bound.all_value_range_as_maximum_bound
|
584
595
|
has_one :minimum_bound, :class => Bound # See Bound.all_value_range_as_minimum_bound
|
585
596
|
end
|
586
|
-
|
597
|
+
|
587
598
|
class AllowedRange
|
588
599
|
identified_by :value_constraint, :value_range
|
589
600
|
has_one :value_constraint, :mandatory => true # See ValueConstraint.all_allowed_range
|
590
601
|
has_one :value_range, :mandatory => true # See ValueRange.all_allowed_range
|
591
602
|
end
|
592
|
-
|
603
|
+
|
593
604
|
class DomainObjectType < ObjectType
|
594
605
|
end
|
595
|
-
|
606
|
+
|
596
607
|
class EntityType < DomainObjectType
|
597
608
|
one_to_one :fact_type # See FactType.entity_type
|
598
609
|
end
|
599
|
-
|
610
|
+
|
600
611
|
class TypeInheritance < FactType
|
601
612
|
identified_by :subtype, :supertype
|
602
613
|
has_one :subtype, :class => EntityType, :mandatory => true # See EntityType.all_type_inheritance_as_subtype
|
@@ -604,7 +615,7 @@ module ActiveFacts
|
|
604
615
|
has_one :assimilation # See Assimilation.all_type_inheritance
|
605
616
|
maybe :provides_identification
|
606
617
|
end
|
607
|
-
|
618
|
+
|
608
619
|
class ValueType < DomainObjectType
|
609
620
|
has_one :length # See Length.all_value_type
|
610
621
|
has_one :scale # See Scale.all_value_type
|
@@ -613,20 +624,20 @@ module ActiveFacts
|
|
613
624
|
has_one :unit # See Unit.all_value_type
|
614
625
|
one_to_one :value_constraint # See ValueConstraint.value_type
|
615
626
|
end
|
616
|
-
|
627
|
+
|
617
628
|
class ValueTypeParameter
|
618
629
|
identified_by :value_type, :name
|
619
630
|
has_one :name, :mandatory => true # See Name.all_value_type_parameter
|
620
631
|
has_one :value_type, :mandatory => true # See ValueType.all_value_type_parameter
|
621
632
|
has_one :facet_value_type, :class => ValueType, :mandatory => true # See ValueType.all_value_type_parameter_as_facet_value_type
|
622
633
|
end
|
623
|
-
|
634
|
+
|
624
635
|
class ValueTypeParameterRestriction
|
625
636
|
identified_by :value_type, :value_type_parameter
|
626
637
|
has_one :value_type, :mandatory => true # See ValueType.all_value_type_parameter_restriction
|
627
638
|
has_one :value_type_parameter, :mandatory => true # See ValueTypeParameter.all_value_type_parameter_restriction
|
628
639
|
has_one :value, :mandatory => true # See Value.all_value_type_parameter_restriction
|
629
640
|
end
|
630
|
-
|
641
|
+
|
631
642
|
end
|
632
643
|
end
|