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.
- checksums.yaml +4 -4
- data/README.md +15 -0
- data/agreement-design.gemspec +2 -1
- data/build/build_models.rb +24 -9
- data/gen/data/data.json +1 -0
- data/gen/data/data.yaml +46 -0
- data/gen/data/fm_agreements.jsonlines +2 -0
- data/gen/data/fm_catalogue.jsonlines +1 -0
- data/gen/diagrams/metamodel.dot +45 -0
- data/gen/doc/data.md +44 -0
- data/gen/doc/metamodel.md +99 -57
- data/gen/images/metamodel.jpg +0 -0
- data/model/agreement.rb +95 -43
- data/model/fm.rb +56 -24
- data/model/geographic.rb +30 -0
- data/model/party.rb +14 -12
- data/out/test/data/datatest.json +1 -0
- data/out/test/diagrams/d.dot +16 -30
- data/out/test/doc/doctest.md +17 -19
- data/out/test/doc/modeldoctest.md +62 -0
- data/out/test/images/d.jpg +0 -0
- data/src/api.rb +33 -0
- data/src/data.rb +89 -0
- data/src/data_model.rb +102 -38
- data/src/diagram.rb +61 -95
- data/src/doc.rb +55 -151
- data/src/transform.rb +144 -0
- data/test/data_model_test.rb +43 -65
- data/test/data_test.rb +26 -0
- data/test/diagram_test.rb +2 -5
- data/test/doc_test.rb +15 -9
- data/test/test_model.rb +88 -0
- data/test/transform_test.rb +83 -0
- metadata +21 -5
- data/gen/diagrams/data_model.dot +0 -34
- data/gen/doc/frameworks.md +0 -19
- data/gen/images/data_model.jpg +0 -0
    
        data/test/data_model_test.rb
    CHANGED
    
    | @@ -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( | 
| 44 | 
            -
                id_t =  | 
| 45 | 
            -
                assert_equal(1..1,  | 
| 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,  | 
| 49 | 
            -
                assert_equal(2..5,  | 
| 50 | 
            -
                assert_equal("Test type",  | 
| 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,  | 
| 53 | 
            -
                assert_equal(DESC,  | 
| 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 =  | 
| 56 | 
            -
                assert(mate_t[:type] ==  | 
| 21 | 
            +
                mate_t = TestModel::ReferencingType.attributes[:mate]
         | 
| 22 | 
            +
                assert(mate_t[:type] == TestModel::BasicType)
         | 
| 57 23 |  | 
| 58 | 
            -
                assert(contains( | 
| 59 | 
            -
                assert(contains( | 
| 60 | 
            -
                assert(contains( | 
| 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 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
                 | 
| 70 | 
            -
                referencingtype  | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 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 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
                assert_equal( | 
| 81 | 
            -
             | 
| 82 | 
            -
                 | 
| 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 ' | 
| 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(  | 
| 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 ' | 
| 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 =  | 
| 15 | 
            -
                if File.file?(@d. | 
| 16 | 
            -
                  File.delete(@d. | 
| 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. | 
| 23 | 
            -
                assert(!File.file?(@d. | 
| 24 | 
            -
                @d.document(  | 
| 25 | 
            -
                assert(File.file?(@d. | 
| 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
         | 
    
        data/test/test_model.rb
    ADDED
    
    | @@ -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. | 
| 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- | 
| 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/ | 
| 39 | 
            -
            - "./gen/ | 
| 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/ | 
| 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"
         |