expressir 0.2.21 → 1.0.0

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 (149) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +7 -6
  3. data/.github/workflows/release.yml +22 -6
  4. data/.gitignore +2 -2
  5. data/demo.rb +5 -5
  6. data/exe/format +10 -73
  7. data/exe/format-test +81 -0
  8. data/expressir.gemspec +0 -1
  9. data/ext/express-parser/extconf.rb +1 -1
  10. data/lib/expressir.rb +0 -1
  11. data/lib/expressir/cli.rb +0 -6
  12. data/lib/expressir/{express_exp → express}/cache.rb +3 -6
  13. data/lib/expressir/{express_exp → express}/formatter.rb +84 -68
  14. data/lib/expressir/express/hyperlink_formatter.rb +22 -0
  15. data/lib/expressir/express/model_visitor.rb +23 -0
  16. data/lib/expressir/{express_exp → express}/parser.rb +16 -5
  17. data/lib/expressir/express/resolve_references_model_visitor.rb +29 -0
  18. data/lib/expressir/{express_exp → express}/schema_head_formatter.rb +1 -1
  19. data/lib/expressir/{express_exp → express}/visitor.rb +67 -44
  20. data/lib/expressir/model.rb +5 -3
  21. data/lib/expressir/model/attribute.rb +13 -6
  22. data/lib/expressir/model/cache.rb +2 -2
  23. data/lib/expressir/model/constant.rb +10 -3
  24. data/lib/expressir/model/entity.rb +18 -16
  25. data/lib/expressir/model/enumeration_item.rb +8 -1
  26. data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -2
  27. data/lib/expressir/model/expressions/aggregate_item.rb +2 -2
  28. data/lib/expressir/model/expressions/attribute_reference.rb +2 -2
  29. data/lib/expressir/model/expressions/binary_expression.rb +3 -3
  30. data/lib/expressir/model/expressions/call.rb +3 -3
  31. data/lib/expressir/model/expressions/entity_constructor.rb +3 -3
  32. data/lib/expressir/model/expressions/group_reference.rb +2 -2
  33. data/lib/expressir/model/expressions/index_reference.rb +3 -3
  34. data/lib/expressir/model/expressions/interval.rb +5 -5
  35. data/lib/expressir/model/expressions/query_expression.rb +6 -4
  36. data/lib/expressir/model/expressions/simple_reference.rb +5 -1
  37. data/lib/expressir/model/expressions/unary_expression.rb +2 -2
  38. data/lib/expressir/model/function.rb +23 -21
  39. data/lib/expressir/model/identifier.rb +6 -3
  40. data/lib/expressir/model/interface.rb +4 -4
  41. data/lib/expressir/model/interface_item.rb +2 -2
  42. data/lib/expressir/model/interfaced_item.rb +10 -9
  43. data/lib/expressir/model/literals/binary.rb +1 -1
  44. data/lib/expressir/model/literals/integer.rb +1 -1
  45. data/lib/expressir/model/literals/logical.rb +1 -1
  46. data/lib/expressir/model/literals/real.rb +1 -1
  47. data/lib/expressir/model/literals/string.rb +2 -2
  48. data/lib/expressir/model/model_element.rb +39 -27
  49. data/lib/expressir/model/parameter.rb +10 -3
  50. data/lib/expressir/model/procedure.rb +22 -20
  51. data/lib/expressir/model/remark_item.rb +15 -0
  52. data/lib/expressir/model/repository.rb +2 -2
  53. data/lib/expressir/model/rule.rb +27 -25
  54. data/lib/expressir/model/schema.rb +24 -20
  55. data/lib/expressir/model/schema_version.rb +15 -0
  56. data/lib/expressir/model/schema_version_item.rb +15 -0
  57. data/lib/expressir/model/statements/alias.rb +7 -5
  58. data/lib/expressir/model/statements/assignment.rb +2 -2
  59. data/lib/expressir/model/statements/call.rb +3 -3
  60. data/lib/expressir/model/statements/case.rb +4 -4
  61. data/lib/expressir/model/statements/case_action.rb +3 -3
  62. data/lib/expressir/model/statements/compound.rb +2 -2
  63. data/lib/expressir/model/statements/if.rb +5 -5
  64. data/lib/expressir/model/statements/repeat.rb +11 -9
  65. data/lib/expressir/model/statements/return.rb +1 -1
  66. data/lib/expressir/model/subtype_constraint.rb +13 -6
  67. data/lib/expressir/model/type.rb +12 -10
  68. data/lib/expressir/model/types/aggregate.rb +9 -2
  69. data/lib/expressir/model/types/array.rb +5 -5
  70. data/lib/expressir/model/types/bag.rb +3 -3
  71. data/lib/expressir/model/types/binary.rb +2 -2
  72. data/lib/expressir/model/types/enumeration.rb +5 -7
  73. data/lib/expressir/model/types/generic.rb +8 -1
  74. data/lib/expressir/model/types/generic_entity.rb +8 -1
  75. data/lib/expressir/model/types/list.rb +4 -4
  76. data/lib/expressir/model/types/real.rb +1 -1
  77. data/lib/expressir/model/types/select.rb +6 -8
  78. data/lib/expressir/model/types/set.rb +3 -3
  79. data/lib/expressir/model/types/string.rb +2 -2
  80. data/lib/expressir/model/unique_rule.rb +26 -0
  81. data/lib/expressir/model/variable.rb +10 -3
  82. data/lib/expressir/model/where_rule.rb +26 -0
  83. data/lib/expressir/version.rb +1 -1
  84. data/rakelib/cross-ruby.rake +1 -1
  85. data/spec/expressir/{express_exp → express}/cache_spec.rb +9 -9
  86. data/spec/expressir/express/formatter_spec.rb +127 -0
  87. data/spec/expressir/{express_exp → express}/parser_spec.rb +24 -24
  88. data/spec/expressir/model/model_element_spec.rb +112 -60
  89. data/{original/examples → spec}/syntax/multiple.exp +1 -1
  90. data/{original/examples → spec}/syntax/multiple.yaml +19 -5
  91. data/{original/examples → spec}/syntax/multiple_formatted.exp +1 -1
  92. data/{original/examples → spec}/syntax/multiple_hyperlink_formatted.exp +4 -4
  93. data/{original/examples → spec}/syntax/multiple_schema_head_hyperlink_formatted.exp +1 -1
  94. data/{original/examples → spec}/syntax/remark.exp +12 -10
  95. data/{original/examples → spec}/syntax/remark.yaml +36 -16
  96. data/{original/examples → spec}/syntax/remark_formatted.exp +3 -1
  97. data/spec/syntax/single.exp +4 -0
  98. data/spec/syntax/single.yaml +18 -0
  99. data/spec/syntax/single_formatted.exp +10 -0
  100. data/spec/syntax/single_formatted.yaml +36 -0
  101. data/{original/examples → spec}/syntax/syntax.exp +11 -11
  102. data/{original/examples → spec}/syntax/syntax.yaml +205 -108
  103. data/{original/examples → spec}/syntax/syntax_formatted.exp +11 -11
  104. data/spec/syntax/syntax_hyperlink_formatted.exp +902 -0
  105. data/{original/examples → spec}/syntax/syntax_schema_head_formatted.exp +1 -1
  106. metadata +40 -82
  107. data/lib/expressir/express.rb +0 -11
  108. data/lib/expressir/express/aggregate_dimension.rb +0 -38
  109. data/lib/expressir/express/attribute.rb +0 -15
  110. data/lib/expressir/express/comment.rb +0 -7
  111. data/lib/expressir/express/defined_type.rb +0 -36
  112. data/lib/expressir/express/derived.rb +0 -65
  113. data/lib/expressir/express/derived_aggregate.rb +0 -43
  114. data/lib/expressir/express/entity.rb +0 -137
  115. data/lib/expressir/express/explicit.rb +0 -70
  116. data/lib/expressir/express/explicit_aggregate.rb +0 -46
  117. data/lib/expressir/express/explicit_or_derived.rb +0 -16
  118. data/lib/expressir/express/global_rule.rb +0 -44
  119. data/lib/expressir/express/interface_specification.rb +0 -51
  120. data/lib/expressir/express/interfaced_item.rb +0 -38
  121. data/lib/expressir/express/inverse.rb +0 -46
  122. data/lib/expressir/express/inverse_aggregate.rb +0 -37
  123. data/lib/expressir/express/model_element.rb +0 -7
  124. data/lib/expressir/express/named_type.rb +0 -19
  125. data/lib/expressir/express/remark.rb +0 -8
  126. data/lib/expressir/express/repository.rb +0 -306
  127. data/lib/expressir/express/schema_definition.rb +0 -96
  128. data/lib/expressir/express/subtype_constraint.rb +0 -14
  129. data/lib/expressir/express/type.rb +0 -26
  130. data/lib/expressir/express/type_aggregate.rb +0 -42
  131. data/lib/expressir/express/type_enum.rb +0 -29
  132. data/lib/expressir/express/type_parser.rb +0 -45
  133. data/lib/expressir/express/type_select.rb +0 -82
  134. data/lib/expressir/express/unique_rule.rb +0 -35
  135. data/lib/expressir/express/where_rule.rb +0 -32
  136. data/lib/expressir/express_exp/hyperlink_formatter.rb +0 -27
  137. data/lib/expressir/express_parser.rb +0 -30
  138. data/lib/expressir/model/informal_proposition.rb +0 -18
  139. data/lib/expressir/model/unique.rb +0 -19
  140. data/lib/expressir/model/where.rb +0 -19
  141. data/lib/expressir/parser.rb +0 -6
  142. data/lib/expressir/parser/owl_parser.rb +0 -8
  143. data/original/examples/syntax/single.exp +0 -3
  144. data/original/examples/syntax/single.yaml +0 -9
  145. data/original/examples/syntax/single_formatted.exp +0 -6
  146. data/original/examples/syntax/single_formatted.yaml +0 -19
  147. data/spec/acceptance/express_to_owl_spec.rb +0 -18
  148. data/spec/expressir/express/repository_spec.rb +0 -25
  149. data/spec/expressir/express_exp/formatter_spec.rb +0 -111
@@ -1,4 +1,4 @@
1
- SCHEMA syntax_schema 'version';
1
+ SCHEMA syntax_schema '{ISO standard 10303 part(41) object(1) version(8)}';
2
2
 
3
3
  USE FROM contract_schema;
4
4
  USE FROM contract_schema
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expressir
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.21
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-12 00:00:00.000000000 Z
11
+ date: 2021-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: nokogiri
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.10'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '1.10'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: thor
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -190,6 +176,7 @@ files:
190
176
  - docs/development.md
191
177
  - exe/expressir
192
178
  - exe/format
179
+ - exe/format-test
193
180
  - exe/generate-parser
194
181
  - expressir.gemspec
195
182
  - ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt
@@ -539,42 +526,14 @@ files:
539
526
  - lib/expressir/cli.rb
540
527
  - lib/expressir/cli/ui.rb
541
528
  - lib/expressir/config.rb
542
- - lib/expressir/express.rb
543
- - lib/expressir/express/aggregate_dimension.rb
544
- - lib/expressir/express/attribute.rb
545
- - lib/expressir/express/comment.rb
546
- - lib/expressir/express/defined_type.rb
547
- - lib/expressir/express/derived.rb
548
- - lib/expressir/express/derived_aggregate.rb
549
- - lib/expressir/express/entity.rb
550
- - lib/expressir/express/explicit.rb
551
- - lib/expressir/express/explicit_aggregate.rb
552
- - lib/expressir/express/explicit_or_derived.rb
553
- - lib/expressir/express/global_rule.rb
554
- - lib/expressir/express/interface_specification.rb
555
- - lib/expressir/express/interfaced_item.rb
556
- - lib/expressir/express/inverse.rb
557
- - lib/expressir/express/inverse_aggregate.rb
558
- - lib/expressir/express/model_element.rb
559
- - lib/expressir/express/named_type.rb
560
- - lib/expressir/express/remark.rb
561
- - lib/expressir/express/repository.rb
562
- - lib/expressir/express/schema_definition.rb
563
- - lib/expressir/express/subtype_constraint.rb
564
- - lib/expressir/express/type.rb
565
- - lib/expressir/express/type_aggregate.rb
566
- - lib/expressir/express/type_enum.rb
567
- - lib/expressir/express/type_parser.rb
568
- - lib/expressir/express/type_select.rb
569
- - lib/expressir/express/unique_rule.rb
570
- - lib/expressir/express/where_rule.rb
571
- - lib/expressir/express_exp/cache.rb
572
- - lib/expressir/express_exp/formatter.rb
573
- - lib/expressir/express_exp/hyperlink_formatter.rb
574
- - lib/expressir/express_exp/parser.rb
575
- - lib/expressir/express_exp/schema_head_formatter.rb
576
- - lib/expressir/express_exp/visitor.rb
577
- - lib/expressir/express_parser.rb
529
+ - lib/expressir/express/cache.rb
530
+ - lib/expressir/express/formatter.rb
531
+ - lib/expressir/express/hyperlink_formatter.rb
532
+ - lib/expressir/express/model_visitor.rb
533
+ - lib/expressir/express/parser.rb
534
+ - lib/expressir/express/resolve_references_model_visitor.rb
535
+ - lib/expressir/express/schema_head_formatter.rb
536
+ - lib/expressir/express/visitor.rb
578
537
  - lib/expressir/model.rb
579
538
  - lib/expressir/model/attribute.rb
580
539
  - lib/expressir/model/cache.rb
@@ -595,7 +554,6 @@ files:
595
554
  - lib/expressir/model/expressions/unary_expression.rb
596
555
  - lib/expressir/model/function.rb
597
556
  - lib/expressir/model/identifier.rb
598
- - lib/expressir/model/informal_proposition.rb
599
557
  - lib/expressir/model/interface.rb
600
558
  - lib/expressir/model/interface_item.rb
601
559
  - lib/expressir/model/interfaced_item.rb
@@ -607,9 +565,12 @@ files:
607
565
  - lib/expressir/model/model_element.rb
608
566
  - lib/expressir/model/parameter.rb
609
567
  - lib/expressir/model/procedure.rb
568
+ - lib/expressir/model/remark_item.rb
610
569
  - lib/expressir/model/repository.rb
611
570
  - lib/expressir/model/rule.rb
612
571
  - lib/expressir/model/schema.rb
572
+ - lib/expressir/model/schema_version.rb
573
+ - lib/expressir/model/schema_version_item.rb
613
574
  - lib/expressir/model/statements/alias.rb
614
575
  - lib/expressir/model/statements/assignment.rb
615
576
  - lib/expressir/model/statements/call.rb
@@ -640,11 +601,9 @@ files:
640
601
  - lib/expressir/model/types/select.rb
641
602
  - lib/expressir/model/types/set.rb
642
603
  - lib/expressir/model/types/string.rb
643
- - lib/expressir/model/unique.rb
604
+ - lib/expressir/model/unique_rule.rb
644
605
  - lib/expressir/model/variable.rb
645
- - lib/expressir/model/where.rb
646
- - lib/expressir/parser.rb
647
- - lib/expressir/parser/owl_parser.rb
606
+ - lib/expressir/model/where_rule.rb
648
607
  - lib/expressir/version.rb
649
608
  - original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.exp
650
609
  - original/examples/ap233/ap233e1_arm_lf_stepmod-2010-11-12.owl
@@ -675,22 +634,6 @@ files:
675
634
  - original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl
676
635
  - original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi
677
636
  - original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml
678
- - original/examples/syntax/multiple.exp
679
- - original/examples/syntax/multiple.yaml
680
- - original/examples/syntax/multiple_formatted.exp
681
- - original/examples/syntax/multiple_hyperlink_formatted.exp
682
- - original/examples/syntax/multiple_schema_head_hyperlink_formatted.exp
683
- - original/examples/syntax/remark.exp
684
- - original/examples/syntax/remark.yaml
685
- - original/examples/syntax/remark_formatted.exp
686
- - original/examples/syntax/single.exp
687
- - original/examples/syntax/single.yaml
688
- - original/examples/syntax/single_formatted.exp
689
- - original/examples/syntax/single_formatted.yaml
690
- - original/examples/syntax/syntax.exp
691
- - original/examples/syntax/syntax.yaml
692
- - original/examples/syntax/syntax_formatted.exp
693
- - original/examples/syntax/syntax_schema_head_formatted.exp
694
637
  - original/exp2ruby.rb
695
638
  - original/expsm.rb
696
639
  - original/mapping_owl.rb
@@ -699,16 +642,31 @@ files:
699
642
  - original/mapping_uml2_eclipse.rb
700
643
  - original/reeper.rb
701
644
  - rakelib/cross-ruby.rake
702
- - spec/acceptance/express_to_owl_spec.rb
703
645
  - spec/acceptance/version_spec.rb
704
- - spec/expressir/express/repository_spec.rb
705
- - spec/expressir/express_exp/cache_spec.rb
706
- - spec/expressir/express_exp/formatter_spec.rb
707
- - spec/expressir/express_exp/parser_spec.rb
646
+ - spec/expressir/express/cache_spec.rb
647
+ - spec/expressir/express/formatter_spec.rb
648
+ - spec/expressir/express/parser_spec.rb
708
649
  - spec/expressir/model/model_element_spec.rb
709
650
  - spec/expressr_spec.rb
710
651
  - spec/spec_helper.rb
711
652
  - spec/support/console_helper.rb
653
+ - spec/syntax/multiple.exp
654
+ - spec/syntax/multiple.yaml
655
+ - spec/syntax/multiple_formatted.exp
656
+ - spec/syntax/multiple_hyperlink_formatted.exp
657
+ - spec/syntax/multiple_schema_head_hyperlink_formatted.exp
658
+ - spec/syntax/remark.exp
659
+ - spec/syntax/remark.yaml
660
+ - spec/syntax/remark_formatted.exp
661
+ - spec/syntax/single.exp
662
+ - spec/syntax/single.yaml
663
+ - spec/syntax/single_formatted.exp
664
+ - spec/syntax/single_formatted.yaml
665
+ - spec/syntax/syntax.exp
666
+ - spec/syntax/syntax.yaml
667
+ - spec/syntax/syntax_formatted.exp
668
+ - spec/syntax/syntax_hyperlink_formatted.exp
669
+ - spec/syntax/syntax_schema_head_formatted.exp
712
670
  homepage: https://github.com/lutaml/expressir
713
671
  licenses:
714
672
  - MIT
@@ -716,7 +674,7 @@ metadata:
716
674
  homepage_uri: https://github.com/lutaml/expressir
717
675
  source_code_uri: https://github.com/lutaml/expressir
718
676
  changelog_uri: https://github.com/lutaml/expressir/releases
719
- post_install_message:
677
+ post_install_message:
720
678
  rdoc_options: []
721
679
  require_paths:
722
680
  - lib
@@ -731,8 +689,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
731
689
  - !ruby/object:Gem::Version
732
690
  version: '0'
733
691
  requirements: []
734
- rubygems_version: 3.2.0
735
- signing_key:
692
+ rubygems_version: 3.0.3.1
693
+ signing_key:
736
694
  specification_version: 4
737
695
  summary: ISO EXPRESS parser in Ruby, tools for accessing EXPRESS data models.
738
696
  test_files: []
@@ -1,11 +0,0 @@
1
- require "nokogiri"
2
- require "expressir/express/repository"
3
- require "expressir/express/schema_definition"
4
-
5
- module Expressir
6
- module Express
7
- def self.from_xml(file)
8
- Expressir::Express::Repository.from_xml(file)
9
- end
10
- end
11
- end
@@ -1,38 +0,0 @@
1
- module Expressir
2
- module Express
3
- class AggregateDimension
4
- attr_accessor :aggrtype, :lower, :upper, :isUnique, :isOptionalArray
5
-
6
- def initialize(options = {})
7
- @aggrtype = "SET"
8
- @lower = "0"
9
- @upper = "?"
10
- @isUnique = false
11
- @isOptionalArray = false
12
-
13
- @options = options
14
- end
15
-
16
- def parse
17
- document = @options.fetch(:document, nil)
18
- extract_attributes(document) if document
19
-
20
- self
21
- end
22
-
23
- def self.parse(document)
24
- new(document: document).parse
25
- end
26
-
27
- private
28
-
29
- def extract_attributes(document)
30
- @aggrtype = document.attributes["type"]
31
- @lower = document.attributes["lower"]
32
- @upper = document.attributes["upper"]
33
- @isUnique = document.attributes["unique"] == "YES"
34
- @isOptionalArray = document.attributes["optional"] == "YES"
35
- end
36
- end
37
- end
38
- end
@@ -1,15 +0,0 @@
1
- require "expressir/express/model_element"
2
-
3
- module Expressir
4
- module Express
5
- class Attribute < ModelElement
6
- attr_accessor :name, :entity, :domain, :redeclare_entity,
7
- :redeclare_oldname
8
-
9
- def initialize
10
- @redeclare_entity = nil
11
- @redeclare_oldname = nil
12
- end
13
- end
14
- end
15
- end
@@ -1,7 +0,0 @@
1
- module Expressir
2
- module Express
3
- class Comment
4
- attr_accessor :comment, :ModelElement
5
- end
6
- end
7
- end
@@ -1,36 +0,0 @@
1
- require "expressir/express/named_type"
2
-
3
- module Expressir
4
- module Express
5
- class DefinedType < NamedType
6
- def initialize(options = {})
7
- @options = options
8
- @schema = options.fetch(:schema)
9
- end
10
-
11
- def parse
12
- document = @options.fetch(:document)
13
- extract_type_attributes(document)
14
-
15
- self
16
- end
17
-
18
- def self.parse(document, schema)
19
- new(document: document, schema: schema).parse
20
- end
21
-
22
- private
23
-
24
- def extract_type_attributes(document)
25
- @name = document.attributes["name"].to_s
26
- @wheres = extract_where_rules(document)
27
- end
28
-
29
- def extract_where_rules(document)
30
- document.xpath("where").map do |where|
31
- Express::WhereRule.parse(where)
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,65 +0,0 @@
1
- module Expressir
2
- module Express
3
- class Derived < ExplicitOrDerived
4
- attr_accessor :expression
5
-
6
- def initialize(options = {})
7
- @options = options
8
- @entity = options.fetch(:entity, nil)
9
- end
10
-
11
- def parse
12
- document = @options.fetch(:document, nil)
13
- extract_common_attributes(document)
14
- extract_type_specific_attributes(document)
15
-
16
- self
17
- end
18
-
19
- def self.parse(document, entity)
20
- new(document: document, entity: entity).parse
21
- end
22
-
23
- private
24
-
25
- def extract_type_specific_attributes(document); end
26
-
27
- def extract_common_attributes(document)
28
- @name = document.attributes["name"].to_s
29
- @expression = document.attributes["expression"].to_s
30
- @domain = extract_domain_name(document.xpath("typename"))
31
-
32
- extract_builtintype_attributes(document)
33
- extract_redeclaration_attributes(document)
34
- end
35
-
36
- def extract_domain_name(typename)
37
- unless typename.empty?
38
- typename.first.attributes["name"].to_s
39
- end
40
- end
41
-
42
- def extract_redeclaration_attributes(document)
43
- redeclaration = document.xpath("redeclaration").first
44
-
45
- if redeclaration
46
- @redeclare_entity = redeclaration.attributes["entity-ref"].to_s
47
- old_name = redeclaration.attributes["old_name"]
48
- @redeclare_oldname = old_name.to_s if old_name
49
- end
50
- end
51
-
52
- def extract_builtintype_attributes(document)
53
- builtin_type = document.xpath("builtintype").first
54
-
55
- if builtin_type
56
- @isBuiltin = true
57
- @domain = builtin_type.attributes["type"].to_s
58
- @width = builtin_type.attributes["width"].to_s
59
- @fixed = builtin_type.attributes["fixed"] == "YES"
60
- @precision = builtin_type.attributes["precision"].to_s
61
- end
62
- end
63
- end
64
- end
65
- end
@@ -1,43 +0,0 @@
1
- module Expressir
2
- module Express
3
- class DerivedAggregate < Derived
4
- attr_accessor :rank, :dimensions
5
-
6
- def initialize(options = {})
7
- @rank = 0
8
- @dimensions = []
9
-
10
- super(options)
11
- end
12
-
13
- private
14
-
15
- def extract_type_specific_attributes(document)
16
- @dimensions = document.xpath("aggregate").map do |aggregate|
17
- Express::AggregateDimension.parse(aggregate)
18
- end
19
-
20
- @rank = @dimensions.size
21
- extract_inverse_aggregate(document)
22
- end
23
-
24
- # @todo: Non existance attributes
25
- #
26
- # In the codebase, they are trying to add couple of aggregate
27
- # dimensions related attributes that was never a part of the
28
- # Explict class, but for consistency we are keeping those as
29
- # it is for now. let's revist those later and fix it.
30
- #
31
- def extract_inverse_aggregate(document)
32
- aggregates = document.xpath("inverse.aggregate")
33
-
34
- if !aggregates.empty?
35
- dimension = Express::AggregateDimension.parse(aggregates.first)
36
- @aggrtype = dimension.aggrtype
37
- @lower = dimension.lower
38
- @upper = dimension.upper
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,137 +0,0 @@
1
- require "expressir/express/explicit"
2
- require "expressir/express/inverse"
3
- require "expressir/express/derived"
4
- require "expressir/express/named_type"
5
- require "expressir/express/where_rule"
6
- require "expressir/express/unique_rule"
7
-
8
- require "expressir/express/explicit_aggregate"
9
- require "expressir/express/inverse_aggregate"
10
- require "expressir/express/derived_aggregate"
11
-
12
- module Expressir
13
- module Express
14
- class Entity < NamedType
15
- attr_accessor :supertypes, :attributes, :isAbs, :superexpression,
16
- :uniques, :subtypes_array, :supertypes_array, :attributes_all_array,
17
- :supertypes_all
18
-
19
- def initialize(document: nil, schema: nil, **options)
20
- @isAbs = false
21
- @attributes = []
22
- @uniques = []
23
- @wheres = []
24
- @subtypes_array = []
25
- @supertypes_array = []
26
- @attributes_all_array = []
27
- @supertypes = nil
28
- @supertypes_all = nil
29
- @superexpression = nil
30
- @selectedBy = []
31
-
32
- @schema = schema
33
- @document = document
34
- @options = options
35
- end
36
-
37
- def find_attr_by_name( attrname )
38
- for attribute in attributes
39
- if attrname == attribute.name
40
- return attribute
41
- end
42
- end
43
- return nil
44
- end
45
-
46
- def find_attr_by_name_full( attrname )
47
- attr = find_attr_by_name( attrname )
48
- if attr != nil
49
- return attr
50
- end
51
- for supertype in supertypes_array
52
- attr = supertype.find_attr_by_name_full (attrname)
53
- if attr != nil
54
- return attr
55
- end
56
- end
57
- end
58
-
59
- def parse
60
- extract_attributes(@document, @schema)
61
- self
62
- end
63
-
64
- def self.parse(document, schema)
65
- new(document: document, schema: schema).parse
66
- end
67
-
68
- private
69
-
70
- def extract_attributes(document, schema)
71
- @name = document.attributes["name"].to_s
72
- @supertypes = document.attributes["supertypes"]
73
- @superexpression = document.attributes["super.expression"]
74
-
75
- @wheres = extract_where_rules(document)
76
- @uniques = extract_unique_rules(document)
77
-
78
- @isAbs = document.attributes["supertypes"] == "YES" ||
79
- document.attributes["abstract.entity"] == "YES"
80
-
81
- @attributes = [
82
- extract_eplicits(document),
83
- extract_inverses(document),
84
- extract_derivedes(document),
85
- ].flatten
86
- end
87
-
88
- def extract_eplicits(document)
89
- document.xpath("explicit").map do |explicit|
90
- explicit_type = Express::Explicit
91
-
92
- if !explicit.xpath("aggregate").empty?
93
- explicit_type = Express::ExplicitAggregate
94
- end
95
-
96
- explicit_type.parse(explicit, self)
97
- end
98
- end
99
-
100
- def extract_inverses(document)
101
- document.xpath("inverse").map do |inverse|
102
- inverse_type = Express::Inverse
103
-
104
- if !inverse.xpath("inverse.aggregate").empty?
105
- inverse_type = Express::InverseAggregate
106
- end
107
-
108
- inverse_type.parse(inverse, self)
109
- end
110
- end
111
-
112
- def extract_derivedes(document)
113
- document.xpath("derived").map do |derived|
114
- derived_type = Express::Derived
115
-
116
- if !derived.xpath("aggregate").empty?
117
- derived_type = Express::DerivedAggregate
118
- end
119
-
120
- derived_type.parse(derived, self)
121
- end
122
- end
123
-
124
- def extract_unique_rules(document)
125
- document.xpath("unique").map do |unique|
126
- Express::UniqueRule.parse(unique)
127
- end
128
- end
129
-
130
- def extract_where_rules(document)
131
- document.xpath("where").map do |where|
132
- Express::WhereRule.parse(where)
133
- end
134
- end
135
- end
136
- end
137
- end