expressir 0.2.19-arm64-darwin → 0.2.27-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 (105) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +7 -6
  3. data/.github/workflows/release.yml +31 -3
  4. data/README.adoc +3 -3
  5. data/exe/format +2 -49
  6. data/exe/format-test +81 -0
  7. data/lib/expressir/express_exp/2.4/express_parser.bundle +0 -0
  8. data/lib/expressir/express_exp/2.5/express_parser.bundle +0 -0
  9. data/lib/expressir/express_exp/2.6/express_parser.bundle +0 -0
  10. data/lib/expressir/express_exp/2.7/express_parser.bundle +0 -0
  11. data/lib/expressir/express_exp/3.0/express_parser.bundle +0 -0
  12. data/lib/expressir/express_exp/cache.rb +48 -0
  13. data/lib/expressir/express_exp/formatter.rb +12 -2
  14. data/lib/expressir/express_exp/hyperlink_formatter.rb +10 -15
  15. data/lib/expressir/express_exp/model_visitor.rb +23 -0
  16. data/lib/expressir/express_exp/parser.rb +14 -3
  17. data/lib/expressir/express_exp/resolve_references_model_visitor.rb +29 -0
  18. data/lib/expressir/express_exp/visitor.rb +46 -19
  19. data/lib/expressir/model.rb +5 -1
  20. data/lib/expressir/model/attribute.rb +13 -6
  21. data/lib/expressir/model/cache.rb +13 -0
  22. data/lib/expressir/model/constant.rb +10 -3
  23. data/lib/expressir/model/entity.rb +16 -14
  24. data/lib/expressir/model/enumeration_item.rb +8 -1
  25. data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -2
  26. data/lib/expressir/model/expressions/aggregate_item.rb +2 -2
  27. data/lib/expressir/model/expressions/attribute_reference.rb +2 -2
  28. data/lib/expressir/model/expressions/binary_expression.rb +3 -3
  29. data/lib/expressir/model/expressions/call.rb +3 -3
  30. data/lib/expressir/model/expressions/entity_constructor.rb +3 -3
  31. data/lib/expressir/model/expressions/group_reference.rb +2 -2
  32. data/lib/expressir/model/expressions/index_reference.rb +3 -3
  33. data/lib/expressir/model/expressions/interval.rb +5 -5
  34. data/lib/expressir/model/expressions/query_expression.rb +6 -4
  35. data/lib/expressir/model/expressions/simple_reference.rb +5 -1
  36. data/lib/expressir/model/expressions/unary_expression.rb +2 -2
  37. data/lib/expressir/model/function.rb +23 -21
  38. data/lib/expressir/model/identifier.rb +6 -3
  39. data/lib/expressir/model/interface.rb +4 -4
  40. data/lib/expressir/model/interface_item.rb +2 -2
  41. data/lib/expressir/model/interfaced_item.rb +10 -9
  42. data/lib/expressir/model/literals/binary.rb +1 -1
  43. data/lib/expressir/model/literals/integer.rb +1 -1
  44. data/lib/expressir/model/literals/logical.rb +1 -1
  45. data/lib/expressir/model/literals/real.rb +1 -1
  46. data/lib/expressir/model/literals/string.rb +2 -2
  47. data/lib/expressir/model/model_element.rb +38 -26
  48. data/lib/expressir/model/parameter.rb +10 -3
  49. data/lib/expressir/model/procedure.rb +22 -20
  50. data/lib/expressir/model/remark_item.rb +15 -0
  51. data/lib/expressir/model/repository.rb +2 -2
  52. data/lib/expressir/model/rule.rb +26 -24
  53. data/lib/expressir/model/schema.rb +24 -20
  54. data/lib/expressir/model/schema_version.rb +15 -0
  55. data/lib/expressir/model/schema_version_item.rb +15 -0
  56. data/lib/expressir/model/statements/alias.rb +7 -5
  57. data/lib/expressir/model/statements/assignment.rb +2 -2
  58. data/lib/expressir/model/statements/call.rb +3 -3
  59. data/lib/expressir/model/statements/case.rb +4 -4
  60. data/lib/expressir/model/statements/case_action.rb +3 -3
  61. data/lib/expressir/model/statements/compound.rb +2 -2
  62. data/lib/expressir/model/statements/if.rb +5 -5
  63. data/lib/expressir/model/statements/repeat.rb +11 -9
  64. data/lib/expressir/model/statements/return.rb +1 -1
  65. data/lib/expressir/model/subtype_constraint.rb +13 -6
  66. data/lib/expressir/model/type.rb +9 -7
  67. data/lib/expressir/model/types/aggregate.rb +9 -2
  68. data/lib/expressir/model/types/array.rb +5 -5
  69. data/lib/expressir/model/types/bag.rb +3 -3
  70. data/lib/expressir/model/types/binary.rb +2 -2
  71. data/lib/expressir/model/types/enumeration.rb +6 -6
  72. data/lib/expressir/model/types/generic.rb +8 -1
  73. data/lib/expressir/model/types/generic_entity.rb +8 -1
  74. data/lib/expressir/model/types/list.rb +4 -4
  75. data/lib/expressir/model/types/real.rb +1 -1
  76. data/lib/expressir/model/types/select.rb +7 -7
  77. data/lib/expressir/model/types/set.rb +3 -3
  78. data/lib/expressir/model/types/string.rb +2 -2
  79. data/lib/expressir/model/unique.rb +10 -3
  80. data/lib/expressir/model/variable.rb +10 -3
  81. data/lib/expressir/model/where.rb +9 -2
  82. data/lib/expressir/version.rb +1 -1
  83. data/original/examples/syntax/multiple.exp +1 -1
  84. data/original/examples/syntax/multiple.yaml +15 -1
  85. data/original/examples/syntax/multiple_formatted.exp +1 -1
  86. data/original/examples/syntax/multiple_hyperlink_formatted.exp +4 -4
  87. data/original/examples/syntax/multiple_schema_head_hyperlink_formatted.exp +1 -1
  88. data/original/examples/syntax/remark.exp +12 -10
  89. data/original/examples/syntax/remark.yaml +23 -3
  90. data/original/examples/syntax/remark_formatted.exp +3 -1
  91. data/original/examples/syntax/single.exp +2 -1
  92. data/original/examples/syntax/single.yaml +9 -0
  93. data/original/examples/syntax/single_formatted.exp +5 -1
  94. data/original/examples/syntax/single_formatted.yaml +18 -1
  95. data/original/examples/syntax/syntax.exp +1 -1
  96. data/original/examples/syntax/syntax.yaml +99 -2
  97. data/original/examples/syntax/syntax_formatted.exp +1 -1
  98. data/original/examples/syntax/syntax_hyperlink_formatted.exp +902 -0
  99. data/original/examples/syntax/syntax_schema_head_formatted.exp +1 -1
  100. data/spec/expressir/express_exp/cache_spec.rb +64 -0
  101. data/spec/expressir/express_exp/formatter_spec.rb +16 -0
  102. data/spec/expressir/express_exp/parser_spec.rb +1 -1
  103. data/spec/expressir/model/model_element_spec.rb +73 -21
  104. metadata +12 -3
  105. data/lib/expressir/model/informal_proposition.rb +0 -18
@@ -0,0 +1,29 @@
1
+ require "expressir/express_exp/model_visitor"
2
+ require "expressir/model"
3
+
4
+ module Expressir
5
+ module ExpressExp
6
+ class ResolveReferencesModelVisitor < ModelVisitor
7
+ def visit(node)
8
+ if node.is_a? Model::Expressions::SimpleReference
9
+ visit_expressions_simple_reference(node)
10
+ end
11
+
12
+ super
13
+ end
14
+
15
+ def visit_expressions_simple_reference(node)
16
+ return if node.parent.is_a? Model::Expressions::AttributeReference
17
+
18
+ if node.parent.is_a? Model::InterfaceItem
19
+ base_item = node.find("#{node.parent.parent.schema.id}.#{node.parent.ref.id}")
20
+ else
21
+ base_item = node.find(node.id)
22
+ end
23
+ return unless base_item
24
+
25
+ node.base_path = base_item.path
26
+ end
27
+ end
28
+ end
29
+ end
@@ -107,27 +107,28 @@ module Expressir
107
107
  target_node = node.find(path)
108
108
  return target_node if target_node
109
109
 
110
- # check if path should create implicit informal proposal
111
- # see https://github.com/lutaml/expressir/issues/50
110
+ # check if path can create implicit remark item
111
+ # see https://github.com/lutaml/expressir/issues/78
112
112
  rest, _, current_path = path.rpartition(".") # get last path part
113
113
  _, _, current_path = current_path.rpartition(":") # ignore prefix
114
+ parent_node = node.find(rest)
115
+ if parent_node and parent_node.class.method_defined? :remark_items
116
+ remark_item = Model::RemarkItem.new({
117
+ id: current_path
118
+ })
119
+ remark_item.parent = parent_node
114
120
 
115
- # match informal proposition id
116
- informal_proposition_id = current_path.match(/^IP\d+$/).to_a[0]
117
- return unless informal_proposition_id
118
-
119
- # find informal proposition target
120
- target_node = node.find(rest)
121
- return unless target_node and target_node.class.method_defined? :informal_propositions
122
-
123
- # create implicit informal proposition
124
- informal_proposition = Model::InformalProposition.new({
125
- id: informal_proposition_id
126
- })
127
- target_node.informal_propositions << informal_proposition
128
- target_node.reset_children_by_id
129
- informal_proposition.parent = target_node
130
- informal_proposition
121
+ # check if path can create implicit informal proposition
122
+ # see https://github.com/lutaml/expressir/issues/50
123
+ if parent_node.class.method_defined? :informal_propositions and current_path.match(/^IP\d+$/)
124
+ parent_node.informal_propositions << remark_item
125
+ else
126
+ parent_node.remark_items << remark_item
127
+ end
128
+ parent_node.reset_children_by_id
129
+
130
+ remark_item
131
+ end
131
132
  end
132
133
 
133
134
  def attach_remarks(ctx, node)
@@ -1956,7 +1957,33 @@ module Expressir
1956
1957
  def visit_schema_version_id(ctx)
1957
1958
  ctx__string_literal = ctx.string_literal
1958
1959
 
1959
- visit_if(ctx__string_literal)
1960
+ value = visit_if(ctx__string_literal)
1961
+ value = value.value
1962
+
1963
+ items = if value.start_with?('{') and value.end_with?('}')
1964
+ parts = value.sub(/^\{/, '').sub(/\}$/, '').split(' ')
1965
+ parts.map do |part|
1966
+ if match = part.match(/^(.+)\((\d+)\)$/)
1967
+ Model::SchemaVersionItem.new({
1968
+ name: match[1],
1969
+ value: match[2]
1970
+ })
1971
+ elsif part.match(/^\d+$/)
1972
+ Model::SchemaVersionItem.new({
1973
+ value: part
1974
+ })
1975
+ else
1976
+ Model::SchemaVersionItem.new({
1977
+ name: part
1978
+ })
1979
+ end
1980
+ end
1981
+ end
1982
+
1983
+ Model::SchemaVersion.new({
1984
+ value: value,
1985
+ items: items
1986
+ })
1960
1987
  end
1961
1988
 
1962
1989
  def visit_selector(ctx)
@@ -1,5 +1,7 @@
1
1
  require 'expressir/model/model_element'
2
2
 
3
+ require 'expressir/model/cache'
4
+
3
5
  require 'expressir/model/identifier'
4
6
 
5
7
  require 'expressir/model/attribute'
@@ -7,15 +9,17 @@ require 'expressir/model/constant'
7
9
  require 'expressir/model/entity'
8
10
  require 'expressir/model/enumeration_item'
9
11
  require 'expressir/model/function'
10
- require 'expressir/model/informal_proposition'
11
12
  require 'expressir/model/interface'
12
13
  require 'expressir/model/interface_item'
13
14
  require 'expressir/model/interfaced_item'
14
15
  require 'expressir/model/parameter'
15
16
  require 'expressir/model/procedure'
17
+ require 'expressir/model/remark_item'
16
18
  require 'expressir/model/repository'
17
19
  require 'expressir/model/rule'
18
20
  require 'expressir/model/schema'
21
+ require 'expressir/model/schema_version'
22
+ require 'expressir/model/schema_version_item'
19
23
  require 'expressir/model/subtype_constraint'
20
24
  require 'expressir/model/type'
21
25
  require 'expressir/model/unique'
@@ -7,15 +7,16 @@ module Expressir
7
7
  DERIVED = :DERIVED
8
8
  INVERSE = :INVERSE
9
9
 
10
- attr_accessor :kind
11
- attr_accessor :supertype_attribute
12
- attr_accessor :optional
13
- attr_accessor :type
14
- attr_accessor :expression
10
+ model_attr_accessor :kind
11
+ model_attr_accessor :supertype_attribute
12
+ model_attr_accessor :optional
13
+ model_attr_accessor :type
14
+ model_attr_accessor :expression
15
15
 
16
16
  def initialize(options = {})
17
17
  @id = options[:id]
18
- @remarks = options.fetch(:remarks, [])
18
+ @remarks = options[:remarks] || []
19
+ @remark_items = options[:remark_items] || []
19
20
  @source = options[:source]
20
21
 
21
22
  @kind = options[:kind]
@@ -26,6 +27,12 @@ module Expressir
26
27
 
27
28
  super
28
29
  end
30
+
31
+ def children
32
+ [
33
+ *remark_items
34
+ ]
35
+ end
29
36
  end
30
37
  end
31
38
  end
@@ -0,0 +1,13 @@
1
+ module Expressir
2
+ module Model
3
+ class Cache < ModelElement
4
+ model_attr_accessor :version
5
+ model_attr_accessor :content
6
+
7
+ def initialize(options = {})
8
+ @version = options[:version]
9
+ @content = options[:content]
10
+ end
11
+ end
12
+ end
13
+ end
@@ -3,12 +3,13 @@ module Expressir
3
3
  class Constant < ModelElement
4
4
  include Identifier
5
5
 
6
- attr_accessor :type
7
- attr_accessor :expression
6
+ model_attr_accessor :type
7
+ model_attr_accessor :expression
8
8
 
9
9
  def initialize(options = {})
10
10
  @id = options[:id]
11
- @remarks = options.fetch(:remarks, [])
11
+ @remarks = options[:remarks] || []
12
+ @remark_items = options[:remark_items] || []
12
13
  @source = options[:source]
13
14
 
14
15
  @type = options[:type]
@@ -16,6 +17,12 @@ module Expressir
16
17
 
17
18
  super
18
19
  end
20
+
21
+ def children
22
+ [
23
+ *remark_items
24
+ ]
25
+ end
19
26
  end
20
27
  end
21
28
  end
@@ -3,26 +3,27 @@ module Expressir
3
3
  class Entity < ModelElement
4
4
  include Identifier
5
5
 
6
- attr_accessor :abstract
7
- attr_accessor :supertype_expression
8
- attr_accessor :subtype_of
9
- attr_accessor :attributes
10
- attr_accessor :unique
11
- attr_accessor :where
12
- attr_accessor :informal_propositions
6
+ model_attr_accessor :abstract
7
+ model_attr_accessor :supertype_expression
8
+ model_attr_accessor :subtype_of
9
+ model_attr_accessor :attributes
10
+ model_attr_accessor :unique
11
+ model_attr_accessor :where
12
+ model_attr_accessor :informal_propositions
13
13
 
14
14
  def initialize(options = {})
15
15
  @id = options[:id]
16
- @remarks = options.fetch(:remarks, [])
16
+ @remarks = options[:remarks] || []
17
+ @remark_items = options[:remark_items] || []
17
18
  @source = options[:source]
18
19
 
19
20
  @abstract = options[:abstract]
20
21
  @supertype_expression = options[:supertype_expression]
21
- @subtype_of = options.fetch(:subtype_of, [])
22
- @attributes = options.fetch(:attributes, [])
23
- @unique = options.fetch(:unique, [])
24
- @where = options.fetch(:where, [])
25
- @informal_propositions = options.fetch(:informal_propositions, [])
22
+ @subtype_of = options[:subtype_of] || []
23
+ @attributes = options[:attributes] || []
24
+ @unique = options[:unique] || []
25
+ @where = options[:where] || []
26
+ @informal_propositions = options[:informal_propositions] || []
26
27
 
27
28
  super
28
29
  end
@@ -32,7 +33,8 @@ module Expressir
32
33
  *attributes,
33
34
  *unique,
34
35
  *where,
35
- *informal_propositions
36
+ *informal_propositions,
37
+ *remark_items
36
38
  ]
37
39
  end
38
40
  end
@@ -5,11 +5,18 @@ module Expressir
5
5
 
6
6
  def initialize(options = {})
7
7
  @id = options[:id]
8
- @remarks = options.fetch(:remarks, [])
8
+ @remarks = options[:remarks] || []
9
+ @remark_items = options[:remark_items] || []
9
10
  @source = options[:source]
10
11
 
11
12
  super
12
13
  end
14
+
15
+ def children
16
+ [
17
+ *remark_items
18
+ ]
19
+ end
13
20
  end
14
21
  end
15
22
  end
@@ -2,10 +2,10 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class AggregateInitializer < ModelElement
5
- attr_accessor :items
5
+ model_attr_accessor :items
6
6
 
7
7
  def initialize(options = {})
8
- @items = options.fetch(:items, [])
8
+ @items = options[:items] || []
9
9
 
10
10
  super
11
11
  end
@@ -2,8 +2,8 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class AggregateItem < ModelElement
5
- attr_accessor :expression
6
- attr_accessor :repetition
5
+ model_attr_accessor :expression
6
+ model_attr_accessor :repetition
7
7
 
8
8
  def initialize(options = {})
9
9
  @expression = options[:expression]
@@ -2,8 +2,8 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class AttributeReference < ModelElement
5
- attr_accessor :ref
6
- attr_accessor :attribute
5
+ model_attr_accessor :ref
6
+ model_attr_accessor :attribute
7
7
 
8
8
  def initialize(options = {})
9
9
  @ref = options[:ref]
@@ -25,9 +25,9 @@ module Expressir
25
25
  SUBTRACTION = :SUBTRACTION
26
26
  XOR = :XOR
27
27
 
28
- attr_accessor :operator
29
- attr_accessor :operand1
30
- attr_accessor :operand2
28
+ model_attr_accessor :operator
29
+ model_attr_accessor :operand1
30
+ model_attr_accessor :operand2
31
31
 
32
32
  def initialize(options = {})
33
33
  @operator = options[:operator]
@@ -2,12 +2,12 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class Call < ModelElement
5
- attr_accessor :ref
6
- attr_accessor :parameters
5
+ model_attr_accessor :ref
6
+ model_attr_accessor :parameters
7
7
 
8
8
  def initialize(options = {})
9
9
  @ref = options[:ref]
10
- @parameters = options.fetch(:parameters, [])
10
+ @parameters = options[:parameters] || []
11
11
 
12
12
  super
13
13
  end
@@ -2,12 +2,12 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class EntityConstructor < ModelElement
5
- attr_accessor :entity
6
- attr_accessor :parameters
5
+ model_attr_accessor :entity
6
+ model_attr_accessor :parameters
7
7
 
8
8
  def initialize(options = {})
9
9
  @entity = options[:entity]
10
- @parameters = options.fetch(:parameters, [])
10
+ @parameters = options[:parameters] || []
11
11
 
12
12
  super
13
13
  end
@@ -2,8 +2,8 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class GroupReference < ModelElement
5
- attr_accessor :ref
6
- attr_accessor :entity
5
+ model_attr_accessor :ref
6
+ model_attr_accessor :entity
7
7
 
8
8
  def initialize(options = {})
9
9
  @ref = options[:ref]
@@ -2,9 +2,9 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class IndexReference < ModelElement
5
- attr_accessor :ref
6
- attr_accessor :index1
7
- attr_accessor :index2
5
+ model_attr_accessor :ref
6
+ model_attr_accessor :index1
7
+ model_attr_accessor :index2
8
8
 
9
9
  def initialize(options = {})
10
10
  @ref = options[:ref]
@@ -2,11 +2,11 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class Interval < ModelElement
5
- attr_accessor :low
6
- attr_accessor :operator1
7
- attr_accessor :item
8
- attr_accessor :operator2
9
- attr_accessor :high
5
+ model_attr_accessor :low
6
+ model_attr_accessor :operator1
7
+ model_attr_accessor :item
8
+ model_attr_accessor :operator2
9
+ model_attr_accessor :high
10
10
 
11
11
  def initialize(options = {})
12
12
  @low = options[:low]
@@ -4,12 +4,13 @@ module Expressir
4
4
  class QueryExpression < ModelElement
5
5
  include Identifier
6
6
 
7
- attr_accessor :aggregate_source
8
- attr_accessor :expression
7
+ model_attr_accessor :aggregate_source
8
+ model_attr_accessor :expression
9
9
 
10
10
  def initialize(options = {})
11
11
  @id = options[:id]
12
- @remarks = options.fetch(:remarks, [])
12
+ @remarks = options[:remarks] || []
13
+ @remark_items = options[:remark_items] || []
13
14
  @source = options[:source]
14
15
 
15
16
  @aggregate_source = options[:aggregate_source]
@@ -20,7 +21,8 @@ module Expressir
20
21
 
21
22
  def children
22
23
  [
23
- self
24
+ self,
25
+ *remark_items
24
26
  ]
25
27
  end
26
28
  end