activefacts 0.7.2 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/Manifest.txt +1 -0
  2. data/Rakefile +3 -0
  3. data/bin/afgen +9 -3
  4. data/bin/cql +0 -0
  5. data/examples/CQL/Address.cql +7 -7
  6. data/examples/CQL/Blog.cql +8 -8
  7. data/examples/CQL/CompanyDirectorEmployee.cql +3 -3
  8. data/examples/CQL/Death.cql +2 -2
  9. data/examples/CQL/Genealogy.cql +21 -21
  10. data/examples/CQL/Marriage.cql +1 -1
  11. data/examples/CQL/Metamodel.cql +34 -29
  12. data/examples/CQL/MultiInheritance.cql +3 -3
  13. data/examples/CQL/OilSupply.cql +9 -9
  14. data/examples/CQL/Orienteering.cql +27 -27
  15. data/examples/CQL/PersonPlaysGame.cql +2 -2
  16. data/examples/CQL/SchoolActivities.cql +3 -3
  17. data/examples/CQL/SimplestUnary.cql +1 -1
  18. data/examples/CQL/SubtypePI.cql +4 -4
  19. data/examples/CQL/Warehousing.cql +12 -12
  20. data/examples/CQL/WindowInRoomInBldg.cql +4 -4
  21. data/lib/activefacts/api/concept.rb +3 -2
  22. data/lib/activefacts/api/constellation.rb +1 -1
  23. data/lib/activefacts/api/entity.rb +12 -1
  24. data/lib/activefacts/api/instance.rb +1 -1
  25. data/lib/activefacts/api/role.rb +1 -1
  26. data/lib/activefacts/api/standard_types.rb +9 -1
  27. data/lib/activefacts/api/support.rb +4 -0
  28. data/lib/activefacts/api/value.rb +1 -0
  29. data/lib/activefacts/api/vocabulary.rb +2 -59
  30. data/lib/activefacts/cql/DataTypes.treetop +10 -1
  31. data/lib/activefacts/cql/Expressions.treetop +1 -1
  32. data/lib/activefacts/cql/FactTypes.treetop +1 -1
  33. data/lib/activefacts/cql/Language/English.treetop +2 -2
  34. data/lib/activefacts/generate/absorption.rb +0 -2
  35. data/lib/activefacts/generate/cql.rb +6 -8
  36. data/lib/activefacts/generate/cql/html.rb +1 -1
  37. data/lib/activefacts/generate/oo.rb +60 -40
  38. data/lib/activefacts/generate/ordered.rb +30 -21
  39. data/lib/activefacts/generate/ruby.rb +38 -15
  40. data/lib/activefacts/generate/sql/mysql.rb +257 -0
  41. data/lib/activefacts/generate/sql/server.rb +0 -1
  42. data/lib/activefacts/input/cql.rb +0 -2
  43. data/lib/activefacts/persistence/columns.rb +51 -24
  44. data/lib/activefacts/persistence/concept.rb +158 -36
  45. data/lib/activefacts/persistence/reference.rb +13 -8
  46. data/lib/activefacts/support.rb +40 -2
  47. data/lib/activefacts/version.rb +1 -1
  48. data/lib/activefacts/vocabulary/extensions.rb +5 -6
  49. data/spec/absorption_spec.rb +8 -11
  50. data/spec/api/autocounter.rb +1 -1
  51. data/spec/api/constellation.rb +1 -1
  52. data/spec/api/entity_type.rb +1 -1
  53. data/spec/api/instance.rb +1 -1
  54. data/spec/api/roles.rb +1 -1
  55. data/spec/api/value_type.rb +1 -1
  56. data/spec/cql_cql_spec.rb +2 -4
  57. data/spec/cql_parse_spec.rb +2 -4
  58. data/spec/cql_ruby_spec.rb +2 -4
  59. data/spec/cql_sql_spec.rb +4 -4
  60. data/spec/cql_symbol_tables_spec.rb +1 -1
  61. data/spec/cql_unit_spec.rb +6 -6
  62. data/spec/cqldump_spec.rb +6 -6
  63. data/spec/norma_cql_spec.rb +2 -4
  64. data/spec/norma_ruby_spec.rb +2 -4
  65. data/spec/norma_sql_spec.rb +2 -4
  66. data/spec/norma_tables_spec.rb +4 -7
  67. metadata +29 -6
@@ -5,5 +5,5 @@
5
5
  # Copyright (c) 2009 Clifford Heath. Read the LICENSE file.
6
6
  #
7
7
  module ActiveFacts
8
- VERSION = '0.7.2'
8
+ VERSION = '0.7.3'
9
9
  end
@@ -88,7 +88,7 @@ module ActiveFacts
88
88
 
89
89
  # Two RoleRefs are equal if they have the same role and Joins with matching roles
90
90
  def ==(role_ref)
91
- RoleRef === role_ref &&
91
+ role_ref.is_a?(ActiveFacts::Metamodel::RoleRef) &&
92
92
  role_ref.role == role &&
93
93
  all_join.size == role_ref.all_join.size &&
94
94
  !all_join.sort_by{|j|j.join_step}.
@@ -119,7 +119,6 @@ module ActiveFacts
119
119
  end
120
120
 
121
121
  class EntityType
122
- include ActiveFacts
123
122
  def preferred_identifier
124
123
  if fact_type
125
124
 
@@ -161,7 +160,7 @@ module ActiveFacts
161
160
  end
162
161
  debug :pi, "Got PI #{pi.name||pi.object_id} for nested #{name}" if pi
163
162
  debug :pi, "Looking for PI on entity that nests this fact" unless pi
164
- raise "Oops, pi for nested fact is #{pi.class}" unless !pi || PresenceConstraint === pi
163
+ raise "Oops, pi for nested fact is #{pi.class}" unless !pi || pi.is_a?(ActiveFacts::Metamodel::PresenceConstraint)
165
164
  return pi if pi
166
165
  end
167
166
  end
@@ -228,7 +227,7 @@ module ActiveFacts
228
227
  }
229
228
  throw :pi, nil
230
229
  end
231
- raise "Oops, pi for entity is #{pi.class}" if pi && !(PresenceConstraint === pi)
230
+ raise "Oops, pi for entity is #{pi.class}" if pi && !pi.is_a?(ActiveFacts::Metamodel::PresenceConstraint)
232
231
  debug :pi, "Got PI #{pi.name||pi.object_id} for #{name}" if pi
233
232
 
234
233
  if !pi
@@ -332,8 +331,8 @@ module ActiveFacts
332
331
  la = ta = nil # When using role names, don't add adjectives
333
332
  end
334
333
  fc = frequency_constraints[i]
335
- fc = fc.frequency if fc && PresenceConstraint === fc
336
- if Array === fc
334
+ fc = fc.frequency if fc && fc.is_a?(ActiveFacts::Metamodel::PresenceConstraint)
335
+ if fc.is_a?(Array)
337
336
  fc, player_name = *fc
338
337
  else
339
338
  player_name = player.name
@@ -12,11 +12,11 @@ require 'activefacts/persistence'
12
12
  describe "Absorption" do
13
13
  Prologue = %Q{
14
14
  vocabulary Test;
15
- DateTime is defined as DateAndTime();
16
- Month is defined as VariableLengthText(3);
17
- Season is defined as VariableLengthText(6);
18
- PartyID is defined as AutoCounter();
19
- ClaimID is defined as AutoCounter();
15
+ DateTime is written as DateAndTime();
16
+ Month is written as VariableLengthText(3);
17
+ Season is written as VariableLengthText(6);
18
+ PartyID is written as AutoCounter();
19
+ ClaimID is written as AutoCounter();
20
20
  }
21
21
  Claim = %Q{
22
22
  Claim is identified by ClaimID where
@@ -51,7 +51,7 @@ describe "Absorption" do
51
51
  #{Prologue} #{Claim} #{Incident}
52
52
  Incident relates to loss on exactly one DateTime;
53
53
  },
54
- :tables => { "Claim" => ["ClaimID", %w{Incident DateTime}]}
54
+ :tables => { "Claim" => [%w{Claim ID}, %w{Incident Date Time}]}
55
55
  },
56
56
 
57
57
  { :should => "absorb an objectified binary with single-role UC",
@@ -63,16 +63,13 @@ describe "Absorption" do
63
63
  Person has exactly one birth-Date;
64
64
  },
65
65
  :tables => {
66
- "Claim" => ["ClaimID", %w{Lodgement DateTime}, %w{Lodgement Person ID}],
67
- "Party" => ["PartyID", %w{Person Birth Date}]
66
+ "Claim" => [%w{Claim ID}, %w{Lodgement Date Time}, %w{Lodgement Person ID}],
67
+ "Party" => [%w{Party ID}, %w{Person Birth Date}]
68
68
  }
69
69
  },
70
70
 
71
71
  ]
72
72
 
73
- setup do
74
- end
75
-
76
73
  Tests.each do |test|
77
74
  should = test[:should]
78
75
  cql = test[:cql]
@@ -3,7 +3,7 @@
3
3
  # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
4
  #
5
5
  describe "AutoCounter Value Type instances" do
6
- setup do
6
+ before :each do
7
7
  Object.send :remove_const, :Mod if Object.const_defined?("Mod")
8
8
  module Mod
9
9
  class ThingId < AutoCounter
@@ -7,7 +7,7 @@ require "ruby-debug"
7
7
  require 'activefacts/api'
8
8
 
9
9
  describe "A Constellation instance" do
10
- setup do
10
+ before :each do
11
11
  Object.send :remove_const, :Mod if Object.const_defined?("Mod")
12
12
  module Mod
13
13
  @base_types = [
@@ -3,7 +3,7 @@
3
3
  # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
4
  #
5
5
  describe "Entity Type class definitions" do
6
- setup do
6
+ before :each do
7
7
  Object.send :remove_const, :Mod if Object.const_defined?("Mod")
8
8
  module Mod
9
9
  class Name < String
data/spec/api/instance.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
4
  #
5
5
  describe "An instance of every type of Concept" do
6
- setup do
6
+ before :each do
7
7
  Object.send :remove_const, :Mod if Object.const_defined?("Mod")
8
8
  module Mod
9
9
  # These are the base value types we're going to test:
data/spec/api/roles.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
4
  #
5
5
  describe "Roles" do
6
- setup do
6
+ before :each do
7
7
  Object.send :remove_const, :Mod if Object.const_defined?("Mod")
8
8
  module Mod
9
9
  class Name < String
@@ -3,7 +3,7 @@
3
3
  # Copyright (c) 2008 Clifford Heath. Read the LICENSE file.
4
4
  #
5
5
  describe "Value Type class definitions" do
6
- setup do
6
+ before :each do
7
7
  Object.send :remove_const, :Mod if Object.const_defined?("Mod")
8
8
  module Mod
9
9
  class Name < String
data/spec/cql_cql_spec.rb CHANGED
@@ -37,10 +37,8 @@ describe "CQL Loader" do
37
37
  output.read
38
38
  end
39
39
 
40
- #Dir["examples/CQL/Bl*.cql"].each do |cql_file|
41
- #Dir["examples/CQL/Meta*.cql"].each do |cql_file|
42
- #Dir["examples/CQL/[ACG]*.cql"].each do |cql_file|
43
- Dir["examples/CQL/*.cql"].each do |cql_file|
40
+ pattern = ENV["AFTESTS"] || "*"
41
+ Dir["examples/CQL/#{pattern}.cql"].each do |cql_file|
44
42
  actual_file = cql_file.sub(%r{examples/CQL/}, 'spec/actual/')
45
43
 
46
44
  it "should load CQL and dump valid CQL for #{cql_file}" do
@@ -20,10 +20,8 @@ describe "CQL Parser" do
20
20
  ServiceDirector
21
21
  }
22
22
 
23
- #Dir["examples/CQL/Bl*.cql"].each do |cql_file|
24
- #Dir["examples/CQL/Meta*.cql"].each do |cql_file|
25
- #Dir["examples/CQL/[ACG]*.cql"].each do |cql_file|
26
- Dir["examples/CQL/*.cql"].each do |cql_file|
23
+ pattern = ENV["AFTESTS"] || "*"
24
+ Dir["examples/CQL/#{pattern}.cql"].each do |cql_file|
27
25
  it "should load CQL #{cql_file} without parse errors" do
28
26
  pending if CQLPARSE_FAILURES.include? File.basename(cql_file, ".cql")
29
27
  lambda { vocabulary = ActiveFacts::Input::CQL.readfile(cql_file) }.should_not raise_error
@@ -37,10 +37,8 @@ describe "CQL Loader with Ruby output" do
37
37
  output.read
38
38
  end
39
39
 
40
- #Dir["examples/CQL/Bl*.cql"].each do |cql_file|
41
- #Dir["examples/CQL/Meta*.cql"].each do |cql_file|
42
- #Dir["examples/CQL/[ACG]*.cql"].each do |cql_file|
43
- Dir["examples/CQL/*.cql"].each do |cql_file|
40
+ pattern = ENV["AFTESTS"] || "*"
41
+ Dir["examples/CQL/#{pattern}.cql"].each do |cql_file|
44
42
  expected_file = cql_file.sub(%r{/CQL/(.*).cql\Z}, '/ruby/\1.rb')
45
43
  actual_file = cql_file.sub(%r{examples/CQL/(.*).cql\Z}, 'spec/actual/\1.rb')
46
44
 
data/spec/cql_sql_spec.rb CHANGED
@@ -15,8 +15,10 @@ include ActiveFacts::Metamodel
15
15
  describe "CQL Loader with SQL output" do
16
16
  CQL_SQL_FAILURES = %w{
17
17
  Airline
18
+ CompanyDirectorEmployee
18
19
  CompanyQuery
19
20
  Insurance
21
+ JoinEquality
20
22
  Marriage
21
23
  OrienteeringER
22
24
  ServiceDirector
@@ -32,10 +34,8 @@ describe "CQL Loader with SQL output" do
32
34
  output.read
33
35
  end
34
36
 
35
- #Dir["examples/CQL/Bl*.cql"].each do |cql_file|
36
- #Dir["examples/CQL/Meta*.cql"].each do |cql_file|
37
- #Dir["examples/CQL/[ACG]*.cql"].each do |cql_file|
38
- Dir["examples/CQL/*.cql"].each do |cql_file|
37
+ pattern = ENV["AFTESTS"] || "*"
38
+ Dir["examples/CQL/#{pattern}.cql"].each do |cql_file|
39
39
  actual_file = cql_file.sub(%r{examples/CQL/(.*).cql}, 'spec/actual/\1.sql')
40
40
  expected_file = cql_file.sub(%r{examples/CQL/(.*).cql\Z}, 'examples/SQL/\1.sql')
41
41
 
@@ -15,7 +15,7 @@ describe "CQL Symbol table" do
15
15
  # def initialize(constellation, vocabulary)
16
16
  # def bind(words, leading_adjective = nil, trailing_adjective = nil, role_name = nil, allowed_forward = false, leading_speculative = false, trailing_speculative = false)
17
17
 
18
- setup do
18
+ before :each do
19
19
  include ActiveFacts::Input::CQL
20
20
  @constellation = ActiveFacts::API::Constellation.new(ActiveFacts::Metamodel)
21
21
  @vocabulary = @constellation.Vocabulary("Test")
@@ -12,7 +12,7 @@ describe "Valid Numbers, Strings and Ranges" do
12
12
  ValidNumbersEtc = [
13
13
  "a=b();", # Basic data type declaration, minimal whitespace
14
14
  "a = b ( ) ; ", # Basic data type declaration, maximal whitespace
15
- "a is defined as b();", # Verbally named data type declaration
15
+ "a is written as b();", # Verbally named data type declaration
16
16
  "a=b() inch;", # Data type declaration with unit
17
17
  "a=b() inch ; ", # Data type declaration with unit
18
18
  "a=b() inch^2 ; ", # Data type declaration with unit and exponent
@@ -100,7 +100,7 @@ describe "Valid Numbers, Strings and Ranges" do
100
100
  "a=b() restricted to { 'A'.. };", # String range, open end
101
101
  ]
102
102
 
103
- setup do
103
+ before :each do
104
104
  @parser = ActiveFacts::CQLParser.new
105
105
  end
106
106
 
@@ -137,7 +137,7 @@ describe "Invalid Numbers and Strings" do
137
137
  "b() restricted to { 'a'..27 };", # Cross-typed range
138
138
  ]
139
139
 
140
- setup do
140
+ before :each do
141
141
  @parser = ActiveFacts::CQLParser.new
142
142
  end
143
143
 
@@ -162,7 +162,7 @@ describe "Data Types" do
162
162
  # ],
163
163
  ]
164
164
 
165
- setup do
165
+ before :each do
166
166
  @parser = ActiveFacts::CQLParser.new
167
167
  end
168
168
 
@@ -257,7 +257,7 @@ describe "Entity Types" do
257
257
  EntityTypes_Objectified +
258
258
  EntityTypes_Subtypes
259
259
 
260
- setup do
260
+ before :each do
261
261
  @parser = ActiveFacts::CQLParser.new
262
262
  end
263
263
 
@@ -303,7 +303,7 @@ describe "Fact Types" do
303
303
  ]
304
304
  ]
305
305
 
306
- setup do
306
+ before :each do
307
307
  @parser = ActiveFacts::CQLParser.new
308
308
  end
309
309
 
data/spec/cqldump_spec.rb CHANGED
@@ -14,7 +14,7 @@ describe "CQL Dumper" do
14
14
  def self.hide(*a,&b)
15
15
  end
16
16
 
17
- setup do
17
+ before :each do
18
18
  @constellation = ActiveFacts::API::Constellation.new(ActiveFacts::Metamodel)
19
19
  @vocabulary = @constellation.Vocabulary("TestVocab")
20
20
  @string_type = @constellation.ValueType(@vocabulary, "String")
@@ -41,7 +41,7 @@ vocabulary TestVocab;
41
41
  /*
42
42
  * Value Types
43
43
  */
44
- Name is defined as String(20);
44
+ Name is written as String(20);
45
45
 
46
46
  END
47
47
  end
@@ -54,7 +54,7 @@ vocabulary TestVocab;
54
54
  /*
55
55
  * Value Types
56
56
  */
57
- Count is defined as Integer(32);
57
+ Count is written as Integer(32);
58
58
 
59
59
  END
60
60
  end
@@ -131,8 +131,8 @@ vocabulary TestVocab;
131
131
  /*
132
132
  * Value Types
133
133
  */
134
- Count is defined as Integer(32);
135
- Name is defined as String(20);
134
+ Count is written as Integer(32);
135
+ Name is written as String(20);
136
136
 
137
137
  /*
138
138
  * Fact Types
@@ -154,7 +154,7 @@ vocabulary TestVocab;
154
154
  /*
155
155
  * Value Types
156
156
  */
157
- Name is defined as String(20);
157
+ Name is written as String(20);
158
158
 
159
159
  /*
160
160
  * Entity Types
@@ -25,10 +25,8 @@ describe "Norma Loader" do
25
25
  output.readlines
26
26
  end
27
27
 
28
- #Dir["examples/norma/Bl*.orm"].each do |orm_file|
29
- #Dir["examples/norma/Meta*.orm"].each do |orm_file|
30
- #Dir["examples/norma/[AC]*.orm"].each do |orm_file|
31
- Dir["examples/norma/*.orm"].each do |orm_file|
28
+ pattern = ENV["AFTESTS"] || "*"
29
+ Dir["examples/norma/#{pattern}.orm"].each do |orm_file|
32
30
  expected_file = orm_file.sub(%r{/norma/(.*).orm\Z}, '/CQL/\1.cql')
33
31
 
34
32
  actual_file = orm_file.sub(%r{examples/norma/(.*).orm\Z}, 'spec/actual/\1.cql')
@@ -28,10 +28,8 @@ describe "NORMA Loader with Ruby output" do
28
28
  output.read
29
29
  end
30
30
 
31
- #Dir["examples/norma/Bl*.orm"].each do |orm_file|
32
- #Dir["examples/norma/Meta*.orm"].each do |orm_file|
33
- #Dir["examples/norma/[ACG]*.orm"].each do |orm_file|
34
- Dir["examples/norma/*.orm"].each do |orm_file|
31
+ pattern = ENV["AFTESTS"] || "*"
32
+ Dir["examples/norma/#{pattern}.orm"].each do |orm_file|
35
33
  expected_file = orm_file.sub(%r{examples/norma/(.*).orm\Z}, 'examples/ruby/\1.rb')
36
34
  actual_file = orm_file.sub(%r{examples/norma/(.*).orm\Z}, 'spec/actual/\1.rb')
37
35
 
@@ -23,10 +23,8 @@ describe "NORMA Loader with SQL output" do
23
23
  output.read
24
24
  end
25
25
 
26
- #Dir["examples/norma/Bl*.orm"].each do |orm_file|
27
- #Dir["examples/norma/Meta*.orm"].each do |orm_file|
28
- #Dir["examples/norma/[ACG]*.orm"].each do |orm_file|
29
- Dir["examples/norma/*.orm"].each do |orm_file|
26
+ pattern = ENV["AFTESTS"] || "*"
27
+ Dir["examples/norma/#{pattern}.orm"].each do |orm_file|
30
28
  expected_file = orm_file.sub(%r{examples/norma/(.*).orm\Z}, 'examples/SQL/\1.sql')
31
29
  actual_file = orm_file.sub(%r{examples/norma/(.*).orm\Z}, 'spec/actual/\1.sql')
32
30
 
@@ -19,8 +19,8 @@ include ActiveFacts::Metamodel
19
19
  Exceptions = {
20
20
  "Blog" => ["Author", "Comment", "Paragraph", "Post", "Topic"],
21
21
  "JoinEquality" => ["Event", "Seat", "Ticket", "Venue"],
22
- "Metamodel" => ["AllowedRange", "Constraint", "Correspondence", "Derivation", "Fact", "FactType", "Feature", "Instance", "Join", "Reading", "Role", "RoleRef", "RoleSequence", "RoleValue", "SetComparisonRoles", "Unit", "ValueRestriction"],
23
- "MetamodelTerms" => ["AllowedValue", "Concept", "Constraint", "Derivation", "Fact", "FactType", "Import", "Instance", "Join", "JoinRole", "ParamValue", "Reading", "Role", "RoleRef", "RoleSequence", "RoleValue", "SetComparisonRoles", "Term", "Unit", "ValueRestriction"],
22
+ "Metamodel" => ["AllowedRange", "Constraint", "Derivation", "Fact", "FactType", "Feature", "Instance", "Join", "ParamValue", "Reading", "Role", "RoleRef", "RoleSequence", "RoleValue", "SetComparisonRoles", "Unit", "ValueRestriction"],
23
+ "MetamodelTerms" => ["AllowedRange", "Concept", "Constraint", "Derivation", "Fact", "FactType", "Import", "Instance", "Join", "ParamValue", "Reading", "Role", "RoleRef", "RoleSequence", "RoleValue", "SetComparisonRoles", "Term", "Unit", "ValueRestriction"],
24
24
  "OilSupply" => ["AcceptableSubstitutes", "Month", "ProductionForecast", "RegionalDemand", "TransportRoute"],
25
25
  "Orienteering" => ["Club", "Entry", "Event", "EventControl", "EventScoringMethod", "Map", "Person", "Punch", "PunchPlacement", "Series", "Visit"],
26
26
  "SeparateSubtype" => ["Claim", "VehicleIncident"],
@@ -43,11 +43,8 @@ def extract_created_tables_from_sql sql_file
43
43
  end
44
44
 
45
45
  describe "Relational Composition from NORMA" do
46
- #Dir["examples/norma/B*.orm"].each do |orm_file|
47
- #Dir["examples/norma/Ins*.orm"].each do |orm_file|
48
- #Dir["examples/norma/Meta*.orm"].each do |orm_file|
49
- #Dir["examples/norma/W*.orm"].each do |orm_file|
50
- Dir["examples/norma/*.orm"].each do |orm_file|
46
+ pattern = ENV["AFTESTS"] || "*"
47
+ Dir["examples/norma/#{pattern}.orm"].each do |orm_file|
51
48
  expected_tables = Exceptions[File.basename(orm_file, ".orm")]
52
49
  if !expected_tables
53
50
  sql_file_pattern = orm_file.sub(/\.orm\Z/, '*.sql')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activefacts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.2
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clifford Heath
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-31 00:00:00 +11:00
12
+ date: 2009-05-15 00:00:00 +10:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0
33
+ version: 1.4.1
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: hoe
@@ -42,7 +42,24 @@ dependencies:
42
42
  - !ruby/object:Gem::Version
43
43
  version: 1.8.0
44
44
  version:
45
- description: ActiveFacts is a semantic modeling toolkit, comprising an implementation of the Constellation Query Language, the Constellation API, and code generators that receive CQL or ORM (Object Role Modeling files, from NORMA) to emit CQL, Ruby and SQL. Semantic modeling is a refinement of fact-based modeling techniques that draw on natural language verbalisation and formal logic. Fact based modeling is essentially the same as relational modeling in the sixth normal form. The tools provided here automatically condense that to third normal form for efficient storage. They also generate object models as a Ruby module which has an effective mapping to both the original semantic model and to the generated SQL. The result is a formal language that reads like plain English, and allows creation of relational and object models that are guaranteed equivalent, and much more stable in the face of schema evolution than SQL is.
45
+ description: |-
46
+ ActiveFacts is a semantic modeling toolkit, comprising an implementation
47
+ of the Constellation Query Language, the Constellation API, and code
48
+ generators that receive CQL or ORM (Object Role Modeling files, from
49
+ NORMA) to emit CQL, Ruby and SQL.
50
+
51
+ Semantic modeling is a refinement of fact-based modeling techniques
52
+ that draw on natural language verbalisation and formal logic. Fact
53
+ based modeling is essentially the same as relational modeling in the
54
+ sixth normal form. The tools provided here automatically condense
55
+ that to third normal form for efficient storage. They also generate
56
+ object models as a Ruby module which has an effective mapping to
57
+ both the original semantic model and to the generated SQL.
58
+
59
+ The result is a formal language that reads like plain English, and
60
+ allows creation of relational and object models that are guaranteed
61
+ equivalent, and much more stable in the face of schema evolution than
62
+ SQL is.
46
63
  email:
47
64
  - cjh@dataconstellation.org
48
65
  executables:
@@ -109,6 +126,7 @@ files:
109
126
  - lib/activefacts/generate/oo.rb
110
127
  - lib/activefacts/generate/ordered.rb
111
128
  - lib/activefacts/generate/ruby.rb
129
+ - lib/activefacts/generate/sql/mysql.rb
112
130
  - lib/activefacts/generate/sql/server.rb
113
131
  - lib/activefacts/generate/text.rb
114
132
  - lib/activefacts/input/cql.rb
@@ -149,8 +167,13 @@ files:
149
167
  - spec/spec_helper.rb
150
168
  has_rdoc: true
151
169
  homepage: http://dataconstellation.com/ActiveFacts/
170
+ licenses: []
171
+
152
172
  post_install_message: For more information on ActiveFacts, see http://dataconstellation.com/ActiveFacts
153
173
  rdoc_options:
174
+ - -S
175
+ - -T
176
+ - hanna
154
177
  - -A
155
178
  - has_one
156
179
  - -A
@@ -178,9 +201,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
201
  requirements: []
179
202
 
180
203
  rubyforge_project: cjheath@rubyforge.org
181
- rubygems_version: 1.3.1
204
+ rubygems_version: 1.3.3
182
205
  signing_key:
183
- specification_version: 2
206
+ specification_version: 3
184
207
  summary: ActiveFacts is a semantic modeling toolkit, comprising an implementation of the Constellation Query Language, the Constellation API, and code generators that receive CQL or ORM (Object Role Modeling files, from NORMA) to emit CQL, Ruby and SQL
185
208
  test_files: []
186
209