activefacts 1.6.0 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +14 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +60 -0
  8. data/Rakefile +3 -80
  9. data/activefacts.gemspec +36 -0
  10. data/bin/afgen +4 -2
  11. data/bin/cql +5 -1
  12. data/lib/activefacts.rb +3 -12
  13. data/lib/activefacts/{vocabulary/query_evaluator.rb → query/evaluator.rb} +0 -0
  14. data/lib/activefacts/version.rb +2 -2
  15. metadata +48 -296
  16. data/History.txt +0 -4
  17. data/LICENSE +0 -19
  18. data/Manifest.txt +0 -165
  19. data/README.rdoc +0 -81
  20. data/css/offline.css +0 -3
  21. data/css/orm2.css +0 -124
  22. data/css/print.css +0 -8
  23. data/css/style-print.css +0 -357
  24. data/css/style.css +0 -387
  25. data/download.html +0 -110
  26. data/examples/CQL/Address.cql +0 -44
  27. data/examples/CQL/Blog.cql +0 -54
  28. data/examples/CQL/CompanyDirectorEmployee.cql +0 -56
  29. data/examples/CQL/Death.cql +0 -17
  30. data/examples/CQL/Diplomacy.cql +0 -48
  31. data/examples/CQL/Genealogy.cql +0 -98
  32. data/examples/CQL/Insurance.cql +0 -320
  33. data/examples/CQL/Marriage.cql +0 -18
  34. data/examples/CQL/Metamodel.cql +0 -493
  35. data/examples/CQL/Monogamy.cql +0 -24
  36. data/examples/CQL/MultiInheritance.cql +0 -22
  37. data/examples/CQL/NonRoleId.cql +0 -14
  38. data/examples/CQL/OddIdentifier.cql +0 -18
  39. data/examples/CQL/OilSupply.cql +0 -53
  40. data/examples/CQL/OneToOnes.cql +0 -17
  41. data/examples/CQL/Orienteering.cql +0 -111
  42. data/examples/CQL/PersonPlaysGame.cql +0 -18
  43. data/examples/CQL/RedundantDependency.cql +0 -34
  44. data/examples/CQL/SchoolActivities.cql +0 -33
  45. data/examples/CQL/SeparateSubtype.cql +0 -30
  46. data/examples/CQL/ServiceDirector.cql +0 -276
  47. data/examples/CQL/SimplestUnary.cql +0 -12
  48. data/examples/CQL/Supervision.cql +0 -34
  49. data/examples/CQL/WaiterTips.cql +0 -33
  50. data/examples/CQL/Warehousing.cql +0 -101
  51. data/examples/CQL/WindowInRoomInBldg.cql +0 -28
  52. data/examples/CQL/unit.cql +0 -474
  53. data/examples/index.html +0 -420
  54. data/examples/intro.html +0 -327
  55. data/examples/local.css +0 -24
  56. data/index.html +0 -111
  57. data/lib/activefacts/cql.rb +0 -35
  58. data/lib/activefacts/cql/CQLParser.treetop +0 -158
  59. data/lib/activefacts/cql/Context.treetop +0 -48
  60. data/lib/activefacts/cql/Expressions.treetop +0 -67
  61. data/lib/activefacts/cql/FactTypes.treetop +0 -358
  62. data/lib/activefacts/cql/Language/English.treetop +0 -315
  63. data/lib/activefacts/cql/LexicalRules.treetop +0 -253
  64. data/lib/activefacts/cql/ObjectTypes.treetop +0 -210
  65. data/lib/activefacts/cql/Rakefile +0 -14
  66. data/lib/activefacts/cql/Terms.treetop +0 -183
  67. data/lib/activefacts/cql/ValueTypes.treetop +0 -202
  68. data/lib/activefacts/cql/compiler.rb +0 -156
  69. data/lib/activefacts/cql/compiler/clause.rb +0 -1137
  70. data/lib/activefacts/cql/compiler/constraint.rb +0 -581
  71. data/lib/activefacts/cql/compiler/entity_type.rb +0 -457
  72. data/lib/activefacts/cql/compiler/expression.rb +0 -443
  73. data/lib/activefacts/cql/compiler/fact.rb +0 -390
  74. data/lib/activefacts/cql/compiler/fact_type.rb +0 -421
  75. data/lib/activefacts/cql/compiler/query.rb +0 -106
  76. data/lib/activefacts/cql/compiler/shared.rb +0 -161
  77. data/lib/activefacts/cql/compiler/value_type.rb +0 -174
  78. data/lib/activefacts/cql/nodes.rb +0 -49
  79. data/lib/activefacts/cql/parser.rb +0 -241
  80. data/lib/activefacts/dependency_analyser.rb +0 -182
  81. data/lib/activefacts/generate/absorption.rb +0 -70
  82. data/lib/activefacts/generate/composition.rb +0 -118
  83. data/lib/activefacts/generate/cql.rb +0 -714
  84. data/lib/activefacts/generate/dm.rb +0 -279
  85. data/lib/activefacts/generate/help.rb +0 -64
  86. data/lib/activefacts/generate/helpers/inject.rb +0 -16
  87. data/lib/activefacts/generate/helpers/oo.rb +0 -162
  88. data/lib/activefacts/generate/helpers/ordered.rb +0 -605
  89. data/lib/activefacts/generate/helpers/rails.rb +0 -57
  90. data/lib/activefacts/generate/html/glossary.rb +0 -461
  91. data/lib/activefacts/generate/json.rb +0 -337
  92. data/lib/activefacts/generate/null.rb +0 -32
  93. data/lib/activefacts/generate/rails/models.rb +0 -246
  94. data/lib/activefacts/generate/rails/schema.rb +0 -216
  95. data/lib/activefacts/generate/records.rb +0 -46
  96. data/lib/activefacts/generate/ruby.rb +0 -133
  97. data/lib/activefacts/generate/sql/mysql.rb +0 -280
  98. data/lib/activefacts/generate/sql/server.rb +0 -273
  99. data/lib/activefacts/generate/stats.rb +0 -69
  100. data/lib/activefacts/generate/text.rb +0 -27
  101. data/lib/activefacts/generate/topics.rb +0 -265
  102. data/lib/activefacts/generate/traits/datavault.rb +0 -241
  103. data/lib/activefacts/generate/traits/oo.rb +0 -73
  104. data/lib/activefacts/generate/traits/ordered.rb +0 -33
  105. data/lib/activefacts/generate/traits/ruby.rb +0 -210
  106. data/lib/activefacts/generate/transform/datavault.rb +0 -266
  107. data/lib/activefacts/generate/transform/surrogate.rb +0 -214
  108. data/lib/activefacts/generate/version.rb +0 -26
  109. data/lib/activefacts/input/cql.rb +0 -43
  110. data/lib/activefacts/input/orm.rb +0 -1636
  111. data/lib/activefacts/mapping/rails.rb +0 -132
  112. data/lib/activefacts/persistence.rb +0 -15
  113. data/lib/activefacts/persistence/columns.rb +0 -446
  114. data/lib/activefacts/persistence/foreignkey.rb +0 -187
  115. data/lib/activefacts/persistence/index.rb +0 -240
  116. data/lib/activefacts/persistence/object_type.rb +0 -198
  117. data/lib/activefacts/persistence/reference.rb +0 -434
  118. data/lib/activefacts/persistence/tables.rb +0 -380
  119. data/lib/activefacts/registry.rb +0 -11
  120. data/lib/activefacts/support.rb +0 -132
  121. data/lib/activefacts/vocabulary.rb +0 -9
  122. data/lib/activefacts/vocabulary/extensions.rb +0 -1348
  123. data/lib/activefacts/vocabulary/metamodel.rb +0 -570
  124. data/lib/activefacts/vocabulary/verbaliser.rb +0 -804
  125. data/script/txt2html +0 -71
  126. data/spec/absorption_spec.rb +0 -95
  127. data/spec/cql/comparison_spec.rb +0 -89
  128. data/spec/cql/context_spec.rb +0 -94
  129. data/spec/cql/contractions_spec.rb +0 -224
  130. data/spec/cql/deontic_spec.rb +0 -88
  131. data/spec/cql/entity_type_spec.rb +0 -320
  132. data/spec/cql/expressions_spec.rb +0 -66
  133. data/spec/cql/fact_type_matching_spec.rb +0 -338
  134. data/spec/cql/french_spec.rb +0 -21
  135. data/spec/cql/parser/bad_literals_spec.rb +0 -86
  136. data/spec/cql/parser/constraints_spec.rb +0 -19
  137. data/spec/cql/parser/entity_types_spec.rb +0 -106
  138. data/spec/cql/parser/expressions_spec.rb +0 -199
  139. data/spec/cql/parser/fact_types_spec.rb +0 -44
  140. data/spec/cql/parser/literals_spec.rb +0 -312
  141. data/spec/cql/parser/pragmas_spec.rb +0 -89
  142. data/spec/cql/parser/value_types_spec.rb +0 -42
  143. data/spec/cql/role_matching_spec.rb +0 -148
  144. data/spec/cql/samples_spec.rb +0 -244
  145. data/spec/cql_cql_spec.rb +0 -73
  146. data/spec/cql_dm_spec.rb +0 -136
  147. data/spec/cql_mysql_spec.rb +0 -69
  148. data/spec/cql_parse_spec.rb +0 -34
  149. data/spec/cql_ruby_spec.rb +0 -73
  150. data/spec/cql_sql_spec.rb +0 -72
  151. data/spec/cql_symbol_tables_spec.rb +0 -261
  152. data/spec/cqldump_spec.rb +0 -170
  153. data/spec/helpers/array_matcher.rb +0 -23
  154. data/spec/helpers/ctrl_c_support.rb +0 -52
  155. data/spec/helpers/diff_matcher.rb +0 -39
  156. data/spec/helpers/file_matcher.rb +0 -34
  157. data/spec/helpers/parse_to_ast_matcher.rb +0 -80
  158. data/spec/helpers/string_matcher.rb +0 -30
  159. data/spec/helpers/test_parser.rb +0 -15
  160. data/spec/norma_cql_spec.rb +0 -66
  161. data/spec/norma_ruby_spec.rb +0 -62
  162. data/spec/norma_ruby_sql_spec.rb +0 -107
  163. data/spec/norma_sql_spec.rb +0 -57
  164. data/spec/norma_tables_spec.rb +0 -95
  165. data/spec/ruby_api_spec.rb +0 -23
  166. data/spec/spec_helper.rb +0 -35
  167. data/spec/transform_surrogate_spec.rb +0 -59
  168. data/status.html +0 -138
  169. data/why.html +0 -60
@@ -1,261 +0,0 @@
1
- #
2
- # ActiveFacts tests: Test the CQL parser by looking at its parse trees.
3
- # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
- #
5
-
6
- =begin
7
-
8
- require 'activefacts/support'
9
- require 'activefacts/api/support'
10
- require 'activefacts/input/cql'
11
-
12
- describe "CQL Symbol table" do
13
-
14
- # A Form here is a form of reference to a object_type, being a name and optional adjectives, possibly designated by a role name:
15
- # Struct.new("Form", :object_type, :name, :leading_adjective, :trailing_adjective, :role_name)
16
- # def initialize(constellation, vocabulary)
17
- # def bind(words, leading_adjective = nil, trailing_adjective = nil, role_name = nil, allowed_forward = false, leading_speculative = false, trailing_speculative = false)
18
-
19
- before :each do
20
- include ActiveFacts::Input::CQL
21
- @constellation = ActiveFacts::API::Constellation.new(ActiveFacts::Metamodel)
22
- @vocabulary = @constellation.Vocabulary("Test")
23
- @symbols = ActiveFacts::CQL::Compiler::SymbolTable.new(@constellation, @vocabulary)
24
- end
25
-
26
- Definitions = [
27
- [ "predefined value type",
28
- ["Date"],
29
- ["Date", nil, nil, nil]],
30
- [ "predefined value type as word array",
31
- [["Date"]],
32
- ["Date", nil, nil, nil]],
33
- [ "predefined value type with inline leading adjective",
34
- [["Birth", "Date"]],
35
- ["Date", "Birth", nil, nil]],
36
- [ "predefined value types with inline trailing adjective",
37
- [["Date", "OfBirth"]],
38
- ["Date", nil, "OfBirth", nil]],
39
- [ "predefined value type with two inline adjectives",
40
- [["Second", "Birth", "Date"]],
41
- nil], # Illegal
42
- [ "predefined value type with defined leading adjective",
43
- ["Date", "Birth"],
44
- ["Date", "Birth", nil, nil]],
45
- [ "predefined value types with defined trailing adjective",
46
- ["Date", nil, "OfBirth"],
47
- ["Date", nil, "OfBirth", nil]],
48
- [ "predefined value type with inline and defined leading adjective",
49
- [["Second", "Date"], "Birth"],
50
- nil], # Illegal
51
- [ "predefined value types with inline and defined trailing adjective",
52
- [["Second", "Date"], nil, "OfBirth"],
53
- nil], # Illegal
54
-
55
- [ "predefined type with role name",
56
- ["Date", nil, nil, "BirthDate"],
57
- ["Date", nil, nil, "BirthDate"]],
58
-
59
- [ "forward-referenced type",
60
- ["Unknown", nil, nil, nil, true],
61
- ["Unknown", nil, nil, nil]],
62
- [ "forward-referenced type with inline adjective",
63
- [["Haha", "Unknown"], nil, nil, nil, true],
64
- nil], # Illegal
65
-
66
- [ "entity type",
67
- ["Person"],
68
- ["Person", nil, nil, nil]],
69
- [ "entity type as word array",
70
- [["Person"]],
71
- ["Person", nil, nil, nil]],
72
- [ "entity type with inline leading adjective",
73
- [["Birth", "Person"]],
74
- ["Person", "Birth", nil, nil]],
75
- [ "entity types with inline trailing adjective",
76
- [["Person", "OfBirth"]],
77
- ["Person", nil, "OfBirth", nil]],
78
- [ "entity type with two inline adjectives",
79
- [["Second", "Birth", "Person"]],
80
- nil], # Illegal
81
- [ "entity type with defined leading adjective",
82
- ["Person", "Birth"],
83
- ["Person", "Birth", nil, nil]],
84
- [ "entity types with defined trailing adjective",
85
- ["Person", nil, "OfBirth"],
86
- ["Person", nil, "OfBirth", nil]],
87
- [ "entity type with inline and defined leading adjective",
88
- [["Second", "Person"], "Birth"],
89
- nil], # Illegal
90
- [ "entity types with inline and defined trailing adjective",
91
- [["Second", "Person"], nil, "OfBirth"],
92
- nil], # Illegal
93
-
94
- [ "entity type with role name",
95
- ["Person", nil, nil, "Father"],
96
- ["Person", nil, nil, "Father"]],
97
- ]
98
-
99
- Definitions.each do |c|
100
- description, args, result = *c
101
-
102
- it "should define #{description}" do
103
- if result
104
- # Predefine an entity type, some cases use it:
105
- @constellation.EntityType(@vocabulary.identifying_role_values, "Person", :guid => :new)
106
-
107
- player, bound = @symbols.bind(*args)
108
- player.should_not be_nil
109
- player.should == bound.object_type
110
- [bound.name, bound.leading_adjective, bound.trailing_adjective, bound.role_name].should == result
111
- else
112
- lambda {player, bound = @symbols.bind(*args)}.should raise_error
113
- end
114
- end
115
- end
116
-
117
- it "should disallow binding to a role name where a leading adjective is provided" do
118
- object_type, = @symbols.bind("Name", nil, nil, "GivenName", true)
119
- lambda{player, bound = @symbols.bind("GivenName", "SomeAdj")}.should raise_error
120
- end
121
-
122
- it "should disallow binding to a role name where a trailing adjective is provided" do
123
- object_type, = @symbols.bind("Name", nil, nil, "GivenName", true)
124
- lambda{player, bound = @symbols.bind("GivenName", nil, "SomeAdj")}.should raise_error
125
- end
126
-
127
- it "should disallow binding to a role name and defining a new role name" do
128
- object_type, = @symbols.bind("Name", nil, nil, "GivenName", true)
129
- lambda{player, bound = @symbols.bind("GivenName", nil, nil, "SomeName")}.should raise_error
130
- end
131
-
132
- Predefined = [
133
- [ "Name", "Given", nil, nil, true ],
134
- [ "Nom", nil, "Donné", nil, true ],
135
- [ "Name", nil, nil, "GivenName", true ],
136
- [ "Simple", nil, nil, ],
137
- ]
138
-
139
- it "should allow adding a role name to an adjectival form without one" do
140
- object_type, = @symbols.bind("Name", "Given", nil, nil, true)
141
- player, bound = @symbols.bind("Name", nil, nil, "GivenName")
142
- player.should == object_type
143
- end
144
-
145
- it "should create new binding with a role name rather than binding to existing simple player without adjectives" do
146
- object_type, bare = @symbols.bind("Name", nil, nil, nil, true)
147
- player, bound = @symbols.bind("Name", nil, nil, "SomeAdj")
148
- bare.should_not == bound
149
- end
150
-
151
- it "should disallow adding a role name which is the name of an existing object_type" do
152
- object_type, = @symbols.bind("Name", "Given", nil, nil, true)
153
- lambda{player, bound = @symbols.bind("Name", "Given", nil, "Date")}.should raise_error
154
- end
155
-
156
- it "should disallow adding a role name to a role player that already has one" do
157
- object_type, first = @symbols.bind("Name", "Given", nil, "GivenName", true)
158
- player, bound = @symbols.bind("Name", "Given", nil, "FirstName")
159
- first.should_not == bound
160
- end
161
-
162
- it "should bind to an existing player without adjectives" do
163
- object_type, = @symbols.bind("Name", nil, nil, nil, true)
164
- player, bound = @symbols.bind("Name")
165
- player.should == object_type
166
- end
167
-
168
- it "should bind to an existing player using a leading adjective" do
169
- object_type, = @symbols.bind("Name", nil, nil, nil, true)
170
- player, bound = @symbols.bind("Name", "Given")
171
- player.should == object_type
172
- end
173
-
174
- it "should bind to an existing player using a trailing adjective" do
175
- object_type, = @symbols.bind("Name", nil, nil, nil, true)
176
- player, bound = @symbols.bind("Name", nil, "Donné")
177
- player.should == object_type
178
- end
179
-
180
- it "should bind to an existing player only using the defined leading adjective" do
181
- object_type, = @symbols.bind("Name", "Given", nil, nil, true)
182
- player, bound = @symbols.bind("Name", "Given")
183
- player.should == object_type
184
- forms = [bound]
185
-
186
- player, alt = @symbols.bind("Name")
187
- forms.should_not be_include(alt)
188
- forms << alt
189
-
190
- player, alt = @symbols.bind("Name", nil, "Donné")
191
- forms.should_not be_include(alt)
192
- forms << alt
193
-
194
- player, alt = @symbols.bind("Name", "Given", "Donné")
195
- forms.should_not be_include(alt)
196
- end
197
-
198
- it "should bind to an existing player only using a defined trailing adjective" do
199
- object_type, = @symbols.bind("Name", nil, "Donné", nil, true)
200
- player, bound = @symbols.bind("Name", nil, "Donné")
201
- player.should == object_type
202
- forms = [bound]
203
-
204
- player, alt = @symbols.bind("Name")
205
- forms.should_not be_include(alt)
206
- forms << alt
207
-
208
- player, alt = @symbols.bind("Name", "Given")
209
- forms.should_not be_include(alt)
210
- forms << alt
211
-
212
- player, alt = @symbols.bind("Name", "Given", "Donné")
213
- forms.should_not be_include(alt)
214
- end
215
-
216
- it "should bind to an existing player only using defined leading and trailing adjective" do
217
- object_type, = @symbols.bind("Name", "Given", "Donné", nil, true)
218
- player, bound = @symbols.bind("Name", "Given", "Donné")
219
- player.should == object_type
220
- forms = [bound]
221
-
222
- player, alt = @symbols.bind("Name")
223
- forms.should_not be_include(alt)
224
- forms << alt
225
-
226
- player, alt = @symbols.bind("Name", "Given")
227
- forms.should_not be_include(alt)
228
- forms << alt
229
-
230
- player, alt = @symbols.bind("Name", nil, "Donné")
231
- forms.should_not be_include(alt)
232
- end
233
-
234
- it "should bind to an existing player using a speculative leading adjective" do
235
- object_type, = @symbols.bind("Name", "Given", nil, nil, true)
236
- player, bound = @symbols.bind("Name", l = "Given", t = "Donné", nil, nil, true, true)
237
- player.should == object_type
238
- bound.leading_adjective.should == "Given"
239
- bound.trailing_adjective.should be_nil
240
- l.should be_empty
241
- t.should == "Donné"
242
- end
243
-
244
- it "should bind to an existing player using a speculative trailing adjective" do
245
- object_type, = @symbols.bind("Name", nil, "Donné", nil, true)
246
- player, bound = @symbols.bind("Name", l = "Given", t = "Donné", nil, nil, true, true)
247
- player.should == object_type
248
- l.should == "Given"
249
- t.should be_empty
250
- end
251
-
252
- it "should bind to an existing player using a speculative leading and trailing adjective" do
253
- object_type, = @symbols.bind("Name", "Given", "Donné", nil, true)
254
- player, bound = @symbols.bind("Name", l = "Given", t = "Donné", nil, nil, true, true)
255
- player.should == object_type
256
- l.should be_empty
257
- t.should be_empty
258
- end
259
-
260
- end
261
- =end
@@ -1,170 +0,0 @@
1
- #
2
- # ActiveFacts tests: Test the generated CQL for some simple cases.
3
- # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
- #
5
-
6
- require 'stringio'
7
- require 'activefacts'
8
- require 'activefacts/support'
9
- require 'activefacts/vocabulary'
10
- require 'activefacts/generate/cql'
11
-
12
- describe "CQL Dumper" do
13
- def self.hide(*a,&b)
14
- end
15
-
16
- before :each do
17
- @constellation = ActiveFacts::API::Constellation.new(ActiveFacts::Metamodel)
18
- @vocabulary = @constellation.Vocabulary("TestVocab")
19
- @string_type = @constellation.ValueType(@vocabulary, "String", :concept => :new)
20
- @integer_type = @constellation.ValueType(@vocabulary, "Integer", :concept => :new)
21
- @dumper = ActiveFacts::Generate::CQL.new(@constellation)
22
- end
23
-
24
- def cql
25
- output = StringIO.new
26
- @dumper.generate(output)
27
- output.rewind
28
- output.read
29
- end
30
-
31
- it "should dump a String ValueType" do
32
- vt = @constellation.ValueType(@vocabulary, "Name", :supertype => @string_type, :length => 20, :concept => :new)
33
- vt.supertype = @string_type
34
- vt.length = 20
35
- #p vt.class.roles.keys.sort_by{|s| s.to_s}
36
- #p vt.supertype
37
- cql.should == <<END
38
- vocabulary TestVocab;
39
-
40
- /*
41
- * Value Types
42
- */
43
- Name is written as String(20);
44
-
45
- END
46
- end
47
-
48
- it "should dump an Integer ValueType" do
49
- vt = @constellation.ValueType(@vocabulary, "Count", :supertype => @integer_type, :length => 32, :concept => :new)
50
- cql.should == <<END
51
- vocabulary TestVocab;
52
-
53
- /*
54
- * Value Types
55
- */
56
- Count is written as Integer(32);
57
-
58
- END
59
- end
60
-
61
- def value_type(name, datatype = "String", length = 0, scale = 0)
62
- dt = @constellation.ValueType[[@vocabulary.identifying_role_values, datatype]] ||
63
- @constellation.ValueType(@vocabulary, datatype, :concept => :new)
64
- vt = @constellation.ValueType[[@vocabulary.identifying_role_values, name]] ||
65
- @constellation.ValueType(@vocabulary, name, :supertype => dt, :concept => :new)
66
- vt.length = length if length != 0
67
- vt.scale = scale if scale != 0
68
- vt
69
- end
70
-
71
- def one_to_many(one, many, reading)
72
- # Combine them with a fact type:
73
- ft = @constellation.FactType(:new)
74
- role0 = @constellation.Role(ft, 0, :object_type => one, :concept => :new)
75
- role1 = @constellation.Role(ft, 1, :object_type => many, :concept => :new)
76
-
77
- # Make a role sequence:
78
- rs = @constellation.RoleSequence(:new)
79
- rr0 = @constellation.RoleRef(rs, 0, :role => role0)
80
- rr1 = @constellation.RoleRef(rs, 1, :role => role1)
81
-
82
- # Make a uniqueness constraint:
83
- pcrs = @constellation.RoleSequence(:new)
84
- @constellation.RoleRef(pcrs, 0, :role => role0)
85
- pc = @constellation.PresenceConstraint(:new, :is_mandatory => false, :is_preferred_identifier => false, :max_frequency => 1, :min_frequency => 0, :role_sequence => pcrs)
86
-
87
- # Make a new reading:
88
- reading = @constellation.Reading(ft, ft.all_reading.size, :role_sequence => rs, :text => reading)
89
-
90
- ft
91
- end
92
-
93
- def one_to_one(first, second, reading)
94
- # Combine them with a fact type:
95
- ft = @constellation.FactType(:new)
96
- role0 = @constellation.Role(ft, 0, :object_type => first, :concept => :new)
97
- role1 = @constellation.Role(ft, 1, :object_type => second, :concept => :new)
98
-
99
- # Make a role sequence for the reading
100
- rs = @constellation.RoleSequence(:new)
101
- rr0 = @constellation.RoleRef(rs, 0, :role => role0)
102
- rr1 = @constellation.RoleRef(rs, 1, :role => role1)
103
-
104
- # Make a new reading:
105
- reading = @constellation.Reading(ft, ft.all_reading.size, :role_sequence => rs, :text => reading)
106
-
107
- # Make a uniqueness constraint for the first role
108
- first_rs = @constellation.RoleSequence(:new)
109
- @constellation.RoleRef(first_rs, 0, :role => role0)
110
- first_pc = @constellation.PresenceConstraint(:new, :is_mandatory => true, :is_preferred_identifier => false, :max_frequency => 1, :min_frequency => 1, :role_sequence => first_rs)
111
-
112
- # Make a uniqueness constraint for the second role
113
- second_rs = @constellation.RoleSequence(:new)
114
- @constellation.RoleRef(second_rs, 0, :role => role1)
115
- second_pc = @constellation.PresenceConstraint(:new, :is_mandatory => true, :is_preferred_identifier => true, :max_frequency => 1, :min_frequency => 1, :role_sequence => second_rs)
116
-
117
- ft
118
- end
119
-
120
- it "should dump a VT-VT FactType" do
121
- # Make two valuetypes:
122
- st = value_type("Name", "String", 20)
123
- vt = value_type("Count", "Integer", 32)
124
-
125
- ft = one_to_many(st, vt, "{0} occurs {1} times")
126
-
127
- #puts @constellation.verbalise #; exit
128
-
129
- cql.should == <<END
130
- vocabulary TestVocab;
131
-
132
- /*
133
- * Value Types
134
- */
135
- Count is written as Integer(32);
136
- Name is written as String(20);
137
-
138
- /*
139
- * Fact Types
140
- */
141
- Name occurs Count times;
142
-
143
- END
144
- end
145
-
146
- it "should dump an named EntityType" do
147
- vt = @constellation.ValueType(@vocabulary, "Name", :supertype => @string_type, :length => 20, :concept => :new)
148
- et = @constellation.EntityType(@vocabulary, "Company", :concept => :new)
149
-
150
- ft = one_to_one(et, vt, "{0} is called {1}")
151
-
152
- cql.should == <<END
153
- vocabulary TestVocab;
154
-
155
- /*
156
- * Value Types
157
- */
158
- Name is written as String(20);
159
-
160
- /*
161
- * Entity Types
162
- */
163
- Company is identified by Name where
164
- Company is called Name;
165
-
166
- END
167
-
168
- end
169
-
170
- end
@@ -1,23 +0,0 @@
1
- RSpec::Matchers.define :be_different_array_from do |x|
2
- match do |actual|
3
- perform_match(actual, expected_as_array)
4
- @extra + @missing != []
5
- end
6
-
7
- def perform_match(actual, expected)
8
- @extra = actual - expected
9
- @missing = expected - actual
10
- end
11
-
12
- failure_message_for_should do |actual|
13
- "expected a difference in the two lists, but got none"
14
- end
15
-
16
- failure_message_for_should_not do |actual|
17
- "expected no difference, but result #{
18
- [ (@missing.empty? ? nil : 'lacks '+@missing.sort.inspect),
19
- (@extra.empty? ? nil : 'has extra '+@extra.sort.inspect)
20
- ].compact * ' and '
21
- }"
22
- end
23
- end