activefacts 0.8.10 → 0.8.12

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.
Files changed (52) hide show
  1. data/Rakefile +3 -2
  2. data/bin/afgen +25 -23
  3. data/bin/cql +9 -8
  4. data/css/orm2.css +23 -3
  5. data/examples/CQL/CompanyDirectorEmployee.cql +1 -1
  6. data/examples/CQL/Diplomacy.cql +3 -3
  7. data/examples/CQL/Insurance.cql +27 -21
  8. data/examples/CQL/Metamodel.cql +12 -8
  9. data/examples/CQL/MetamodelNext.cql +172 -149
  10. data/examples/CQL/ServiceDirector.cql +17 -17
  11. data/examples/CQL/Supervision.cql +3 -5
  12. data/examples/CQL/WaiterTips.cql +1 -1
  13. data/examples/CQL/unit.cql +1 -1
  14. data/index.html +0 -0
  15. data/lib/activefacts/cql/FactTypes.treetop +41 -8
  16. data/lib/activefacts/cql/Language/English.treetop +10 -0
  17. data/lib/activefacts/cql/ObjectTypes.treetop +3 -1
  18. data/lib/activefacts/cql/Terms.treetop +34 -53
  19. data/lib/activefacts/cql/compiler.rb +1 -1
  20. data/lib/activefacts/cql/compiler/clause.rb +21 -8
  21. data/lib/activefacts/cql/compiler/constraint.rb +3 -1
  22. data/lib/activefacts/cql/compiler/entity_type.rb +1 -1
  23. data/lib/activefacts/cql/compiler/fact_type.rb +9 -3
  24. data/lib/activefacts/cql/compiler/join.rb +3 -0
  25. data/lib/activefacts/cql/compiler/value_type.rb +9 -4
  26. data/lib/activefacts/cql/parser.rb +11 -3
  27. data/lib/activefacts/generate/oo.rb +3 -3
  28. data/lib/activefacts/generate/ordered.rb +0 -4
  29. data/lib/activefacts/input/orm.rb +305 -250
  30. data/lib/activefacts/persistence/tables.rb +6 -0
  31. data/lib/activefacts/support.rb +18 -0
  32. data/lib/activefacts/version.rb +1 -1
  33. data/lib/activefacts/vocabulary/extensions.rb +59 -20
  34. data/lib/activefacts/vocabulary/metamodel.rb +23 -13
  35. data/lib/activefacts/vocabulary/verbaliser.rb +5 -3
  36. data/spec/absorption_spec.rb +3 -2
  37. data/spec/cql/comparison_spec.rb +1 -3
  38. data/spec/cql/context_spec.rb +1 -1
  39. data/spec/cql/entity_type_spec.rb +2 -2
  40. data/spec/cql/expressions_spec.rb +2 -4
  41. data/spec/cql/fact_type_matching_spec.rb +55 -3
  42. data/spec/cql/parser/fact_types_spec.rb +3 -0
  43. data/spec/cql/role_matching_spec.rb +8 -7
  44. data/spec/cql/samples_spec.rb +10 -2
  45. data/spec/cql_dm_spec.rb +2 -1
  46. data/spec/helpers/array_matcher.rb +18 -35
  47. data/spec/helpers/diff_matcher.rb +34 -13
  48. data/spec/helpers/file_matcher.rb +27 -43
  49. data/spec/helpers/string_matcher.rb +23 -33
  50. data/spec/norma_cql_spec.rb +1 -0
  51. data/spec/norma_tables_spec.rb +1 -2
  52. metadata +95 -102
@@ -24,6 +24,9 @@ describe "Fact Types" do
24
24
  # ],
25
25
  [ "A is interesting : b- C has F -g;",
26
26
  ["FactType: [{A} \"is interesting\"] where {b- C} \"has\" {F -g}"]
27
+ ],
28
+ [ "A has one pre-- bound B;",
29
+ [%q{FactType: [{A} "has" {[1..1] pre-bound- B}]}]
27
30
  ]
28
31
  # REVISIT: Test all quantifiers
29
32
  ]
@@ -2,13 +2,14 @@
2
2
  # ActiveFacts CQL Fact Type matching tests
3
3
  # Copyright (c) 2009 Clifford Heath. Read the LICENSE file.
4
4
  #
5
+ $: << Dir::getwd
5
6
 
6
7
  require 'rspec/expectations'
7
8
 
8
9
  require 'activefacts/support'
9
10
  require 'activefacts/api/support'
10
11
  require 'activefacts/cql/compiler'
11
- require 'spec/helpers/compile_helpers'
12
+ require File.dirname(__FILE__) + '/../helpers/compile_helpers'
12
13
 
13
14
  describe "When comparing roles of a reading with an existing reading" do
14
15
  before :each do
@@ -48,7 +49,7 @@ describe "When comparing roles of a reading with an existing reading" do
48
49
  @asts.size.should == 1
49
50
  side_effects = match_readings_to_existing(@asts[0], @simple_ft.all_reading.single)
50
51
  side_effects[0].should_not be_nil
51
- side_effects.to_s.should == 'side-effects are [{Boy} absorbs 0/0 at 0, {Girl} absorbs 0/0 at 5]'
52
+ side_effects.to_s.should == '[side-effects are [{Boy} absorbs 0/0 at 0, {Girl} absorbs 0/0 at 5]]'
52
53
  end
53
54
 
54
55
  it "should match with explicit leading adjective" do
@@ -56,7 +57,7 @@ describe "When comparing roles of a reading with an existing reading" do
56
57
  @asts.size.should == 1
57
58
  side_effects = match_readings_to_existing(@asts[0], @ugly_ft.all_reading.single)
58
59
  side_effects[0].should_not be_nil
59
- side_effects.to_s.should == 'side-effects are [{Boy} absorbs 0/0 at 0, {ugly- Girl} absorbs 0/0 at 2]'
60
+ side_effects.to_s.should == '[side-effects are [{Boy} absorbs 0/0 at 0, {ugly- Girl} absorbs 0/0 at 2]]'
60
61
  end
61
62
 
62
63
  it "should match with implicit leading adjective" do
@@ -64,7 +65,7 @@ describe "When comparing roles of a reading with an existing reading" do
64
65
  @asts.size.should == 1
65
66
  side_effects = match_readings_to_existing(@asts[0], @ugly_ft.all_reading.single)
66
67
  side_effects[0].should_not be_nil
67
- side_effects.to_s.should == 'side-effects are [{Boy} absorbs 0/0 at 0, {Girl} absorbs 1/0 at 3]'
68
+ side_effects.to_s.should == '[side-effects are [{Boy} absorbs 0/0 at 0, {Girl} absorbs 1/0 at 3]]'
68
69
  end
69
70
 
70
71
  it "should match with local leading adjective" do
@@ -104,7 +105,7 @@ describe "When comparing roles of a reading with an existing reading" do
104
105
  side_effects = match_readings_to_existing(@asts[0], @hurts_ft.all_reading.single)
105
106
  pending "Thinks trailing adjectives are always residual"
106
107
  side_effects[0].should_not be_nil
107
- side_effects.to_s.should == ''
108
+ side_effects[0].to_s.should == ''
108
109
  end
109
110
 
110
111
  it "should match with implicit trailing adjective" do
@@ -112,7 +113,7 @@ describe "When comparing roles of a reading with an existing reading" do
112
113
  @asts.size.should == 1
113
114
  side_effects = match_readings_to_existing(@asts[0], @hurts_ft.all_reading.single)
114
115
  side_effects[0].should_not be_nil
115
- side_effects.to_s.should == 'side-effects are [{Boy} absorbs 0/1 at 0, {Girl} absorbs 0/0 at 3]'
116
+ side_effects.to_s.should == '[side-effects are [{Boy} absorbs 0/1 at 0, {Girl} absorbs 0/0 at 3]]'
116
117
  end
117
118
 
118
119
  it "should match with local trailing adjective" do
@@ -124,7 +125,7 @@ describe "When comparing roles of a reading with an existing reading" do
124
125
  side_effects = match_readings_to_existing(@asts[0], @simple_ft.all_reading.single)
125
126
  side_effects.size.should == 2
126
127
  side_effects[0].should_not be_nil
127
- side_effects.to_s.should == 'side-effects are [{Boy} absorbs 0/0 at 0, {Girl -troublemaker} absorbs 0/0 at 5 with residual adjectives] with residual adjectives'
128
+ side_effects.to_s.should == '[side-effects are [{Boy} absorbs 0/0 at 0, {Girl -troublemaker} absorbs 0/0 at 5 with residual adjectives] with residual adjectives, nil]'
128
129
  end
129
130
 
130
131
  it "should match with explicit and local trailing adjective" do
@@ -103,6 +103,14 @@ describe "Sample data" do
103
103
  ],
104
104
  ]
105
105
 
106
+ def render_value v
107
+ if v.to_s !~ /[^-+0-9.]/ and (n = eval(v.to_s) rescue nil)
108
+ n
109
+ else
110
+ "'"+v.to_s.gsub(/'/,'\\\'')+"'"
111
+ end
112
+ end
113
+
106
114
  # REVISIT: This code does a better job than verbalise. Consider incorporating it?
107
115
  def instance_name(i)
108
116
  if i.is_a?(ActiveFacts::Metamodel::Fact)
@@ -112,14 +120,14 @@ describe "Sample data" do
112
120
  role_values_in_reading_order = fact.all_role_value.sort_by{|rv| reading_roles.index(rv.role) }
113
121
  instance_verbalisations = role_values_in_reading_order.map do |rv|
114
122
  next nil unless v = rv.instance.value
115
- v.to_s
123
+ render_value(v)
116
124
  end
117
125
  return reading.expand([], false, instance_verbalisations)
118
126
  # REVISIT: Include the instance_names of all role players
119
127
  end
120
128
 
121
129
  if i.object_type.is_a?(ActiveFacts::Metamodel::ValueType)
122
- return "#{i.object_type.name} #{i.value}"
130
+ return "#{i.object_type.name} #{render_value(i.value)}"
123
131
  end
124
132
 
125
133
  if i.object_type.fact_type # An instance of an objectified fact type
@@ -38,8 +38,9 @@ describe "CQL Loader with DataMapper output" do
38
38
  mapping_failures = { # These models can't be mapped to DM
39
39
  'OrienteeringER' => 'Invalid CQL results in unmappable model',
40
40
  'Insurance' => 'Cannot handle models that contain classes like Vehicle Incident with external supertypes (Incident)',
41
- 'MetamodelNext' => 'Cannot handle models that contain classes like Constraint with external supertypes (ObjectType)',
42
41
  'MultiInheritance' => 'Cannot handle models that contain classes like Australian Employee with external supertypes (Australian)',
42
+ 'Metamodel' => 'cannot be used as a property name since it collides with an existing method',
43
+ 'MetamodelNext' => 'Cannot map classes like Constraint with roles inherited from external supertypes (Concept)',
43
44
  'SeparateSubtype' => 'Cannot handle models that contain classes like Vehicle Incident with external supertypes (Incident)',
44
45
  'ServiceDirector' => 'Cannot handle models that contain classes like Client with external supertypes (Company)',
45
46
  }
@@ -1,40 +1,23 @@
1
- module RSpec
2
- module Matchers
3
- class ArrayMatcher < Matcher
4
- def initialize expected
5
- super(:be_different_array_from, expected) do |*_expected|
6
- match_for_should do |actual|
7
- perform_match(actual, _expected[0])
8
- @extra + @missing != []
9
- end
10
-
11
- match_for_should_not do |actual|
12
- perform_match(actual, _expected[0])
13
- @extra + @missing == []
14
- end
15
-
16
- def perform_match(actual, expected)
17
- @extra = actual - expected
18
- @missing = expected - actual
19
- end
1
+ RSpec::Matchers.define :be_different_array_from do |x|
2
+ match do |actual|
3
+ perform_match(actual, expected)
4
+ @extra + @missing != []
5
+ end
20
6
 
21
- def failure_message_for_should
22
- "expected a difference in the two lists, but got none"
23
- end
7
+ def perform_match(actual, expected)
8
+ @extra = actual - expected
9
+ @missing = expected - actual
10
+ end
24
11
 
25
- failure_message_for_should_not do |actual|
26
- "expected no difference, but result #{
27
- [ (@missing.empty? ? nil : 'lacks '+@missing.sort.inspect),
28
- (@extra.empty? ? nil : 'has extra '+@extra.sort.inspect)
29
- ].compact * ' and '
30
- }"
31
- end
32
- end
33
- end
34
- end
12
+ failure_message_for_should do |actual|
13
+ "expected a difference in the two lists, but got none"
14
+ end
35
15
 
36
- def be_different_array_from(expected)
37
- ArrayMatcher.new(expected)
38
- end
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
+ }"
39
22
  end
40
23
  end
@@ -1,18 +1,39 @@
1
1
  require 'pathname'
2
2
 
3
- module RSpec
4
- module Matchers
5
- def differ_from(expected)
6
- case expected
7
- when Pathname
8
- FileMatcher.new(expected)
9
- when Array
10
- ArrayMatcher.new(expected)
11
- when String
12
- FileMatcher.new(expected)
13
- else
14
- raise "DiffMatcher doesn't know how to match a #{expected.class}"
15
- end
3
+ require 'rspec/matchers'
4
+
5
+ class RSpec::Matchers::DSL::Matcher
6
+ attr_writer :expected
7
+ end
8
+
9
+ RSpec::Matchers.define :differ_from do |expected|
10
+ match do |actual|
11
+ case expected
12
+ when Pathname
13
+ @m = have_different_contents
14
+ @m.expected = expected
15
+ @m.matches?(actual)
16
+ when Array
17
+ # If we pass "expected" here, it expects an array.
18
+ # Works here, but not for Pathname or String
19
+ # Hence the need for the attr_writer hack above.
20
+ @m = be_different_array_from
21
+ @m.expected = expected
22
+ @m.matches?(actual)
23
+ when String
24
+ @m = have_different_contents
25
+ @m.expected = expected
26
+ @m.matches?(actual)
27
+ else
28
+ raise "DiffMatcher doesn't know how to match a #{expected.class}"
16
29
  end
17
30
  end
31
+
32
+ failure_message_for_should do |actual|
33
+ @m.failure_message_for_should
34
+ end
35
+
36
+ failure_message_for_should_not do |actual|
37
+ @m.failure_message_for_should_not
38
+ end
18
39
  end
@@ -1,50 +1,34 @@
1
1
  require 'diff/lcs'
2
2
 
3
- module RSpec
4
- module Matchers
5
- class FileMatcher < Matcher
6
- def initialize expected
7
- super(:have_different_contents, expected) do |*_expected|
8
- match_for_should do |actual|
9
- perform_match(actual, _expected[0])
10
- end
11
-
12
- match_for_should_not do |actual|
13
- !perform_match(actual, _expected[0])
14
- end
15
-
16
- def perform_match(actual, expected)
17
- expected = File.open(expected).read if expected.is_a?(Pathname)
18
- expected = expected.scan(/[^\n]+/) unless expected.is_a?(Array)
19
-
20
- actual = File.open(actual).read if actual.is_a?(Pathname)
21
- actual = actual.scan(/[^\n]+/) unless actual.is_a?(Array)
22
-
23
- differences = Diff::LCS::diff(expected, actual)
24
- @diff = differences.map do |chunk|
25
- added_at = (add = chunk.detect{|d| d.action == '+'}) && add.position+1
26
- removed_at = (remove = chunk.detect{|d| d.action == '-'}) && remove.position+1
27
- "Line #{added_at}/#{removed_at}:\n"+
28
- chunk.map do |change|
29
- "#{change.action} #{change.element}"
30
- end*"\n"
31
- end*"\n"
32
- @diff != ''
33
- end
3
+ RSpec::Matchers.define :have_different_contents do |x|
4
+ match do |actual|
5
+ perform_match(actual, expected)
6
+ end
34
7
 
35
- def failure_message_for_should
36
- "expected a difference, but got none"
37
- end
8
+ def perform_match(actual, expected)
9
+ expected = File.open(expected).read if expected.is_a?(Pathname)
10
+ expected = expected.scan(/[^\n]+/) unless expected.is_a?(Array)
11
+
12
+ actual = File.open(actual).read if actual.is_a?(Pathname)
13
+ actual = actual.scan(/[^\n]+/) unless actual.is_a?(Array)
14
+
15
+ differences = Diff::LCS::diff(expected, actual)
16
+ @diff = differences.map do |chunk|
17
+ added_at = (add = chunk.detect{|d| d.action == '+'}) && add.position+1
18
+ removed_at = (remove = chunk.detect{|d| d.action == '-'}) && remove.position+1
19
+ "Line #{added_at}/#{removed_at}:\n"+
20
+ chunk.map do |change|
21
+ "#{change.action} #{change.element}"
22
+ end*"\n"
23
+ end*"\n"
24
+ @diff != ''
25
+ end
38
26
 
39
- failure_message_for_should_not do |actual|
40
- "expected no difference, but got:\n#{@diff}"
41
- end
42
- end
43
- end
44
- end
27
+ failure_message_for_should do |actual|
28
+ "expected a difference, but got none"
29
+ end
45
30
 
46
- def have_different_contents(expected)
47
- FileMatcher.new(expected)
48
- end
31
+ failure_message_for_should_not do |actual|
32
+ "expected no difference, but got:\n#{@diff}"
49
33
  end
50
34
  end
@@ -1,40 +1,30 @@
1
1
  require 'diff/lcs'
2
2
 
3
- module RSpec
4
- module Matchers
5
- def have_different_contents(expected)
6
- Matcher.new :have_different_contents, expected do |*_expected|
7
- match_for_should do |actual|
8
- perform_match(actual, _expected)
9
- end
10
-
11
- match_for_should_not do |actual|
12
- !perform_match(actual, _expected)
13
- end
3
+ RSpec::Matchers.define :have_different_contents do |x|
4
+ match do |actual|
5
+ perform_match(actual, expected)
6
+ end
14
7
 
15
- def perform_match(actual, expected)
16
- expected_lines = expected.scan(/[^\n]+/)
17
- actual_lines = actual.scan(/[^\n]+/)
18
- differences = Diff::LCS::diff(expected_lines, actual_lines)
19
- @diff = differences.map do |chunk|
20
- added_at = (add = chunk.detect{|d| d.action == '+'}) && add.position+1
21
- removed_at = (remove = chunk.detect{|d| d.action == '-'}) && remove.position+1
22
- "Line #{added_at}/#{removed_at}:\n"+
23
- chunk.map do |change|
24
- "#{change.action} #{change.element}"
25
- end*"\n"
26
- end*"\n"
27
- @diff != ''
28
- end
8
+ def perform_match(actual, expected)
9
+ expected_lines = expected.scan(/[^\n]+/)
10
+ actual_lines = actual.scan(/[^\n]+/)
11
+ differences = Diff::LCS::diff(expected_lines, actual_lines)
12
+ @diff = differences.map do |chunk|
13
+ added_at = (add = chunk.detect{|d| d.action == '+'}) && add.position+1
14
+ removed_at = (remove = chunk.detect{|d| d.action == '-'}) && remove.position+1
15
+ "Line #{added_at}/#{removed_at}:\n"+
16
+ chunk.map do |change|
17
+ "#{change.action} #{change.element}"
18
+ end*"\n"
19
+ end*"\n"
20
+ @diff != ''
21
+ end
29
22
 
30
- def failure_message_for_should
31
- "expected a difference, but got none"
32
- end
23
+ failure_message_for_should do |actual|
24
+ "expected a difference, but got none"
25
+ end
33
26
 
34
- failure_message_for_should_not do |actual|
35
- "expected no difference, but got:\n#{@diff}"
36
- end
37
- end
38
- end
27
+ failure_message_for_should_not do |actual|
28
+ "expected no difference, but got:\n#{@diff}"
39
29
  end
40
30
  end
@@ -17,6 +17,7 @@ describe "Norma Loader" do
17
17
  orm_cql_failures = {
18
18
  # "OddIdentifier" => "Strange identification pattern is incorrectly verbalised to CQL", # Fixed
19
19
  "UnaryIdentification" => "No PI for VisitStatus",
20
+ "Supervision" => "Join constraints not imported from NORMA",
20
21
  }
21
22
  # Generate and return the CQL for the given vocabulary
22
23
  def cql(vocabulary)
@@ -19,11 +19,10 @@ orm_failures = {
19
19
  }
20
20
  norma_table_exceptions = {
21
21
  "Metamodel" => [[], %w{Agreement Enforcement}], # ActiveFacts absorbs Agreement into ContextNote, Enforcement into Constraint
22
- "MetamodelNext" => [[], %w{Agreement Enforcement}],
22
+ "MetamodelNext" => [[], %w{Agreement Enforcement TypeInheritance}],
23
23
  "Orienteering" => [%w{Punch}, []], # NORMA doesn't make a table for the IDENTITY field
24
24
  "OrienteeringER" => [%w{SeriesEvent}, []], # NORMA doesn't make a table for the IDENTITY field
25
25
  "RedundantDependency" => [%w{Politician StateOrProvince}, %w{LegislativeDistrict}], # NORMA doesn't make a table for the 3 IDENTITY fields
26
- "SeparateSubtype" => [%w{Claim}, %w{Incident}], # NORMA doesn't make a table for the IDENTITY field. Even when Claim is independent, it still doesn't absorb Incident either and I don't know why, must ask Matt.
27
26
  "Warehousing" => [%w{Product Warehouse}, []], # NORMA doesn't make a table for the IDENTITY field
28
27
  "ServiceDirector" => [%w{DataStoreService MonitorNotificationUser}, %w{DataStoreFileHostSystem }],
29
28
 
metadata CHANGED
@@ -1,120 +1,121 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: activefacts
3
- version: !ruby/object:Gem::Version
4
- hash: 43
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.12
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 8
9
- - 10
10
- version: 0.8.10
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Clifford Heath
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-06-27 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-10-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: activefacts-api
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 43
29
- segments:
30
- - 0
31
- - 8
32
- - 10
33
- version: 0.8.10
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.12
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: treetop
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.8.12
30
+ - !ruby/object:Gem::Dependency
31
+ name: treetop
32
+ requirement: !ruby/object:Gem::Requirement
40
33
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 5
45
- segments:
46
- - 1
47
- - 4
48
- - 1
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
49
37
  version: 1.4.1
50
38
  type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: rake
54
39
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
56
41
  none: false
57
- requirements:
58
- - - ">="
59
- - !ruby/object:Gem::Version
60
- hash: 49
61
- segments:
62
- - 0
63
- - 8
64
- - 7
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 1.4.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
65
53
  version: 0.8.7
66
54
  type: :runtime
67
- version_requirements: *id003
68
- - !ruby/object:Gem::Dependency
69
- name: newgem
70
55
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
72
57
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 5
77
- segments:
78
- - 1
79
- - 5
80
- - 3
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.7
62
+ - !ruby/object:Gem::Dependency
63
+ name: newgem
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
81
69
  version: 1.5.3
82
70
  type: :development
83
- version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: hoe
86
71
  prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
88
73
  none: false
89
- requirements:
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.5.3
78
+ - !ruby/object:Gem::Dependency
79
+ name: hoe
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
90
83
  - - ~>
91
- - !ruby/object:Gem::Version
92
- hash: 17
93
- segments:
94
- - 2
95
- - 9
96
- version: "2.9"
84
+ - !ruby/object:Gem::Version
85
+ version: '3.1'
97
86
  type: :development
98
- version_requirements: *id005
99
- description: |
100
-
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '3.1'
94
+ description: ! '
95
+
101
96
  ActiveFacts provides a semantic modeling language, the Constellation
97
+
102
98
  Query Language (CQL). CQL combines natural language verbalisation and
99
+
103
100
  formal logic, producing a formal language that reads like plain
101
+
104
102
  English. ActiveFacts converts semantic models from CQL to relational
103
+
105
104
  and object models in SQL, Ruby and other languages.
106
105
 
107
- email:
106
+ '
107
+ email:
108
108
  - cjh@dataconstellation.org
109
- executables:
109
+ executables:
110
110
  - afgen
111
111
  - cql
112
- extensions:
112
+ extensions:
113
113
  - lib/activefacts/cql/Rakefile
114
- extra_rdoc_files:
114
+ extra_rdoc_files:
115
115
  - History.txt
116
116
  - Manifest.txt
117
- files:
117
+ - README.rdoc
118
+ files:
118
119
  - History.txt
119
120
  - LICENSE
120
121
  - Manifest.txt
@@ -259,40 +260,32 @@ files:
259
260
  - .gemtest
260
261
  homepage: http://dataconstellation.com/ActiveFacts/
261
262
  licenses: []
262
-
263
263
  post_install_message: For more information on ActiveFacts, see http://dataconstellation.com/ActiveFacts
264
- rdoc_options:
264
+ rdoc_options:
265
265
  - -S
266
266
  - -x
267
267
  - lib/activefacts/cql/.*.rb
268
268
  - -x
269
269
  - lib/activefacts/vocabulary/.*.rb
270
- require_paths:
270
+ require_paths:
271
271
  - lib
272
- required_ruby_version: !ruby/object:Gem::Requirement
272
+ required_ruby_version: !ruby/object:Gem::Requirement
273
273
  none: false
274
- requirements:
275
- - - ">="
276
- - !ruby/object:Gem::Version
277
- hash: 3
278
- segments:
279
- - 0
280
- version: "0"
281
- required_rubygems_version: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ required_rubygems_version: !ruby/object:Gem::Requirement
282
279
  none: false
283
- requirements:
284
- - - ">="
285
- - !ruby/object:Gem::Version
286
- hash: 3
287
- segments:
288
- - 0
289
- version: "0"
280
+ requirements:
281
+ - - ! '>='
282
+ - !ruby/object:Gem::Version
283
+ version: '0'
290
284
  requirements: []
291
-
292
285
  rubyforge_project: cjheath@rubyforge.org
293
- rubygems_version: 1.8.5
286
+ rubygems_version: 1.8.24
294
287
  signing_key:
295
288
  specification_version: 3
296
- summary: A semantic modeling and query language (CQL) and application runtime (the Constellation API)
289
+ summary: A semantic modeling and query language (CQL) and application runtime (the
290
+ Constellation API)
297
291
  test_files: []
298
-