expressir 1.0.0-x86-mingw32 → 1.2.1-x86-mingw32

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/.cross_rubies +6 -18
  3. data/.github/workflows/rake.yml +50 -5
  4. data/.github/workflows/release.yml +11 -3
  5. data/.hound.yml +3 -0
  6. data/.rubocop.yml +6 -506
  7. data/.yardopts +11 -0
  8. data/Rakefile +3 -0
  9. data/expressir.gemspec +4 -1
  10. data/lib/expressir/express/2.7/express_parser.so +0 -0
  11. data/lib/expressir/express/3.0/express_parser.so +0 -0
  12. data/lib/expressir/express/3.1/express_parser.so +0 -0
  13. data/lib/expressir/express/cache.rb +16 -10
  14. data/lib/expressir/express/formatter.rb +231 -180
  15. data/lib/expressir/express/hyperlink_formatter.rb +15 -1
  16. data/lib/expressir/express/model_visitor.rb +1 -0
  17. data/lib/expressir/express/parser.rb +16 -10
  18. data/lib/expressir/express/resolve_references_model_visitor.rb +7 -5
  19. data/lib/expressir/express/schema_head_formatter.rb +16 -2
  20. data/lib/expressir/express/visitor.rb +280 -254
  21. data/lib/expressir/model/cache.rb +6 -2
  22. data/lib/expressir/model/data_type.rb +9 -0
  23. data/lib/expressir/model/data_types/aggregate.rb +31 -0
  24. data/lib/expressir/model/data_types/array.rb +31 -0
  25. data/lib/expressir/model/data_types/bag.rb +25 -0
  26. data/lib/expressir/model/data_types/binary.rb +22 -0
  27. data/lib/expressir/model/data_types/boolean.rb +10 -0
  28. data/lib/expressir/model/data_types/enumeration.rb +25 -0
  29. data/lib/expressir/model/data_types/enumeration_item.rb +26 -0
  30. data/lib/expressir/model/data_types/generic.rb +26 -0
  31. data/lib/expressir/model/data_types/generic_entity.rb +26 -0
  32. data/lib/expressir/model/data_types/integer.rb +10 -0
  33. data/lib/expressir/model/data_types/list.rb +28 -0
  34. data/lib/expressir/model/data_types/logical.rb +10 -0
  35. data/lib/expressir/model/data_types/number.rb +10 -0
  36. data/lib/expressir/model/data_types/real.rb +19 -0
  37. data/lib/expressir/model/data_types/select.rb +28 -0
  38. data/lib/expressir/model/data_types/set.rb +25 -0
  39. data/lib/expressir/model/data_types/string.rb +22 -0
  40. data/lib/expressir/model/declaration.rb +9 -0
  41. data/lib/expressir/model/declarations/attribute.rb +47 -0
  42. data/lib/expressir/model/declarations/constant.rb +34 -0
  43. data/lib/expressir/model/declarations/entity.rb +53 -0
  44. data/lib/expressir/model/declarations/function.rb +67 -0
  45. data/lib/expressir/model/declarations/interface.rb +28 -0
  46. data/lib/expressir/model/declarations/interface_item.rb +23 -0
  47. data/lib/expressir/model/declarations/interfaced_item.rb +37 -0
  48. data/lib/expressir/model/declarations/parameter.rb +34 -0
  49. data/lib/expressir/model/declarations/procedure.rb +64 -0
  50. data/lib/expressir/model/declarations/remark_item.rb +21 -0
  51. data/lib/expressir/model/declarations/rule.rb +71 -0
  52. data/lib/expressir/model/declarations/schema.rb +117 -0
  53. data/lib/expressir/model/declarations/schema_version.rb +22 -0
  54. data/lib/expressir/model/declarations/schema_version_item.rb +22 -0
  55. data/lib/expressir/model/declarations/subtype_constraint.rb +40 -0
  56. data/lib/expressir/model/declarations/type.rb +45 -0
  57. data/lib/expressir/model/declarations/unique_rule.rb +31 -0
  58. data/lib/expressir/model/declarations/variable.rb +34 -0
  59. data/lib/expressir/model/declarations/where_rule.rb +31 -0
  60. data/lib/expressir/model/expression.rb +9 -0
  61. data/lib/expressir/model/expressions/aggregate_initializer.rb +6 -2
  62. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +22 -0
  63. data/lib/expressir/model/expressions/binary_expression.rb +16 -5
  64. data/lib/expressir/model/expressions/entity_constructor.rb +8 -3
  65. data/lib/expressir/model/expressions/function_call.rb +22 -0
  66. data/lib/expressir/model/expressions/interval.rb +17 -6
  67. data/lib/expressir/model/expressions/query_expression.rb +11 -7
  68. data/lib/expressir/model/expressions/unary_expression.rb +9 -3
  69. data/lib/expressir/model/identifier.rb +26 -4
  70. data/lib/expressir/model/literal.rb +9 -0
  71. data/lib/expressir/model/literals/binary.rb +6 -2
  72. data/lib/expressir/model/literals/integer.rb +6 -2
  73. data/lib/expressir/model/literals/logical.rb +6 -2
  74. data/lib/expressir/model/literals/real.rb +6 -2
  75. data/lib/expressir/model/literals/string.rb +8 -3
  76. data/lib/expressir/model/model_element.rb +63 -37
  77. data/lib/expressir/model/reference.rb +9 -0
  78. data/lib/expressir/model/references/attribute_reference.rb +22 -0
  79. data/lib/expressir/model/references/group_reference.rb +22 -0
  80. data/lib/expressir/model/references/index_reference.rb +27 -0
  81. data/lib/expressir/model/references/simple_reference.rb +24 -0
  82. data/lib/expressir/model/repository.rb +5 -1
  83. data/lib/expressir/model/statement.rb +9 -0
  84. data/lib/expressir/model/statements/alias.rb +11 -7
  85. data/lib/expressir/model/statements/assignment.rb +8 -3
  86. data/lib/expressir/model/statements/case.rb +10 -4
  87. data/lib/expressir/model/statements/case_action.rb +7 -2
  88. data/lib/expressir/model/statements/compound.rb +6 -2
  89. data/lib/expressir/model/statements/escape.rb +3 -1
  90. data/lib/expressir/model/statements/if.rb +10 -4
  91. data/lib/expressir/model/statements/null.rb +3 -1
  92. data/lib/expressir/model/statements/procedure_call.rb +22 -0
  93. data/lib/expressir/model/statements/repeat.rb +19 -11
  94. data/lib/expressir/model/statements/return.rb +6 -2
  95. data/lib/expressir/model/statements/skip.rb +3 -1
  96. data/lib/expressir/model/supertype_expression.rb +9 -0
  97. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +29 -0
  98. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +19 -0
  99. data/lib/expressir/model.rb +52 -45
  100. data/lib/expressir/version.rb +1 -1
  101. data/spec/expressir/model/model_element_spec.rb +131 -131
  102. data/spec/syntax/multiple.yaml +68 -68
  103. data/spec/syntax/remark.yaml +64 -64
  104. data/spec/syntax/single.yaml +5 -5
  105. data/spec/syntax/single_formatted.yaml +5 -5
  106. data/spec/syntax/syntax.yaml +1003 -1030
  107. metadata +105 -54
  108. data/lib/expressir/express/2.4/express_parser.so +0 -0
  109. data/lib/expressir/express/2.5/express_parser.so +0 -0
  110. data/lib/expressir/express/2.6/express_parser.so +0 -0
  111. data/lib/expressir/model/attribute.rb +0 -38
  112. data/lib/expressir/model/constant.rb +0 -28
  113. data/lib/expressir/model/entity.rb +0 -42
  114. data/lib/expressir/model/enumeration_item.rb +0 -22
  115. data/lib/expressir/model/expressions/aggregate_item.rb +0 -17
  116. data/lib/expressir/model/expressions/attribute_reference.rb +0 -17
  117. data/lib/expressir/model/expressions/call.rb +0 -17
  118. data/lib/expressir/model/expressions/group_reference.rb +0 -17
  119. data/lib/expressir/model/expressions/index_reference.rb +0 -19
  120. data/lib/expressir/model/expressions/simple_reference.rb +0 -19
  121. data/lib/expressir/model/function.rb +0 -57
  122. data/lib/expressir/model/interface.rb +0 -20
  123. data/lib/expressir/model/interface_item.rb +0 -15
  124. data/lib/expressir/model/interfaced_item.rb +0 -27
  125. data/lib/expressir/model/parameter.rb +0 -28
  126. data/lib/expressir/model/procedure.rb +0 -55
  127. data/lib/expressir/model/remark_item.rb +0 -15
  128. data/lib/expressir/model/rule.rb +0 -60
  129. data/lib/expressir/model/schema.rb +0 -100
  130. data/lib/expressir/model/schema_version.rb +0 -15
  131. data/lib/expressir/model/schema_version_item.rb +0 -15
  132. data/lib/expressir/model/statements/call.rb +0 -17
  133. data/lib/expressir/model/subtype_constraint.rb +0 -32
  134. data/lib/expressir/model/type.rb +0 -37
  135. data/lib/expressir/model/types/aggregate.rb +0 -28
  136. data/lib/expressir/model/types/array.rb +0 -23
  137. data/lib/expressir/model/types/bag.rb +0 -19
  138. data/lib/expressir/model/types/binary.rb +0 -17
  139. data/lib/expressir/model/types/boolean.rb +0 -8
  140. data/lib/expressir/model/types/enumeration.rb +0 -19
  141. data/lib/expressir/model/types/generic.rb +0 -24
  142. data/lib/expressir/model/types/generic_entity.rb +0 -24
  143. data/lib/expressir/model/types/integer.rb +0 -8
  144. data/lib/expressir/model/types/list.rb +0 -21
  145. data/lib/expressir/model/types/logical.rb +0 -8
  146. data/lib/expressir/model/types/number.rb +0 -8
  147. data/lib/expressir/model/types/real.rb +0 -15
  148. data/lib/expressir/model/types/select.rb +0 -21
  149. data/lib/expressir/model/types/set.rb +0 -19
  150. data/lib/expressir/model/types/string.rb +0 -17
  151. data/lib/expressir/model/unique_rule.rb +0 -26
  152. data/lib/expressir/model/variable.rb +0 -28
  153. data/lib/expressir/model/where_rule.rb +0 -26
@@ -1,7 +1,21 @@
1
1
  module Expressir
2
2
  module Express
3
+ # Formatter module - format references as hyperlinks
4
+ # @example Include into Formatter subclass
5
+ # formatter = Class.new(Expressir::Express::Formatter) do
6
+ # include Expressir::Express::HyperlinkFormatter
7
+ # end
3
8
  module HyperlinkFormatter
4
- def format_expressions_simple_reference(node)
9
+ # @!visibility private
10
+ def self.included(mod)
11
+ if !mod.superclass.private_method_defined? :format_references_simple_reference
12
+ raise 'Missing method'
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def format_references_simple_reference(node)
5
19
  return node.id unless node.base_path
6
20
 
7
21
  # find closest node with path
@@ -2,6 +2,7 @@ require "expressir/model"
2
2
 
3
3
  module Expressir
4
4
  module Express
5
+ # @abstract
5
6
  class ModelVisitor
6
7
  def visit(node)
7
8
  node.class.model_attrs.each do |variable|
@@ -25,16 +25,19 @@ repo = visitor.visit(parse_tree)
25
25
  module Expressir
26
26
  module Express
27
27
  class Parser
28
- def self.from_file(file, options = {})
29
- skip_references = options[:skip_references]
30
-
28
+ # Parses Express file into an Express model
29
+ # @param [String] file Express file path
30
+ # @param [Boolean] skip_references skip resolving references
31
+ # @param [Boolean] include_source attach original source code to model elements
32
+ # @return [Model::Repository]
33
+ def self.from_file(file, skip_references: nil, include_source: nil)
31
34
  input = File.read(file)
32
35
 
33
36
  parser = ::ExpressParser::Parser.parse(input)
34
37
 
35
38
  parse_tree = parser.syntax()
36
39
 
37
- visitor = Visitor.new(parser.tokens, options)
40
+ visitor = Visitor.new(parser.tokens, include_source: include_source)
38
41
  repository = visitor.visit(parse_tree)
39
42
 
40
43
  repository.schemas.each do |schema|
@@ -49,19 +52,22 @@ module Expressir
49
52
  repository
50
53
  end
51
54
 
52
- def self.from_files(files, options = {})
53
- skip_references = options[:skip_references]
54
-
55
+ # Parses Express files into an Express model
56
+ # @param [Array<String>] files Express file paths
57
+ # @param [Boolean] skip_references skip resolving references
58
+ # @param [Boolean] include_source attach original source code to model elements
59
+ # @return [Model::Repository]
60
+ def self.from_files(files, skip_references: nil, include_source: nil)
55
61
  schemas = files.each_with_index.map do |file, i|
56
62
  # start = Time.now
57
- repository = self.from_file(file, options.merge(skip_references: true))
63
+ repository = self.from_file(file, skip_references: true)
58
64
  # STDERR.puts "#{i+1}/#{files.length} #{file} #{Time.now - start}"
59
65
  repository.schemas
60
66
  end.flatten
61
67
 
62
- repository = Model::Repository.new({
68
+ repository = Model::Repository.new(
63
69
  schemas: schemas
64
- })
70
+ )
65
71
 
66
72
  unless skip_references
67
73
  resolve_references_model_visitor = ResolveReferencesModelVisitor.new
@@ -5,17 +5,19 @@ module Expressir
5
5
  module Express
6
6
  class ResolveReferencesModelVisitor < ModelVisitor
7
7
  def visit(node)
8
- if node.is_a? Model::Expressions::SimpleReference
9
- visit_expressions_simple_reference(node)
8
+ if node.is_a? Model::References::SimpleReference
9
+ visit_references_simple_reference(node)
10
10
  end
11
11
 
12
12
  super
13
13
  end
14
14
 
15
- def visit_expressions_simple_reference(node)
16
- return if node.parent.is_a? Model::Expressions::AttributeReference
15
+ private
17
16
 
18
- if node.parent.is_a? Model::InterfaceItem
17
+ def visit_references_simple_reference(node)
18
+ return if node.parent.is_a? Model::References::AttributeReference
19
+
20
+ if node.parent.is_a? Model::Declarations::InterfaceItem
19
21
  base_item = node.find("#{node.parent.parent.schema.id}.#{node.parent.ref.id}")
20
22
  else
21
23
  base_item = node.find(node.id)
@@ -1,8 +1,22 @@
1
1
  module Expressir
2
2
  module Express
3
+ # Formatter module - format schema as schema head only
4
+ # @example Include into Formatter subclass
5
+ # formatter = Class.new(Expressir::Express::Formatter) do
6
+ # include Expressir::Express::SchemaHeadFormatter
7
+ # end
3
8
  module SchemaHeadFormatter
4
- def format_schema(node)
5
- format_schema_head(node)
9
+ # @!visibility private
10
+ def self.included(mod)
11
+ if !mod.superclass.private_method_defined? :format_declarations_schema or !mod.superclass.private_method_defined? :format_declarations_schema_head
12
+ raise 'Missing method'
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def format_declarations_schema(node)
19
+ format_declarations_schema_head(node)
6
20
  end
7
21
  end
8
22
  end