expressir 1.0.0-arm64-darwin → 1.2.1-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.
- checksums.yaml +4 -4
- data/.cross_rubies +6 -18
- data/.github/workflows/rake.yml +50 -5
- data/.github/workflows/release.yml +11 -3
- data/.hound.yml +3 -0
- data/.rubocop.yml +6 -506
- data/.yardopts +11 -0
- data/Rakefile +3 -0
- data/expressir.gemspec +4 -1
- data/lib/expressir/express/2.7/express_parser.bundle +0 -0
- data/lib/expressir/express/3.0/express_parser.bundle +0 -0
- data/lib/expressir/express/3.1/express_parser.bundle +0 -0
- data/lib/expressir/express/cache.rb +16 -10
- data/lib/expressir/express/formatter.rb +231 -180
- data/lib/expressir/express/hyperlink_formatter.rb +15 -1
- data/lib/expressir/express/model_visitor.rb +1 -0
- data/lib/expressir/express/parser.rb +16 -10
- data/lib/expressir/express/resolve_references_model_visitor.rb +7 -5
- data/lib/expressir/express/schema_head_formatter.rb +16 -2
- data/lib/expressir/express/visitor.rb +280 -254
- data/lib/expressir/model/cache.rb +6 -2
- data/lib/expressir/model/data_type.rb +9 -0
- data/lib/expressir/model/data_types/aggregate.rb +31 -0
- data/lib/expressir/model/data_types/array.rb +31 -0
- data/lib/expressir/model/data_types/bag.rb +25 -0
- data/lib/expressir/model/data_types/binary.rb +22 -0
- data/lib/expressir/model/data_types/boolean.rb +10 -0
- data/lib/expressir/model/data_types/enumeration.rb +25 -0
- data/lib/expressir/model/data_types/enumeration_item.rb +26 -0
- data/lib/expressir/model/data_types/generic.rb +26 -0
- data/lib/expressir/model/data_types/generic_entity.rb +26 -0
- data/lib/expressir/model/data_types/integer.rb +10 -0
- data/lib/expressir/model/data_types/list.rb +28 -0
- data/lib/expressir/model/data_types/logical.rb +10 -0
- data/lib/expressir/model/data_types/number.rb +10 -0
- data/lib/expressir/model/data_types/real.rb +19 -0
- data/lib/expressir/model/data_types/select.rb +28 -0
- data/lib/expressir/model/data_types/set.rb +25 -0
- data/lib/expressir/model/data_types/string.rb +22 -0
- data/lib/expressir/model/declaration.rb +9 -0
- data/lib/expressir/model/declarations/attribute.rb +47 -0
- data/lib/expressir/model/declarations/constant.rb +34 -0
- data/lib/expressir/model/declarations/entity.rb +53 -0
- data/lib/expressir/model/declarations/function.rb +67 -0
- data/lib/expressir/model/declarations/interface.rb +28 -0
- data/lib/expressir/model/declarations/interface_item.rb +23 -0
- data/lib/expressir/model/declarations/interfaced_item.rb +37 -0
- data/lib/expressir/model/declarations/parameter.rb +34 -0
- data/lib/expressir/model/declarations/procedure.rb +64 -0
- data/lib/expressir/model/declarations/remark_item.rb +21 -0
- data/lib/expressir/model/declarations/rule.rb +71 -0
- data/lib/expressir/model/declarations/schema.rb +117 -0
- data/lib/expressir/model/declarations/schema_version.rb +22 -0
- data/lib/expressir/model/declarations/schema_version_item.rb +22 -0
- data/lib/expressir/model/declarations/subtype_constraint.rb +40 -0
- data/lib/expressir/model/declarations/type.rb +45 -0
- data/lib/expressir/model/declarations/unique_rule.rb +31 -0
- data/lib/expressir/model/declarations/variable.rb +34 -0
- data/lib/expressir/model/declarations/where_rule.rb +31 -0
- data/lib/expressir/model/expression.rb +9 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +6 -2
- data/lib/expressir/model/expressions/aggregate_initializer_item.rb +22 -0
- data/lib/expressir/model/expressions/binary_expression.rb +16 -5
- data/lib/expressir/model/expressions/entity_constructor.rb +8 -3
- data/lib/expressir/model/expressions/function_call.rb +22 -0
- data/lib/expressir/model/expressions/interval.rb +17 -6
- data/lib/expressir/model/expressions/query_expression.rb +11 -7
- data/lib/expressir/model/expressions/unary_expression.rb +9 -3
- data/lib/expressir/model/identifier.rb +26 -4
- data/lib/expressir/model/literal.rb +9 -0
- data/lib/expressir/model/literals/binary.rb +6 -2
- data/lib/expressir/model/literals/integer.rb +6 -2
- data/lib/expressir/model/literals/logical.rb +6 -2
- data/lib/expressir/model/literals/real.rb +6 -2
- data/lib/expressir/model/literals/string.rb +8 -3
- data/lib/expressir/model/model_element.rb +63 -37
- data/lib/expressir/model/reference.rb +9 -0
- data/lib/expressir/model/references/attribute_reference.rb +22 -0
- data/lib/expressir/model/references/group_reference.rb +22 -0
- data/lib/expressir/model/references/index_reference.rb +27 -0
- data/lib/expressir/model/references/simple_reference.rb +24 -0
- data/lib/expressir/model/repository.rb +5 -1
- data/lib/expressir/model/statement.rb +9 -0
- data/lib/expressir/model/statements/alias.rb +11 -7
- data/lib/expressir/model/statements/assignment.rb +8 -3
- data/lib/expressir/model/statements/case.rb +10 -4
- data/lib/expressir/model/statements/case_action.rb +7 -2
- data/lib/expressir/model/statements/compound.rb +6 -2
- data/lib/expressir/model/statements/escape.rb +3 -1
- data/lib/expressir/model/statements/if.rb +10 -4
- data/lib/expressir/model/statements/null.rb +3 -1
- data/lib/expressir/model/statements/procedure_call.rb +22 -0
- data/lib/expressir/model/statements/repeat.rb +19 -11
- data/lib/expressir/model/statements/return.rb +6 -2
- data/lib/expressir/model/statements/skip.rb +3 -1
- data/lib/expressir/model/supertype_expression.rb +9 -0
- data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +29 -0
- data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +19 -0
- data/lib/expressir/model.rb +52 -45
- data/lib/expressir/version.rb +1 -1
- data/spec/expressir/model/model_element_spec.rb +131 -131
- data/spec/syntax/multiple.yaml +68 -68
- data/spec/syntax/remark.yaml +64 -64
- data/spec/syntax/single.yaml +5 -5
- data/spec/syntax/single_formatted.yaml +5 -5
- data/spec/syntax/syntax.yaml +1003 -1030
- metadata +105 -54
- data/lib/expressir/express/2.4/express_parser.bundle +0 -0
- data/lib/expressir/express/2.5/express_parser.bundle +0 -0
- data/lib/expressir/express/2.6/express_parser.bundle +0 -0
- data/lib/expressir/model/attribute.rb +0 -38
- data/lib/expressir/model/constant.rb +0 -28
- data/lib/expressir/model/entity.rb +0 -42
- data/lib/expressir/model/enumeration_item.rb +0 -22
- data/lib/expressir/model/expressions/aggregate_item.rb +0 -17
- data/lib/expressir/model/expressions/attribute_reference.rb +0 -17
- data/lib/expressir/model/expressions/call.rb +0 -17
- data/lib/expressir/model/expressions/group_reference.rb +0 -17
- data/lib/expressir/model/expressions/index_reference.rb +0 -19
- data/lib/expressir/model/expressions/simple_reference.rb +0 -19
- data/lib/expressir/model/function.rb +0 -57
- data/lib/expressir/model/interface.rb +0 -20
- data/lib/expressir/model/interface_item.rb +0 -15
- data/lib/expressir/model/interfaced_item.rb +0 -27
- data/lib/expressir/model/parameter.rb +0 -28
- data/lib/expressir/model/procedure.rb +0 -55
- data/lib/expressir/model/remark_item.rb +0 -15
- data/lib/expressir/model/rule.rb +0 -60
- data/lib/expressir/model/schema.rb +0 -100
- data/lib/expressir/model/schema_version.rb +0 -15
- data/lib/expressir/model/schema_version_item.rb +0 -15
- data/lib/expressir/model/statements/call.rb +0 -17
- data/lib/expressir/model/subtype_constraint.rb +0 -32
- data/lib/expressir/model/type.rb +0 -37
- data/lib/expressir/model/types/aggregate.rb +0 -28
- data/lib/expressir/model/types/array.rb +0 -23
- data/lib/expressir/model/types/bag.rb +0 -19
- data/lib/expressir/model/types/binary.rb +0 -17
- data/lib/expressir/model/types/boolean.rb +0 -8
- data/lib/expressir/model/types/enumeration.rb +0 -19
- data/lib/expressir/model/types/generic.rb +0 -24
- data/lib/expressir/model/types/generic_entity.rb +0 -24
- data/lib/expressir/model/types/integer.rb +0 -8
- data/lib/expressir/model/types/list.rb +0 -21
- data/lib/expressir/model/types/logical.rb +0 -8
- data/lib/expressir/model/types/number.rb +0 -8
- data/lib/expressir/model/types/real.rb +0 -15
- data/lib/expressir/model/types/select.rb +0 -21
- data/lib/expressir/model/types/set.rb +0 -19
- data/lib/expressir/model/types/string.rb +0 -17
- data/lib/expressir/model/unique_rule.rb +0 -26
- data/lib/expressir/model/variable.rb +0 -28
- 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
|
-
|
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
|
@@ -25,16 +25,19 @@ repo = visitor.visit(parse_tree)
|
|
25
25
|
module Expressir
|
26
26
|
module Express
|
27
27
|
class Parser
|
28
|
-
|
29
|
-
|
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,
|
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
|
-
|
53
|
-
|
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,
|
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::
|
9
|
-
|
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
|
-
|
16
|
-
return if node.parent.is_a? Model::Expressions::AttributeReference
|
15
|
+
private
|
17
16
|
|
18
|
-
|
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
|
-
|
5
|
-
|
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
|