activefacts 0.8.10 → 0.8.12

Sign up to get free protection for your applications and to get access to all the features.
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
-