agreement-design-prototype 0.0.3 → 0.0.4

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.
@@ -1,85 +1,61 @@
1
1
  require 'test/unit'
2
2
  require_relative '../src/data_model'
3
3
  include DataModel
4
-
5
- DataModel::domain :TestMetamodel do
6
-
7
- datatype :BasicType do
8
- attribute :id, String
9
- end
10
-
11
- datatype :Table, description: "Test type" do
12
- MULT = [0..10]
13
- DESC = "table of values"
14
- attribute :vals, Integer,
15
- multiplicity: MULT,
16
- :description => DESC
17
- attribute :morevals, String, 2..5, "array of strings"
18
- end
19
-
20
- datatype :ReferencingType do
21
- attribute :id, String
22
- attribute :mate, TestMetamodel::BasicType
23
- end
24
-
25
- datatype :DerivedType, extends: TestMetamodel::ReferencingType do
26
- attribute :more, String
27
- end
28
-
29
- datatype :DerivedTypeNamingClass, extends: TestMetamodel::ReferencingType do
30
- attribute :othermore, String
31
- end
32
-
33
- datatype :Empty do
34
-
35
- end
36
-
37
- end
4
+ require 'test_model'
38
5
 
39
6
  class DataModelTest < Test::Unit::TestCase
40
-
41
-
7
+
42
8
  def test_metamodel
43
- assert(contains(TestMetamodel::BasicType, :id), 'has id attribute')
44
- id_t = TestMetamodel::BasicType.attributes[:id]
45
- assert_equal(1..1, TestMetamodel::BasicType.attributes[:id][:multiplicity], "has default multiplicity")
9
+ assert(contains(TestModel::BasicType, :id), 'has id attribute')
10
+ id_t = TestModel::BasicType.attributes[:id]
11
+ assert_equal(1..1, TestModel::BasicType.attributes[:id][:multiplicity], "has default multiplicity")
46
12
  assert(id_t[:type] == String)
47
13
 
48
- assert_equal(MULT, TestMetamodel::Table.attributes[:vals][:multiplicity]);
49
- assert_equal(2..5, TestMetamodel::Table.attributes[:morevals][:multiplicity]);
50
- assert_equal("Test type", TestMetamodel::Table.description);
14
+ assert_equal(MULT, TestModel::Table.attributes[:vals][:multiplicity]);
15
+ assert_equal(2..5, TestModel::Table.attributes[:morevals][:multiplicity]);
16
+ assert_equal("Test type", TestModel::Table.description);
51
17
 
52
- assert_equal(MULT, TestMetamodel::Table.attributes[:vals][:multiplicity], "has multiplicity")
53
- assert_equal(DESC, TestMetamodel::Table.attributes[:vals][:description], "has description")
18
+ assert_equal(MULT, TestModel::Table.attributes[:vals][:multiplicity], "has multiplicity")
19
+ assert_equal(DESC, TestModel::Table.attributes[:vals][:description], "has description")
54
20
 
55
- mate_t = TestMetamodel::ReferencingType.attributes[:mate]
56
- assert(mate_t[:type] == TestMetamodel::BasicType)
21
+ mate_t = TestModel::ReferencingType.attributes[:mate]
22
+ assert(mate_t[:type] == TestModel::BasicType)
57
23
 
58
- assert(contains(TestMetamodel::DerivedType, :more), "has derived attribute")
59
- assert(contains(TestMetamodel::DerivedType, :mate), "has derived attribute")
60
- assert(contains(TestMetamodel::DerivedType, :id), "has derived attribute")
61
- assert(contains(TestMetamodel::DerivedTypeNamingClass, :othermore), "has derived attribute")
62
- assert(contains(TestMetamodel::DerivedTypeNamingClass, :id), "has derived attribute")
24
+ assert(contains(TestModel::DerivedType, :more), "has derived attribute")
25
+ assert(contains(TestModel::DerivedType, :mate), "has derived attribute")
26
+ assert(contains(TestModel::DerivedType, :id), "has derived attribute")
63
27
  end
64
28
 
65
- TestMetamodel.new :Test_Model do
66
- table do
67
- vals 1
68
- vals 2
69
- end
70
- referencingtype do
71
- id :owner
72
- mate do
73
- id :content
29
+
30
+ def test_model
31
+ assert_equal(1, TestModel::TESTMODEL.contents[:table][0].attributes[:vals][0], "has vals")
32
+ assert_equal(2, TestModel::TESTMODEL.contents[:table][0].attributes[:vals][1], "has vals")
33
+ assert_equal(:content, TestModel::TESTMODEL.contents[:referencingtype][0].attributes[:mate].attributes[:id], "has vals")
34
+ assert_equal(:content, TestModel::TESTMODEL.contents[:referencingtype][0].mate.id, "has vals")
35
+
36
+ TestModel.new :T2 do
37
+ table do
38
+ for i in 7..9
39
+ vals i
40
+ end
74
41
  end
75
42
  end
43
+
44
+ assert_equal(7, TestModel::T2.table[0].vals[0], "block iterate")
45
+ assert_equal(8, TestModel::T2.table[0].vals[1], "block iterate")
46
+
76
47
  end
77
48
 
78
- def test_model
79
- assert_equal(1, TestMetamodel::Test_Model.contents[:table][0].attributes[:vals][0], "has vals")
80
- assert_equal(2, TestMetamodel::Test_Model.contents[:table][0].attributes[:vals][1], "has vals")
81
- assert_equal(:content, TestMetamodel::Test_Model.contents[:referencingtype][0].attributes[:mate].attributes[:id], "has vals")
82
- assert_equal(:content, TestMetamodel::Test_Model.contents[:referencingtype][0].mate.id, "has vals")
49
+
50
+ def test_kinds
51
+ assert_equal(:Framework, TestModel::TESTMODEL.kindly[0].kind, "kinds")
52
+
53
+ # TODO: assertion on strings that aren't in the selection list
54
+ # assert_raise() do
55
+ # TestModel.new :T3 do
56
+ # kindly {kind :KindNotValid}
57
+ # end
58
+ # end
83
59
  end
84
60
 
85
61
  private
@@ -88,4 +64,6 @@ class DataModelTest < Test::Unit::TestCase
88
64
  type.attributes.keys.one? {|k| k == attr}
89
65
  end
90
66
 
67
+
68
+
91
69
  end
data/test/data_test.rb ADDED
@@ -0,0 +1,26 @@
1
+ require 'test/unit'
2
+ require_relative '../src/data'
3
+ require_relative 'test_model'
4
+ include DataModel
5
+
6
+ class DataTest < Test::Unit::TestCase
7
+
8
+ # Called before every test method runs. Can be used
9
+ # to set up fixture information.
10
+ PATH = "out/test/"
11
+ NAME = "datatest"
12
+
13
+ def setup
14
+ @d = DataFile.new(PATH, NAME)
15
+ if File.file?(@d.filepath)
16
+ File.delete(@d.filepath)
17
+ end
18
+ end
19
+
20
+ def test_dot
21
+ assert_equal("#{PATH}data/#{NAME}.json", @d.filepath, "file name")
22
+ assert(!File.file?(@d.filepath), "no dotfile")
23
+ @d.output( TestModel::TESTMODEL)
24
+ assert(File.file?(@d.filepath), "file created")
25
+ end
26
+ end
data/test/diagram_test.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  require 'test/unit'
2
2
  require_relative '../src/diagram'
3
- require_relative '../model/agreement'
3
+ require_relative 'test_model'
4
4
  include DataModel
5
5
 
6
-
7
6
  class DiagramTest < Test::Unit::TestCase
8
7
 
9
8
  # Called before every test method runs. Can be used
@@ -25,10 +24,8 @@ class DiagramTest < Test::Unit::TestCase
25
24
  assert_equal("out/test/diagrams/d.dot", @d.dotfile, "file format")
26
25
  assert_equal("out/test/images/d.jpg", @d.jpgfile, "file format")
27
26
  assert(!File.file?(@d.dotfile), "no dotfile")
28
- @d.describe( Category)
27
+ @d.describe( TestModel)
29
28
  assert(File.file?(@d.dotfile), "file created")
30
29
  assert(File.file?(@d.jpgfile), "file created")
31
- # TODO test the features in the diagram
32
- @d.describe( Category, Parties)
33
30
  end
34
31
  end
data/test/doc_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'test/unit'
2
2
  require_relative '../src/doc'
3
- require_relative '../model/fm'
3
+ require_relative 'test_model'
4
4
  include DataModel
5
5
 
6
6
  class DocTest < Test::Unit::TestCase
@@ -9,19 +9,25 @@ class DocTest < Test::Unit::TestCase
9
9
  # to set up fixture information.
10
10
  PATH = "out/test/"
11
11
  NAME = "doctest"
12
+ META = "modeldoctest"
12
13
 
13
14
  def setup
14
- @d = Doc.new(PATH, NAME)
15
- if File.file?(@d.docfile)
16
- File.delete(@d.docfile)
15
+ @d = Document.new(PATH, NAME)
16
+ if File.file?(@d.filepath)
17
+ File.delete(@d.filepath)
18
+ end
19
+ @m = Document.new(PATH, META)
20
+ if File.file?(@d.filepath)
21
+ File.delete(@d.filepath)
17
22
  end
18
23
  end
19
24
 
20
-
21
25
  def test_dot
22
- assert_equal("#{PATH}doc/#{NAME}.md", @d.docfile, "file name")
23
- assert(!File.file?(@d.docfile), "no dotfile")
24
- @d.document( Category::FM)
25
- assert(File.file?(@d.docfile), "file created")
26
+ assert_equal("#{PATH}doc/#{NAME}.md", @d.filepath, "file name")
27
+ assert(!File.file?(@d.filepath), "no dotfile")
28
+ @d.document( TestModel::TESTMODEL)
29
+ assert(File.file?(@d.filepath), "file created")
30
+ @m.document_metamodel( TestModel)
31
+ assert(File.file?(@m.filepath), "file created")
26
32
  end
27
33
  end
@@ -0,0 +1,88 @@
1
+ require_relative '../src/data_model'
2
+ include DataModel
3
+
4
+ domain :TestModel do
5
+
6
+ datatype(:ArrayParam,
7
+ description: "Thing") {
8
+ attribute :thingname, String
9
+ }
10
+
11
+ datatype :Table, description: "Test type" do
12
+ MULT = 0..10
13
+ DESC = "table of values"
14
+ attribute :vals, Integer,
15
+ multiplicity: MULT,
16
+ :description => DESC
17
+ attribute :morevals, String, 2..5, "array of strings"
18
+ end
19
+
20
+ datatype :BasicType do
21
+ attribute :id, String
22
+ end
23
+
24
+ datatype :Kindly do
25
+ attribute :kind, Selection( :Framework, :Lot, :Contract), "semantic version id of the form X.Y.Z"
26
+ end
27
+
28
+ datatype :ReferencingType do
29
+ attribute :id, String
30
+ attribute :mate, TestModel::BasicType
31
+ end
32
+
33
+ datatype(:ComplexType,
34
+ description: "Thing with things") {
35
+ attribute :string, String
36
+ attribute :things, TestModel::ArrayParam, ZERO_TO_MANY
37
+ attribute :thing_id, String, ZERO_TO_MANY, links: TestModel::ArrayParam
38
+ attribute :strings, String, ZERO_TO_MANY
39
+ attribute :mustbeafter, Date
40
+ }
41
+
42
+ datatype(:AnotherType,
43
+ description: "Thing with things") {
44
+ attribute :string, String
45
+ }
46
+
47
+ datatype :DerivedType, extends: TestModel::ReferencingType do
48
+ attribute :more, String
49
+ end
50
+
51
+ datatype :Empty do
52
+ end
53
+
54
+ end
55
+
56
+ TestModel.new :TESTMODEL do
57
+
58
+ complextype do
59
+ string "ID1"
60
+ things do
61
+ thingname "thing1"
62
+ end
63
+ things do
64
+ thingname "thing2"
65
+ end
66
+ end
67
+
68
+ anothertype do
69
+ string "Anotherthing"
70
+ end
71
+
72
+ table do
73
+ vals 1
74
+ vals 2
75
+ end
76
+
77
+ referencingtype do
78
+ id :owner
79
+ mate do
80
+ id :content
81
+ end
82
+ end
83
+
84
+ kindly do
85
+ kind :Framework
86
+ end
87
+
88
+ end
@@ -0,0 +1,83 @@
1
+ require 'test/unit'
2
+ require_relative '../src/doc'
3
+ require_relative 'test_model'
4
+ include DataModel
5
+
6
+ class TransformTest < Test::Unit::TestCase
7
+
8
+ def test_model
9
+ the_model = TestModel::TESTMODEL
10
+ transform_datamodel(
11
+ {
12
+ before_model: lambda do |model:|
13
+ assert_equal(model, the_model)
14
+ end,
15
+ before_group: lambda do |name:, depth: 0|
16
+ puts "before group #{name}, #{depth}"
17
+ assert(name = "framework" || name = "lot")
18
+ return :group_context
19
+ end,
20
+ after_group: lambda do |name:, depth:, before:|
21
+ puts "after group #{name}, #{depth}"
22
+ assert(before == :group_context)
23
+ end,
24
+ before_type: lambda do |type:, depth:, index:, total:|
25
+ puts "before type #{type}, #{depth}"
26
+ assert(type.class < DataType)
27
+ return :type_context
28
+ end,
29
+ after_type: lambda do |type:, depth:, before:|
30
+ puts "after type #{type}, #{depth}"
31
+ assert(before == :type_context)
32
+ end,
33
+ before_array: lambda do |name:, decl:, depth:, total:|
34
+ puts "before array #{name}, #{decl}, #{depth}"
35
+ assert(decl.class <= Array)
36
+ return :array_context
37
+ end,
38
+ after_array: lambda do |index:, decl:, depth:, before:|
39
+ puts "after array #{index}, #{decl}, #{depth}, #{before}"
40
+ assert(before == :array_context)
41
+ end,
42
+ attribute: lambda do |id:, val:, depth: 0, type: 0, index:, total:|
43
+ puts "attribute #{id}, #{val}, #{depth}, #{type}"
44
+ end,
45
+ },
46
+ the_model)
47
+ end
48
+
49
+ def test_metamodel
50
+ the_model = TestModel
51
+ transform_metamodel(
52
+ {
53
+ before_model: lambda do |model:|
54
+ assert_equal(model, the_model)
55
+ end,
56
+ before_group: lambda do |name:, depth:|
57
+ assert(false, "shouldn't be called")
58
+ end,
59
+ after_group: lambda do |name:, depth:, before:|
60
+ assert(false, "shouldn't be called")
61
+ end,
62
+ before_type: lambda do |type:, depth:, index:, total:|
63
+ puts "before type #{type}, #{depth}"
64
+ assert(type <= DataType)
65
+ return :type_context
66
+ end,
67
+ after_type: lambda do |type:, depth:, before: nil|
68
+ puts "after type #{type}, #{depth}"
69
+ assert(before == :type_context)
70
+ end,
71
+ before_array: lambda do |index:, decl:, depth:|
72
+ assert(false, "shouldn't be called")
73
+ end,
74
+ after_array: lambda do |index:, decl:, depth:, before:|
75
+ assert(false, "shouldn't be called")
76
+ end,
77
+ attribute: lambda do |id:, val:, depth:, type:, index:, total:|
78
+ puts "attribute #{id}, #{val}, #{depth}, #{type}"
79
+ end,
80
+ },
81
+ the_model)
82
+ end
83
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: agreement-design-prototype
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - CCS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-09 00:00:00.000000000 Z
11
+ date: 2018-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -35,22 +35,35 @@ files:
35
35
  - "./Rakefile"
36
36
  - "./agreement-design.gemspec"
37
37
  - "./build/build_models.rb"
38
- - "./gen/diagrams/data_model.dot"
39
- - "./gen/doc/frameworks.md"
38
+ - "./gen/data/data.json"
39
+ - "./gen/data/data.yaml"
40
+ - "./gen/data/fm_agreements.jsonlines"
41
+ - "./gen/data/fm_catalogue.jsonlines"
42
+ - "./gen/diagrams/metamodel.dot"
43
+ - "./gen/doc/data.md"
40
44
  - "./gen/doc/metamodel.md"
41
- - "./gen/images/data_model.jpg"
45
+ - "./gen/images/metamodel.jpg"
42
46
  - "./model/agreement.rb"
43
47
  - "./model/fm.rb"
48
+ - "./model/geographic.rb"
44
49
  - "./model/party.rb"
50
+ - "./out/test/data/datatest.json"
45
51
  - "./out/test/diagrams/d.dot"
46
52
  - "./out/test/doc/doctest.md"
53
+ - "./out/test/doc/modeldoctest.md"
47
54
  - "./out/test/images/d.jpg"
55
+ - "./src/api.rb"
56
+ - "./src/data.rb"
48
57
  - "./src/data_model.rb"
49
58
  - "./src/diagram.rb"
50
59
  - "./src/doc.rb"
60
+ - "./src/transform.rb"
51
61
  - "./test/data_model_test.rb"
62
+ - "./test/data_test.rb"
52
63
  - "./test/diagram_test.rb"
53
64
  - "./test/doc_test.rb"
65
+ - "./test/test_model.rb"
66
+ - "./test/transform_test.rb"
54
67
  homepage: https://github.com/Crown-Commercial-Service/cmp-design-prototype/agreement-design
55
68
  licenses:
56
69
  - MIT
@@ -79,4 +92,7 @@ summary: Agreement prototype .
79
92
  test_files:
80
93
  - "./test/diagram_test.rb"
81
94
  - "./test/data_model_test.rb"
95
+ - "./test/data_test.rb"
82
96
  - "./test/doc_test.rb"
97
+ - "./test/transform_test.rb"
98
+ - "./test/test_model.rb"