expressir 0.2.21-arm64-darwin → 1.0.0-arm64-darwin

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 (153) 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/lib/expressir.rb +0 -1
  10. data/lib/expressir/cli.rb +0 -6
  11. data/lib/expressir/{express_exp → express}/2.4/express_parser.bundle +0 -0
  12. data/lib/expressir/{express_exp → express}/2.5/express_parser.bundle +0 -0
  13. data/lib/expressir/{express_exp → express}/2.6/express_parser.bundle +0 -0
  14. data/lib/expressir/{express_exp → express}/2.7/express_parser.bundle +0 -0
  15. data/lib/expressir/{express_exp → express}/3.0/express_parser.bundle +0 -0
  16. data/lib/expressir/{express_exp → express}/cache.rb +3 -6
  17. data/lib/expressir/{express_exp → express}/formatter.rb +84 -68
  18. data/lib/expressir/express/hyperlink_formatter.rb +22 -0
  19. data/lib/expressir/express/model_visitor.rb +23 -0
  20. data/lib/expressir/{express_exp → express}/parser.rb +16 -5
  21. data/lib/expressir/express/resolve_references_model_visitor.rb +29 -0
  22. data/lib/expressir/{express_exp → express}/schema_head_formatter.rb +1 -1
  23. data/lib/expressir/{express_exp → express}/visitor.rb +67 -44
  24. data/lib/expressir/model.rb +5 -3
  25. data/lib/expressir/model/attribute.rb +13 -6
  26. data/lib/expressir/model/cache.rb +2 -2
  27. data/lib/expressir/model/constant.rb +10 -3
  28. data/lib/expressir/model/entity.rb +18 -16
  29. data/lib/expressir/model/enumeration_item.rb +8 -1
  30. data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -2
  31. data/lib/expressir/model/expressions/aggregate_item.rb +2 -2
  32. data/lib/expressir/model/expressions/attribute_reference.rb +2 -2
  33. data/lib/expressir/model/expressions/binary_expression.rb +3 -3
  34. data/lib/expressir/model/expressions/call.rb +3 -3
  35. data/lib/expressir/model/expressions/entity_constructor.rb +3 -3
  36. data/lib/expressir/model/expressions/group_reference.rb +2 -2
  37. data/lib/expressir/model/expressions/index_reference.rb +3 -3
  38. data/lib/expressir/model/expressions/interval.rb +5 -5
  39. data/lib/expressir/model/expressions/query_expression.rb +6 -4
  40. data/lib/expressir/model/expressions/simple_reference.rb +5 -1
  41. data/lib/expressir/model/expressions/unary_expression.rb +2 -2
  42. data/lib/expressir/model/function.rb +23 -21
  43. data/lib/expressir/model/identifier.rb +6 -3
  44. data/lib/expressir/model/interface.rb +4 -4
  45. data/lib/expressir/model/interface_item.rb +2 -2
  46. data/lib/expressir/model/interfaced_item.rb +10 -9
  47. data/lib/expressir/model/literals/binary.rb +1 -1
  48. data/lib/expressir/model/literals/integer.rb +1 -1
  49. data/lib/expressir/model/literals/logical.rb +1 -1
  50. data/lib/expressir/model/literals/real.rb +1 -1
  51. data/lib/expressir/model/literals/string.rb +2 -2
  52. data/lib/expressir/model/model_element.rb +39 -27
  53. data/lib/expressir/model/parameter.rb +10 -3
  54. data/lib/expressir/model/procedure.rb +22 -20
  55. data/lib/expressir/model/remark_item.rb +15 -0
  56. data/lib/expressir/model/repository.rb +2 -2
  57. data/lib/expressir/model/rule.rb +27 -25
  58. data/lib/expressir/model/schema.rb +24 -20
  59. data/lib/expressir/model/schema_version.rb +15 -0
  60. data/lib/expressir/model/schema_version_item.rb +15 -0
  61. data/lib/expressir/model/statements/alias.rb +7 -5
  62. data/lib/expressir/model/statements/assignment.rb +2 -2
  63. data/lib/expressir/model/statements/call.rb +3 -3
  64. data/lib/expressir/model/statements/case.rb +4 -4
  65. data/lib/expressir/model/statements/case_action.rb +3 -3
  66. data/lib/expressir/model/statements/compound.rb +2 -2
  67. data/lib/expressir/model/statements/if.rb +5 -5
  68. data/lib/expressir/model/statements/repeat.rb +11 -9
  69. data/lib/expressir/model/statements/return.rb +1 -1
  70. data/lib/expressir/model/subtype_constraint.rb +13 -6
  71. data/lib/expressir/model/type.rb +12 -10
  72. data/lib/expressir/model/types/aggregate.rb +9 -2
  73. data/lib/expressir/model/types/array.rb +5 -5
  74. data/lib/expressir/model/types/bag.rb +3 -3
  75. data/lib/expressir/model/types/binary.rb +2 -2
  76. data/lib/expressir/model/types/enumeration.rb +5 -7
  77. data/lib/expressir/model/types/generic.rb +8 -1
  78. data/lib/expressir/model/types/generic_entity.rb +8 -1
  79. data/lib/expressir/model/types/list.rb +4 -4
  80. data/lib/expressir/model/types/real.rb +1 -1
  81. data/lib/expressir/model/types/select.rb +6 -8
  82. data/lib/expressir/model/types/set.rb +3 -3
  83. data/lib/expressir/model/types/string.rb +2 -2
  84. data/lib/expressir/model/unique_rule.rb +26 -0
  85. data/lib/expressir/model/variable.rb +10 -3
  86. data/lib/expressir/model/where_rule.rb +26 -0
  87. data/lib/expressir/version.rb +1 -1
  88. data/rakelib/cross-ruby.rake +1 -1
  89. data/spec/expressir/{express_exp → express}/cache_spec.rb +9 -9
  90. data/spec/expressir/express/formatter_spec.rb +127 -0
  91. data/spec/expressir/{express_exp → express}/parser_spec.rb +24 -24
  92. data/spec/expressir/model/model_element_spec.rb +112 -60
  93. data/{original/examples → spec}/syntax/multiple.exp +1 -1
  94. data/{original/examples → spec}/syntax/multiple.yaml +19 -5
  95. data/{original/examples → spec}/syntax/multiple_formatted.exp +1 -1
  96. data/{original/examples → spec}/syntax/multiple_hyperlink_formatted.exp +4 -4
  97. data/{original/examples → spec}/syntax/multiple_schema_head_hyperlink_formatted.exp +1 -1
  98. data/{original/examples → spec}/syntax/remark.exp +12 -10
  99. data/{original/examples → spec}/syntax/remark.yaml +36 -16
  100. data/{original/examples → spec}/syntax/remark_formatted.exp +3 -1
  101. data/spec/syntax/single.exp +4 -0
  102. data/spec/syntax/single.yaml +18 -0
  103. data/spec/syntax/single_formatted.exp +10 -0
  104. data/spec/syntax/single_formatted.yaml +36 -0
  105. data/{original/examples → spec}/syntax/syntax.exp +11 -11
  106. data/{original/examples → spec}/syntax/syntax.yaml +205 -108
  107. data/{original/examples → spec}/syntax/syntax_formatted.exp +11 -11
  108. data/spec/syntax/syntax_hyperlink_formatted.exp +902 -0
  109. data/{original/examples → spec}/syntax/syntax_schema_head_formatted.exp +1 -1
  110. metadata +41 -83
  111. data/lib/expressir/express.rb +0 -11
  112. data/lib/expressir/express/aggregate_dimension.rb +0 -38
  113. data/lib/expressir/express/attribute.rb +0 -15
  114. data/lib/expressir/express/comment.rb +0 -7
  115. data/lib/expressir/express/defined_type.rb +0 -36
  116. data/lib/expressir/express/derived.rb +0 -65
  117. data/lib/expressir/express/derived_aggregate.rb +0 -43
  118. data/lib/expressir/express/entity.rb +0 -137
  119. data/lib/expressir/express/explicit.rb +0 -70
  120. data/lib/expressir/express/explicit_aggregate.rb +0 -46
  121. data/lib/expressir/express/explicit_or_derived.rb +0 -16
  122. data/lib/expressir/express/global_rule.rb +0 -44
  123. data/lib/expressir/express/interface_specification.rb +0 -51
  124. data/lib/expressir/express/interfaced_item.rb +0 -38
  125. data/lib/expressir/express/inverse.rb +0 -46
  126. data/lib/expressir/express/inverse_aggregate.rb +0 -37
  127. data/lib/expressir/express/model_element.rb +0 -7
  128. data/lib/expressir/express/named_type.rb +0 -19
  129. data/lib/expressir/express/remark.rb +0 -8
  130. data/lib/expressir/express/repository.rb +0 -306
  131. data/lib/expressir/express/schema_definition.rb +0 -96
  132. data/lib/expressir/express/subtype_constraint.rb +0 -14
  133. data/lib/expressir/express/type.rb +0 -26
  134. data/lib/expressir/express/type_aggregate.rb +0 -42
  135. data/lib/expressir/express/type_enum.rb +0 -29
  136. data/lib/expressir/express/type_parser.rb +0 -45
  137. data/lib/expressir/express/type_select.rb +0 -82
  138. data/lib/expressir/express/unique_rule.rb +0 -35
  139. data/lib/expressir/express/where_rule.rb +0 -32
  140. data/lib/expressir/express_exp/hyperlink_formatter.rb +0 -27
  141. data/lib/expressir/express_parser.rb +0 -30
  142. data/lib/expressir/model/informal_proposition.rb +0 -18
  143. data/lib/expressir/model/unique.rb +0 -19
  144. data/lib/expressir/model/where.rb +0 -19
  145. data/lib/expressir/parser.rb +0 -6
  146. data/lib/expressir/parser/owl_parser.rb +0 -8
  147. data/original/examples/syntax/single.exp +0 -3
  148. data/original/examples/syntax/single.yaml +0 -9
  149. data/original/examples/syntax/single_formatted.exp +0 -6
  150. data/original/examples/syntax/single_formatted.yaml +0 -19
  151. data/spec/acceptance/express_to_owl_spec.rb +0 -18
  152. data/spec/expressir/express/repository_spec.rb +0 -25
  153. data/spec/expressir/express_exp/formatter_spec.rb +0 -111
@@ -1,96 +0,0 @@
1
- require "expressir/express/entity"
2
- require "expressir/express/type_parser"
3
- require "expressir/express/global_rule"
4
-
5
- module Expressir
6
- module Express
7
- class SchemaDefinition < ModelElement
8
- attr_accessor :contents, :name, :identification, :all_schema_array
9
-
10
- def initialize(document = {})
11
- @document = document
12
- @all_schema_array = []
13
-
14
- extract_attributes(@document)
15
- end
16
-
17
- # @todo Existing Code
18
- #
19
- # Please revisit this soon, and check if this is necessary
20
- # after our recent restrucutre, if not then delegate this
21
- # behavior to the respective instanace.
22
- #
23
- def find_namedtype_by_name(typename)
24
- ## search current schema and interfaced item aliases
25
- nt = contents.detect do |t|
26
- t.is_a?(Express::NamedType) && t.name == typename
27
- end
28
-
29
- if nt != nil
30
- return nt
31
- end
32
-
33
- for schema in self.all_schema_array
34
- ## search all interfaced schemas
35
- nt = schema.contents.detect do |t|
36
- t.is_a?(Express::NamedType) && t.name == typename
37
- end
38
-
39
- if nt != nil
40
- return nt
41
- end
42
- end
43
-
44
- Expressir.ui.info("*** NOT HERE " + typename + " IN " + self.name)
45
- Expressir.ui.info("*** SEARCHED " + all_schema_array.size.to_s + " SCHEMAS:")
46
-
47
- all_schema_array.each do |schema|
48
- Expressir.ui.info(" - " + schema.name)
49
- end
50
-
51
- nil
52
- end
53
-
54
- private
55
-
56
- def extract_attributes(document)
57
- @name = document.attributes["name"].to_s
58
-
59
- contents = extract_interfaces(document)
60
- contents += extract_entities(document)
61
- contents += extract_types(document)
62
- contents += extract_rules(document)
63
-
64
- @contents = contents.flatten
65
- end
66
-
67
- # todo: current version does not contain any interface, so we need
68
- # a solid example to test out this funcitonaality. But keeping it
69
- # pending for now, let's revisit soon.
70
- #
71
- def extract_interfaces(document)
72
- document.xpath("interface").map do |interface|
73
- InterfaceSpecification.parse(interface, name)
74
- end
75
- end
76
-
77
- def extract_entities(document)
78
- document.xpath("//entity").map do |entity|
79
- Express::Entity.parse(entity, name)
80
- end
81
- end
82
-
83
- def extract_types(document)
84
- document.xpath("type").map do |type_document|
85
- Express::TypeParser.parse(type_document, name)
86
- end
87
- end
88
-
89
- def extract_rules(document)
90
- document.xpath("rule").map do |rule|
91
- Express::GlobalRule.parse(rule, name)
92
- end
93
- end
94
- end
95
- end
96
- end
@@ -1,14 +0,0 @@
1
- require "expressir/express/model_element"
2
-
3
- module Expressir
4
- module Express
5
- class SubtypeConstraint < ModelElement
6
- attr_accessor :name, :entity, :isAbs, :totalover, :expression
7
-
8
- def initialize
9
- @isAbs = false
10
- @totalover = nil
11
- end
12
- end
13
- end
14
- end
@@ -1,26 +0,0 @@
1
- require "expressir/express/defined_type"
2
-
3
- module Expressir
4
- module Express
5
- class Type < DefinedType
6
- attr_accessor :isBuiltin, :domain, :isFixed, :width, :precision
7
-
8
- def initialize(options = {})
9
- @isBuiltin = false
10
- @isFixed = false
11
- @width = nil
12
- @precision = nil
13
- @wheres = []
14
- @selectedBy = []
15
-
16
- super(options)
17
- end
18
-
19
- private
20
-
21
- def extract_type_attributes(document)
22
- super(document)
23
- end
24
- end
25
- end
26
- end
@@ -1,42 +0,0 @@
1
- require "expressir/express/type"
2
-
3
- module Expressir
4
- module Express
5
- class TypeAggregate < Type
6
- attr_accessor :rank, :dimensions
7
- def initialize(options = {})
8
- @rank = 0
9
- @dimensions = []
10
- @wheres = []
11
- @selectedBy = []
12
-
13
- super(options)
14
- end
15
-
16
- private
17
-
18
- def extract_type_attributes(document)
19
- @name = document.first.attributes["name"].to_s
20
- @dimensions = document.map do |aggregate|
21
- Express::AggregateDimension.parse(aggregate)
22
- end
23
-
24
- @rank = @dimensions.size
25
- extract_builtintype_attributes(document)
26
- end
27
-
28
- def extract_builtintype_attributes(document)
29
- builtin_type = document.xpath("builtintype").first
30
-
31
- if builtin_type
32
- @isBuiltin = true
33
- @domain = builtin_type.attributes["type"].to_s
34
- @width = builtin_type.attributes["width"].to_s
35
- @fixed = builtin_type.attributes["fixed"] == "YES"
36
- @precision = builtin_type.attributes["precision"].to_s
37
- end
38
- end
39
- end
40
- end
41
- end
42
-
@@ -1,29 +0,0 @@
1
- require "expressir/express/defined_type"
2
-
3
- module Expressir
4
- module Express
5
- class TypeEnum < DefinedType
6
- attr_accessor :items_array, :items, :extends, :extends_item,
7
- :isExtensible, :allitems, :isBuiltin
8
-
9
- def initialize(options = {})
10
- @isBuiltin = false
11
- @selectedBy = []
12
-
13
- super(options)
14
- end
15
-
16
- private
17
-
18
- def extract_type_attributes(document)
19
- if document.class == Nokogiri::XML::NodeSet
20
- document = document.first
21
- end
22
-
23
- @items = document.attributes["items"]
24
- @items_array = items.to_s.scan(/\w+/)
25
- super(document)
26
- end
27
- end
28
- end
29
- end
@@ -1,45 +0,0 @@
1
- require "expressir/express/type_enum"
2
- require "expressir/express/type_select"
3
- require "expressir/express/type_aggregate"
4
-
5
- module Expressir
6
- module Express
7
- class TypeParser
8
- def initialize(options = {})
9
- @options = options
10
- @schema = options.fetch(:schema, nil)
11
- end
12
-
13
- def parse
14
- document = @options.fetch(:document, nil)
15
- extract_attributes(document) if document
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_attributes(document)
25
- document_with_klass = document_with_klass(document)
26
- document_with_klass[:cls].parse(document_with_klass[:document], @schema)
27
- end
28
-
29
- def document_with_klass(document)
30
- if !document.xpath("select").empty?
31
- { document: document.xpath("select"), cls: Express::TypeSelect }
32
-
33
- elsif !document.xpath("enumeration").empty?
34
- { document: document.xpath("enumeration"), cls: Express::TypeEnum }
35
-
36
- elsif !document.xpath("aggregate").empty?
37
- { document: document.xpath("aggregate"), cls: Express::TypeAggregate }
38
-
39
- else
40
- { document: document, cls: Express::Type }
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,82 +0,0 @@
1
- require "expressir/express/defined_type"
2
-
3
- module Expressir
4
- module Express
5
- class TypeSelect < DefinedType
6
- attr_accessor :selectitems_array, :selectitems, :extends, :extends_item,
7
- :isExtensible, :selectitems_all, :isGenericEntity, :isBuiltin,
8
- :cleaned_select_items
9
-
10
- def initialize(options = {})
11
- @isBuiltin = false
12
- @isExtensible = false
13
- @isGenericEntity = false
14
- @selectitems = nil
15
- @selectitems_array = []
16
- @cleaned_select_items = nil
17
- @wheres = []
18
- @selectedBy = []
19
-
20
- super(options)
21
- end
22
-
23
- ##
24
- # set cleaned_select_items = process select removing unnecessary
25
- # entity types (i.e. if supertype is there)
26
- #
27
- def clean_select_items
28
- @cleaned_select_items = ""
29
-
30
- if selectitems != nil
31
- itemname_list = selectitems.scan(/\w+/)
32
- dupitem_list = []
33
- for itemname in itemname_list
34
- itemptr = schema.find_namedtype_by_name( itemname )
35
-
36
- if itemptr.kind_of? EXPSM::Entity
37
-
38
- for itemname2 in itemname_list
39
- thetype = schema.find_namedtype_by_name( itemname2 )
40
-
41
- if thetype != nil
42
- if itemptr.supertypes_all != nil &&
43
- itemptr.supertypes_all.include?(thetype.name)
44
-
45
- dupitem_list.push itemname
46
- end
47
- end
48
- end
49
- end
50
- end
51
-
52
- itemname_list.each do |itemname|
53
- if !dupitem_list.include? itemname
54
- @cleaned_select_items = @cleaned_select_items + " " + itemname
55
- end
56
- end
57
-
58
- @cleaned_select_items = @cleaned_select_items.lstrip
59
- end
60
- end
61
-
62
- private
63
-
64
- def extract_type_attributes(document)
65
- if document.class == Nokogiri::XML::NodeSet
66
- document = document.first
67
- end
68
-
69
- @selectitems = document.attributes["selectitems"]
70
- @extends = document.attributes["basedon"]
71
- @isExtensible = document.attributes["extensible"] == "YES"
72
- @isGenericEntity = document.attributes["genericentity"] == "YES"
73
-
74
- if isExtensible
75
- @selectitems_all = selectitems
76
- end
77
-
78
- super(document)
79
- end
80
- end
81
- end
82
- end
@@ -1,35 +0,0 @@
1
- require "expressir/express/model_element"
2
-
3
- module Expressir
4
- module Express
5
- class UniqueRule < ModelElement
6
- attr_accessor :name, :attributes
7
-
8
- def initialize(options)
9
- @name = nil
10
- @attributes = []
11
- @options = options
12
- end
13
-
14
- def parse
15
- document = @options.fetch(:document, nil)
16
- extract_unique_attributes(document)
17
-
18
- self
19
- end
20
-
21
- def self.parse(document)
22
- new(document: document).parse
23
- end
24
-
25
- private
26
-
27
- def extract_unique_attributes(document)
28
- @name = document.attributes["label"].to_s
29
- @attributes = document.xpath("unique.attribute").map do |attribute|
30
- attribute.attributes["attribute"]
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,32 +0,0 @@
1
- require "expressir/express/model_element"
2
-
3
- module Expressir
4
- module Express
5
- class WhereRule < ModelElement
6
- attr_accessor :name, :expression
7
-
8
- def initialize(options = {})
9
- @name = nil
10
- @options = options
11
- end
12
-
13
- def parse
14
- document = @options.fetch(:where, nil)
15
- extract_where_attributes(document) if document
16
-
17
- self
18
- end
19
-
20
- def self.parse(document)
21
- new(document: document).parse
22
- end
23
-
24
- private
25
-
26
- def extract_where_attributes(document)
27
- @name = document.attributes["label"].to_s
28
- @expression = document.attributes["expression"]
29
- end
30
- end
31
- end
32
- end
@@ -1,27 +0,0 @@
1
- module Expressir
2
- module ExpressExp
3
- module HyperlinkFormatter
4
- def format_expressions_simple_reference(node)
5
- return node.id if node.parent.is_a? Model::Expressions::AttributeReference
6
-
7
- # skip hyperlink if target node can't be found
8
- target_node = if node.parent.is_a? Model::InterfaceItem
9
- node.find("#{node.parent.parent.schema.id}.#{node.parent.ref.id}")
10
- else
11
- node.find(node.id)
12
- end
13
- return node.id unless target_node
14
-
15
- # skip hyperlink for implicit scopes
16
- return node.id if target_node.is_a? Model::Statements::Alias or target_node.is_a? Model::Statements::Repeat or target_node.is_a? Model::Expressions::QueryExpression
17
-
18
- # skip hyperlink if this node and target node are in the same main item
19
- node_path_parts = node.path.split(".")
20
- target_node_path_parts = target_node.path.split(".")
21
- return node.id if node_path_parts[0..1] == target_node_path_parts[0..1]
22
-
23
- "{{{<<express:#{target_node.path},#{node.id}>>}}}"
24
- end
25
- end
26
- end
27
- end
@@ -1,30 +0,0 @@
1
- require "expressir/parser"
2
-
3
- module Expressir
4
- class ExpressParser
5
- def initialize(file, options)
6
- @file = file
7
- @options = options
8
- end
9
-
10
- def to_owl
11
- owl_parser.parse(express_xml, options)
12
- end
13
-
14
- def self.to_owl(file, **options)
15
- new(file, options).to_owl
16
- end
17
-
18
- private
19
-
20
- attr_reader :file, :options
21
-
22
- def owl_parser
23
- Expressir::Parser::OwlParser
24
- end
25
-
26
- def express_xml
27
- Expressir::Express.from_xml(file)
28
- end
29
- end
30
- end