expressir 0.2.18-arm64-darwin → 0.2.26-arm64-darwin

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rake.yml +7 -1
  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 +2 -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 -6
  17. data/lib/expressir/express_exp/resolve_references_model_visitor.rb +29 -0
  18. data/lib/expressir/express_exp/visitor.rb +19 -18
  19. data/lib/expressir/model.rb +3 -1
  20. data/lib/expressir/model/attribute.rb +12 -5
  21. data/lib/expressir/model/cache.rb +13 -0
  22. data/lib/expressir/model/constant.rb +9 -2
  23. data/lib/expressir/model/entity.rb +10 -8
  24. data/lib/expressir/model/enumeration_item.rb +7 -0
  25. data/lib/expressir/model/expressions/aggregate_initializer.rb +1 -1
  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 +2 -2
  30. data/lib/expressir/model/expressions/entity_constructor.rb +2 -2
  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 +5 -3
  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 +13 -11
  38. data/lib/expressir/model/identifier.rb +6 -3
  39. data/lib/expressir/model/interface.rb +3 -3
  40. data/lib/expressir/model/interface_item.rb +2 -2
  41. data/lib/expressir/model/interfaced_item.rb +9 -8
  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 +47 -26
  48. data/lib/expressir/model/parameter.rb +9 -2
  49. data/lib/expressir/model/procedure.rb +12 -10
  50. data/lib/expressir/model/{informal_proposition.rb → remark_item.rb} +3 -6
  51. data/lib/expressir/model/repository.rb +1 -1
  52. data/lib/expressir/model/rule.rb +14 -12
  53. data/lib/expressir/model/schema.rb +15 -11
  54. data/lib/expressir/model/statements/alias.rb +5 -3
  55. data/lib/expressir/model/statements/assignment.rb +2 -2
  56. data/lib/expressir/model/statements/call.rb +2 -2
  57. data/lib/expressir/model/statements/case.rb +3 -3
  58. data/lib/expressir/model/statements/case_action.rb +2 -2
  59. data/lib/expressir/model/statements/compound.rb +1 -1
  60. data/lib/expressir/model/statements/if.rb +3 -3
  61. data/lib/expressir/model/statements/repeat.rb +9 -7
  62. data/lib/expressir/model/statements/return.rb +1 -1
  63. data/lib/expressir/model/subtype_constraint.rb +11 -4
  64. data/lib/expressir/model/type.rb +6 -4
  65. data/lib/expressir/model/types/aggregate.rb +8 -1
  66. data/lib/expressir/model/types/array.rb +5 -5
  67. data/lib/expressir/model/types/bag.rb +3 -3
  68. data/lib/expressir/model/types/binary.rb +2 -2
  69. data/lib/expressir/model/types/enumeration.rb +4 -4
  70. data/lib/expressir/model/types/generic.rb +7 -0
  71. data/lib/expressir/model/types/generic_entity.rb +7 -0
  72. data/lib/expressir/model/types/list.rb +4 -4
  73. data/lib/expressir/model/types/real.rb +1 -1
  74. data/lib/expressir/model/types/select.rb +5 -5
  75. data/lib/expressir/model/types/set.rb +3 -3
  76. data/lib/expressir/model/types/string.rb +2 -2
  77. data/lib/expressir/model/unique.rb +8 -1
  78. data/lib/expressir/model/variable.rb +9 -2
  79. data/lib/expressir/model/where.rb +8 -1
  80. data/lib/expressir/version.rb +1 -1
  81. data/original/examples/syntax/multiple.exp +1 -1
  82. data/original/examples/syntax/multiple.yaml +19 -5
  83. data/original/examples/syntax/multiple_formatted.exp +1 -1
  84. data/original/examples/syntax/multiple_hyperlink_formatted.exp +4 -4
  85. data/original/examples/syntax/multiple_schema_head_hyperlink_formatted.exp +1 -1
  86. data/original/examples/syntax/remark.exp +12 -10
  87. data/original/examples/syntax/remark.yaml +24 -4
  88. data/original/examples/syntax/remark_formatted.exp +3 -1
  89. data/original/examples/syntax/single.exp +1 -0
  90. data/original/examples/syntax/single.yaml +7 -1
  91. data/original/examples/syntax/single_formatted.exp +4 -0
  92. data/original/examples/syntax/single_formatted.yaml +15 -1
  93. data/original/examples/syntax/syntax.yaml +82 -1
  94. data/original/examples/syntax/syntax_hyperlink_formatted.exp +902 -0
  95. data/spec/expressir/express_exp/cache_spec.rb +64 -0
  96. data/spec/expressir/express_exp/formatter_spec.rb +16 -0
  97. data/spec/expressir/express_exp/parser_spec.rb +10 -33
  98. data/spec/expressir/model/model_element_spec.rb +82 -44
  99. metadata +10 -4
  100. data/original/examples/syntax/single_root_path.yaml +0 -9
@@ -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)
@@ -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,12 +9,12 @@ 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'
@@ -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
18
  @remarks = options.fetch(:remarks, [])
19
+ @remark_items = options.fetch(: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
11
  @remarks = options.fetch(:remarks, [])
12
+ @remark_items = options.fetch(: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,17 +3,18 @@ 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
16
  @remarks = options.fetch(:remarks, [])
17
+ @remark_items = options.fetch(:remark_items, [])
17
18
  @source = options[:source]
18
19
 
19
20
  @abstract = options[:abstract]
@@ -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
@@ -6,10 +6,17 @@ module Expressir
6
6
  def initialize(options = {})
7
7
  @id = options[:id]
8
8
  @remarks = options.fetch(:remarks, [])
9
+ @remark_items = options.fetch(: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,7 +2,7 @@ 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
8
  @items = options.fetch(:items, [])
@@ -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,8 +2,8 @@ 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]
@@ -2,8 +2,8 @@ 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]
@@ -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
12
  @remarks = options.fetch(:remarks, [])
13
+ @remark_items = options.fetch(: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
@@ -2,11 +2,15 @@ module Expressir
2
2
  module Model
3
3
  module Expressions
4
4
  class SimpleReference < ModelElement
5
- attr_accessor :id
5
+ model_attr_accessor :id
6
+
7
+ model_attr_accessor :base_path
6
8
 
7
9
  def initialize(options = {})
8
10
  @id = options[:id]
9
11
 
12
+ @base_path = options[:base_path]
13
+
10
14
  super
11
15
  end
12
16
  end
@@ -6,8 +6,8 @@ module Expressir
6
6
  NOT = :NOT
7
7
  PLUS = :PLUS
8
8
 
9
- attr_accessor :operator
10
- attr_accessor :operand
9
+ model_attr_accessor :operator
10
+ model_attr_accessor :operand
11
11
 
12
12
  def initialize(options = {})
13
13
  @operator = options[:operator]
@@ -3,20 +3,21 @@ module Expressir
3
3
  class Function < ModelElement
4
4
  include Identifier
5
5
 
6
- attr_accessor :parameters
7
- attr_accessor :return_type
8
- attr_accessor :types
9
- attr_accessor :entities
10
- attr_accessor :subtype_constraints
11
- attr_accessor :functions
12
- attr_accessor :procedures
13
- attr_accessor :constants
14
- attr_accessor :variables
15
- attr_accessor :statements
6
+ model_attr_accessor :parameters
7
+ model_attr_accessor :return_type
8
+ model_attr_accessor :types
9
+ model_attr_accessor :entities
10
+ model_attr_accessor :subtype_constraints
11
+ model_attr_accessor :functions
12
+ model_attr_accessor :procedures
13
+ model_attr_accessor :constants
14
+ model_attr_accessor :variables
15
+ model_attr_accessor :statements
16
16
 
17
17
  def initialize(options = {})
18
18
  @id = options[:id]
19
19
  @remarks = options.fetch(:remarks, [])
20
+ @remark_items = options.fetch(:remark_items, [])
20
21
  @source = options[:source]
21
22
 
22
23
  @parameters = options.fetch(:parameters, [])
@@ -47,7 +48,8 @@ module Expressir
47
48
  *functions,
48
49
  *procedures,
49
50
  *constants,
50
- *variables
51
+ *variables,
52
+ *remark_items
51
53
  ]
52
54
  end
53
55
  end