expressir 0.2.11 → 0.2.12
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/exe/format +16 -0
- data/expressir.gemspec +1 -0
- data/lib/expressir/express_exp/formatter.rb +75 -89
- data/lib/expressir/express_exp/hyperlink_formatter.rb +25 -0
- data/lib/expressir/express_exp/schema_head_formatter.rb +14 -0
- data/lib/expressir/express_exp/visitor.rb +58 -58
- data/lib/expressir/model.rb +0 -1
- data/lib/expressir/model/attribute.rb +2 -0
- data/lib/expressir/model/constant.rb +2 -0
- data/lib/expressir/model/entity.rb +3 -2
- data/lib/expressir/model/enumeration_item.rb +2 -0
- data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -0
- data/lib/expressir/model/expressions/aggregate_item.rb +2 -0
- data/lib/expressir/model/expressions/attribute_reference.rb +2 -0
- data/lib/expressir/model/expressions/binary_expression.rb +2 -0
- data/lib/expressir/model/expressions/call.rb +2 -0
- data/lib/expressir/model/expressions/entity_constructor.rb +2 -0
- data/lib/expressir/model/expressions/group_reference.rb +2 -0
- data/lib/expressir/model/expressions/index_reference.rb +2 -0
- data/lib/expressir/model/expressions/interval.rb +2 -0
- data/lib/expressir/model/expressions/query_expression.rb +2 -1
- data/lib/expressir/model/expressions/simple_reference.rb +2 -0
- data/lib/expressir/model/expressions/unary_expression.rb +2 -0
- data/lib/expressir/model/function.rb +3 -8
- data/lib/expressir/model/identifier.rb +0 -1
- data/lib/expressir/model/informal_proposition.rb +2 -0
- data/lib/expressir/model/interface.rb +2 -0
- data/lib/expressir/model/literals/binary.rb +2 -0
- data/lib/expressir/model/literals/integer.rb +2 -0
- data/lib/expressir/model/literals/logical.rb +2 -0
- data/lib/expressir/model/literals/real.rb +2 -0
- data/lib/expressir/model/literals/string.rb +2 -0
- data/lib/expressir/model/model_element.rb +71 -4
- data/lib/expressir/model/parameter.rb +2 -0
- data/lib/expressir/model/procedure.rb +3 -8
- data/lib/expressir/model/renamed_ref.rb +2 -0
- data/lib/expressir/model/repository.rb +2 -2
- data/lib/expressir/model/rule.rb +4 -9
- data/lib/expressir/model/schema.rb +5 -8
- data/lib/expressir/model/statements/alias.rb +2 -1
- data/lib/expressir/model/statements/assignment.rb +2 -0
- data/lib/expressir/model/statements/call.rb +2 -0
- data/lib/expressir/model/statements/case.rb +2 -0
- data/lib/expressir/model/statements/case_action.rb +2 -0
- data/lib/expressir/model/statements/compound.rb +2 -0
- data/lib/expressir/model/statements/if.rb +2 -0
- data/lib/expressir/model/statements/repeat.rb +2 -1
- data/lib/expressir/model/statements/return.rb +2 -0
- data/lib/expressir/model/subtype_constraint.rb +2 -1
- data/lib/expressir/model/type.rb +3 -6
- data/lib/expressir/model/types/aggregate.rb +2 -0
- data/lib/expressir/model/types/array.rb +2 -0
- data/lib/expressir/model/types/bag.rb +2 -0
- data/lib/expressir/model/types/binary.rb +2 -0
- data/lib/expressir/model/types/enumeration.rb +2 -0
- data/lib/expressir/model/types/generic.rb +2 -0
- data/lib/expressir/model/types/generic_entity.rb +2 -0
- data/lib/expressir/model/types/list.rb +2 -0
- data/lib/expressir/model/types/real.rb +2 -0
- data/lib/expressir/model/types/select.rb +2 -0
- data/lib/expressir/model/types/set.rb +2 -0
- data/lib/expressir/model/types/string.rb +2 -0
- data/lib/expressir/model/unique.rb +2 -0
- data/lib/expressir/model/variable.rb +2 -0
- data/lib/expressir/model/where.rb +2 -0
- data/lib/expressir/version.rb +1 -1
- data/original/examples/syntax/hyperlink.exp +8 -0
- data/original/examples/syntax/hyperlink_formatted.exp +19 -0
- data/original/examples/syntax/syntax.exp +18 -18
- data/original/examples/syntax/syntax_formatted.exp +32 -24
- data/spec/expressir/express_exp/{format_remark_spec.rb → formatter/remark_spec.rb} +2 -2
- data/spec/expressir/express_exp/{format_syntax_spec.rb → formatter/syntax_spec.rb} +2 -2
- data/spec/expressir/express_exp/hyperlink_formatter_spec.rb +24 -0
- data/spec/expressir/express_exp/{head_source_spec.rb → parser/head_source_spec.rb} +1 -1
- data/spec/expressir/express_exp/{parse_multiple_spec.rb → parser/multiple_spec.rb} +1 -1
- data/spec/expressir/express_exp/{parse_remark_spec.rb → parser/remark_spec.rb} +2 -2
- data/spec/expressir/express_exp/{source_spec.rb → parser/source_spec.rb} +1 -1
- data/spec/expressir/express_exp/{parse_syntax_spec.rb → parser/syntax_spec.rb} +76 -44
- data/spec/expressir/express_exp/schema_head_formatter_spec.rb +36 -0
- data/spec/expressir/model/{scope_spec.rb → model_element/find_spec.rb} +7 -2
- data/spec/expressir/model/{model_element_spec.rb → model_element/hash_spec.rb} +7 -18
- metadata +32 -13
- data/lib/expressir/model/scope.rb +0 -71
- data/spec/expressir/express_exp/ap233_spec.rb +0 -22
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
require "expressir/express_exp/parser"
|
|
3
|
+
require "expressir/express_exp/schema_head_formatter"
|
|
4
|
+
|
|
5
|
+
RSpec.describe Expressir::ExpressExp::SchemaHeadFormatter do
|
|
6
|
+
describe ".format" do
|
|
7
|
+
it "formats schema head" do
|
|
8
|
+
repo = Expressir::ExpressExp::Parser.from_file(sample_file)
|
|
9
|
+
|
|
10
|
+
result = Expressir::ExpressExp::SchemaHeadFormatter.format(repo)
|
|
11
|
+
|
|
12
|
+
expect(result).to eq(<<~EXP.strip
|
|
13
|
+
SCHEMA syntax_schema 'version';
|
|
14
|
+
USE FROM contract_schema;
|
|
15
|
+
USE FROM contract_schema
|
|
16
|
+
(contract);
|
|
17
|
+
USE FROM contract_schema
|
|
18
|
+
(contract, contract2);
|
|
19
|
+
USE FROM contract_schema
|
|
20
|
+
(contract AS contract2);
|
|
21
|
+
REFERENCE FROM contract_schema;
|
|
22
|
+
REFERENCE FROM contract_schema
|
|
23
|
+
(contract);
|
|
24
|
+
REFERENCE FROM contract_schema
|
|
25
|
+
(contract, contract2);
|
|
26
|
+
REFERENCE FROM contract_schema
|
|
27
|
+
(contract AS contract2);
|
|
28
|
+
EXP
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def sample_file
|
|
34
|
+
@sample_file ||= Expressir.root_path.join("original", "examples", "syntax", "syntax.exp")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
2
|
require "expressir/express_exp/parser"
|
|
3
3
|
|
|
4
|
-
RSpec.describe Expressir::Model::
|
|
4
|
+
RSpec.describe Expressir::Model::ModelElement do
|
|
5
5
|
describe ".find" do
|
|
6
6
|
it "finds an object" do
|
|
7
|
-
repo = Expressir::ExpressExp::Parser.
|
|
7
|
+
repo = Expressir::ExpressExp::Parser.from_file(sample_file)
|
|
8
8
|
|
|
9
9
|
# universal scope
|
|
10
10
|
expect(repo.find('remark_schema')).to be_instance_of(Expressir::Model::Schema)
|
|
@@ -112,6 +112,11 @@ RSpec.describe Expressir::Model::Scope do
|
|
|
112
112
|
expect(rule.find('remark_variable')).to be_instance_of(Expressir::Model::Variable)
|
|
113
113
|
expect(rule.find('WR1')).to be_instance_of(Expressir::Model::Where)
|
|
114
114
|
expect(rule.find('wr:WR1')).to be_instance_of(Expressir::Model::Where)
|
|
115
|
+
|
|
116
|
+
# retry search in parent scope
|
|
117
|
+
expect(entity.find('remark_type')).to be_instance_of(Expressir::Model::Type)
|
|
118
|
+
expect(entity.find('remark_type.WR1')).to be_instance_of(Expressir::Model::Where)
|
|
119
|
+
expect(entity.find('remark_type.wr:WR1')).to be_instance_of(Expressir::Model::Where)
|
|
115
120
|
end
|
|
116
121
|
end
|
|
117
122
|
|
|
@@ -33,9 +33,14 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
|
33
33
|
|
|
34
34
|
describe ".to_hash" do
|
|
35
35
|
it "exports an object to a hash" do
|
|
36
|
-
repo = Expressir::ExpressExp::Parser.
|
|
36
|
+
repo = Expressir::ExpressExp::Parser.from_file(sample_file)
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
class CustomFormatter < Expressir::ExpressExp::Formatter
|
|
39
|
+
def format_schema(node)
|
|
40
|
+
"Oook."
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
result = repo.to_hash(formatter: CustomFormatter)
|
|
39
44
|
|
|
40
45
|
expect(result).to be_instance_of(Hash)
|
|
41
46
|
expect(result["_class"]).to eq("Expressir::Model::Repository")
|
|
@@ -49,22 +54,6 @@ RSpec.describe Expressir::Model::ModelElement do
|
|
|
49
54
|
expect(result["schemas"].first["entities"].first).to be_instance_of(Hash)
|
|
50
55
|
expect(result["schemas"].first["entities"].first["_class"]).to eq("Expressir::Model::Entity")
|
|
51
56
|
expect(result["schemas"].first["entities"].first["id"]).to eq("empty_entity")
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "exports an object to a hash with a custom formatter" do
|
|
55
|
-
repo = Expressir::ExpressExp::Parser.from_exp(sample_file)
|
|
56
|
-
|
|
57
|
-
class CustomFormatter < Expressir::ExpressExp::Formatter
|
|
58
|
-
def format_schema(node)
|
|
59
|
-
"Oook."
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
result = repo.to_hash({ formatter: CustomFormatter })
|
|
63
|
-
|
|
64
|
-
expect(result).to be_instance_of(Hash)
|
|
65
|
-
expect(result["_class"]).to eq("Expressir::Model::Repository")
|
|
66
|
-
expect(result["schemas"]).to be_instance_of(Array)
|
|
67
|
-
expect(result["schemas"].count).to eq(1)
|
|
68
57
|
expect(result["schemas"].first["source"]).to eq("Oook.")
|
|
69
58
|
end
|
|
70
59
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: expressir
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.12
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-02-
|
|
11
|
+
date: 2021-02-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|
|
@@ -94,6 +94,20 @@ dependencies:
|
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
96
|
version: 0.12.2
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: byebug
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '11.1'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '11.1'
|
|
97
111
|
- !ruby/object:Gem::Dependency
|
|
98
112
|
name: rake
|
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -175,6 +189,7 @@ files:
|
|
|
175
189
|
- demo.rb
|
|
176
190
|
- docs/development.md
|
|
177
191
|
- exe/expressir
|
|
192
|
+
- exe/format
|
|
178
193
|
- exe/generate-parser
|
|
179
194
|
- expressir.gemspec
|
|
180
195
|
- ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt
|
|
@@ -554,7 +569,9 @@ files:
|
|
|
554
569
|
- lib/expressir/express/unique_rule.rb
|
|
555
570
|
- lib/expressir/express/where_rule.rb
|
|
556
571
|
- lib/expressir/express_exp/formatter.rb
|
|
572
|
+
- lib/expressir/express_exp/hyperlink_formatter.rb
|
|
557
573
|
- lib/expressir/express_exp/parser.rb
|
|
574
|
+
- lib/expressir/express_exp/schema_head_formatter.rb
|
|
558
575
|
- lib/expressir/express_exp/visitor.rb
|
|
559
576
|
- lib/expressir/express_parser.rb
|
|
560
577
|
- lib/expressir/model.rb
|
|
@@ -590,7 +607,6 @@ files:
|
|
|
590
607
|
- lib/expressir/model/repository.rb
|
|
591
608
|
- lib/expressir/model/rule.rb
|
|
592
609
|
- lib/expressir/model/schema.rb
|
|
593
|
-
- lib/expressir/model/scope.rb
|
|
594
610
|
- lib/expressir/model/statements/alias.rb
|
|
595
611
|
- lib/expressir/model/statements/assignment.rb
|
|
596
612
|
- lib/expressir/model/statements/call.rb
|
|
@@ -656,6 +672,8 @@ files:
|
|
|
656
672
|
- original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.owl
|
|
657
673
|
- original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xmi
|
|
658
674
|
- original/examples/plcs/ap239e2_arm_lf_stepmod-2010-01-25.xml
|
|
675
|
+
- original/examples/syntax/hyperlink.exp
|
|
676
|
+
- original/examples/syntax/hyperlink_formatted.exp
|
|
659
677
|
- original/examples/syntax/remark.exp
|
|
660
678
|
- original/examples/syntax/remark_formatted.exp
|
|
661
679
|
- original/examples/syntax/simple.exp
|
|
@@ -673,16 +691,17 @@ files:
|
|
|
673
691
|
- spec/acceptance/express_to_owl_spec.rb
|
|
674
692
|
- spec/acceptance/version_spec.rb
|
|
675
693
|
- spec/expressir/express/repository_spec.rb
|
|
676
|
-
- spec/expressir/express_exp/
|
|
677
|
-
- spec/expressir/express_exp/
|
|
678
|
-
- spec/expressir/express_exp/
|
|
679
|
-
- spec/expressir/express_exp/head_source_spec.rb
|
|
680
|
-
- spec/expressir/express_exp/
|
|
681
|
-
- spec/expressir/express_exp/
|
|
682
|
-
- spec/expressir/express_exp/
|
|
683
|
-
- spec/expressir/express_exp/
|
|
684
|
-
- spec/expressir/
|
|
685
|
-
- spec/expressir/model/
|
|
694
|
+
- spec/expressir/express_exp/formatter/remark_spec.rb
|
|
695
|
+
- spec/expressir/express_exp/formatter/syntax_spec.rb
|
|
696
|
+
- spec/expressir/express_exp/hyperlink_formatter_spec.rb
|
|
697
|
+
- spec/expressir/express_exp/parser/head_source_spec.rb
|
|
698
|
+
- spec/expressir/express_exp/parser/multiple_spec.rb
|
|
699
|
+
- spec/expressir/express_exp/parser/remark_spec.rb
|
|
700
|
+
- spec/expressir/express_exp/parser/source_spec.rb
|
|
701
|
+
- spec/expressir/express_exp/parser/syntax_spec.rb
|
|
702
|
+
- spec/expressir/express_exp/schema_head_formatter_spec.rb
|
|
703
|
+
- spec/expressir/model/model_element/find_spec.rb
|
|
704
|
+
- spec/expressir/model/model_element/hash_spec.rb
|
|
686
705
|
- spec/expressr_spec.rb
|
|
687
706
|
- spec/spec_helper.rb
|
|
688
707
|
- spec/support/console_helper.rb
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
module Expressir
|
|
2
|
-
module Model
|
|
3
|
-
module Scope
|
|
4
|
-
def find(path)
|
|
5
|
-
current_path, _, rest = path.partition(".")
|
|
6
|
-
|
|
7
|
-
# ignore prefix
|
|
8
|
-
_, _, current_path = current_path.rpartition(":")
|
|
9
|
-
|
|
10
|
-
current_path = current_path.downcase
|
|
11
|
-
child = children.find{|x| x.id and x.id.downcase == current_path}
|
|
12
|
-
|
|
13
|
-
if !rest.empty? and child.class.method_defined? :find
|
|
14
|
-
child.find(rest)
|
|
15
|
-
else
|
|
16
|
-
child
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def find_or_create(path)
|
|
21
|
-
child = find(path)
|
|
22
|
-
|
|
23
|
-
if !child
|
|
24
|
-
# check if path should create implicit informal proposal
|
|
25
|
-
# see https://github.com/lutaml/expressir/issues/50
|
|
26
|
-
rest, _, current_path = path.rpartition(".")
|
|
27
|
-
|
|
28
|
-
if !rest.empty?
|
|
29
|
-
child = find(rest)
|
|
30
|
-
else
|
|
31
|
-
child = self
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
if child.class.method_defined? :informal_propositions
|
|
35
|
-
# ignore prefix
|
|
36
|
-
_, _, current_path = current_path.rpartition(":")
|
|
37
|
-
|
|
38
|
-
# match informal proposition id
|
|
39
|
-
informal_proposition_id = current_path.match(/^IP\d+$/).to_a[0]
|
|
40
|
-
|
|
41
|
-
if informal_proposition_id
|
|
42
|
-
# create implicit informal proposition
|
|
43
|
-
informal_proposition = Model::InformalProposition.new({
|
|
44
|
-
id: informal_proposition_id
|
|
45
|
-
})
|
|
46
|
-
informal_proposition.parent = child
|
|
47
|
-
|
|
48
|
-
child.informal_propositions << informal_proposition
|
|
49
|
-
|
|
50
|
-
informal_proposition
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
else
|
|
54
|
-
child
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def attach_parent_to_children
|
|
59
|
-
children.each do |child_node|
|
|
60
|
-
if child_node.class.method_defined? :parent and !child_node.parent
|
|
61
|
-
child_node.parent = self
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def children
|
|
67
|
-
raise 'Not implemented'
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
require "expressir/express_exp/parser"
|
|
3
|
-
|
|
4
|
-
RSpec.describe Expressir::ExpressExp::Parser do
|
|
5
|
-
describe ".from_file" do
|
|
6
|
-
it "build an instance from a file" do
|
|
7
|
-
repo = Expressir::ExpressExp::Parser.from_exp(sample_file)
|
|
8
|
-
|
|
9
|
-
schemas = repo.schemas
|
|
10
|
-
expect(schemas.count).to eq(1)
|
|
11
|
-
|
|
12
|
-
schema = schemas.first
|
|
13
|
-
expect(schema.id).to eq("Ap233_systems_engineering_arm_LF")
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def sample_file
|
|
18
|
-
@sample_file ||= Expressir.root_path.join(
|
|
19
|
-
"original", "examples", "ap233", "ap233e1_arm_lf_stepmod-2010-11-12.exp"
|
|
20
|
-
)
|
|
21
|
-
end
|
|
22
|
-
end
|