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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/exe/format +16 -0
  3. data/expressir.gemspec +1 -0
  4. data/lib/expressir/express_exp/formatter.rb +75 -89
  5. data/lib/expressir/express_exp/hyperlink_formatter.rb +25 -0
  6. data/lib/expressir/express_exp/schema_head_formatter.rb +14 -0
  7. data/lib/expressir/express_exp/visitor.rb +58 -58
  8. data/lib/expressir/model.rb +0 -1
  9. data/lib/expressir/model/attribute.rb +2 -0
  10. data/lib/expressir/model/constant.rb +2 -0
  11. data/lib/expressir/model/entity.rb +3 -2
  12. data/lib/expressir/model/enumeration_item.rb +2 -0
  13. data/lib/expressir/model/expressions/aggregate_initializer.rb +2 -0
  14. data/lib/expressir/model/expressions/aggregate_item.rb +2 -0
  15. data/lib/expressir/model/expressions/attribute_reference.rb +2 -0
  16. data/lib/expressir/model/expressions/binary_expression.rb +2 -0
  17. data/lib/expressir/model/expressions/call.rb +2 -0
  18. data/lib/expressir/model/expressions/entity_constructor.rb +2 -0
  19. data/lib/expressir/model/expressions/group_reference.rb +2 -0
  20. data/lib/expressir/model/expressions/index_reference.rb +2 -0
  21. data/lib/expressir/model/expressions/interval.rb +2 -0
  22. data/lib/expressir/model/expressions/query_expression.rb +2 -1
  23. data/lib/expressir/model/expressions/simple_reference.rb +2 -0
  24. data/lib/expressir/model/expressions/unary_expression.rb +2 -0
  25. data/lib/expressir/model/function.rb +3 -8
  26. data/lib/expressir/model/identifier.rb +0 -1
  27. data/lib/expressir/model/informal_proposition.rb +2 -0
  28. data/lib/expressir/model/interface.rb +2 -0
  29. data/lib/expressir/model/literals/binary.rb +2 -0
  30. data/lib/expressir/model/literals/integer.rb +2 -0
  31. data/lib/expressir/model/literals/logical.rb +2 -0
  32. data/lib/expressir/model/literals/real.rb +2 -0
  33. data/lib/expressir/model/literals/string.rb +2 -0
  34. data/lib/expressir/model/model_element.rb +71 -4
  35. data/lib/expressir/model/parameter.rb +2 -0
  36. data/lib/expressir/model/procedure.rb +3 -8
  37. data/lib/expressir/model/renamed_ref.rb +2 -0
  38. data/lib/expressir/model/repository.rb +2 -2
  39. data/lib/expressir/model/rule.rb +4 -9
  40. data/lib/expressir/model/schema.rb +5 -8
  41. data/lib/expressir/model/statements/alias.rb +2 -1
  42. data/lib/expressir/model/statements/assignment.rb +2 -0
  43. data/lib/expressir/model/statements/call.rb +2 -0
  44. data/lib/expressir/model/statements/case.rb +2 -0
  45. data/lib/expressir/model/statements/case_action.rb +2 -0
  46. data/lib/expressir/model/statements/compound.rb +2 -0
  47. data/lib/expressir/model/statements/if.rb +2 -0
  48. data/lib/expressir/model/statements/repeat.rb +2 -1
  49. data/lib/expressir/model/statements/return.rb +2 -0
  50. data/lib/expressir/model/subtype_constraint.rb +2 -1
  51. data/lib/expressir/model/type.rb +3 -6
  52. data/lib/expressir/model/types/aggregate.rb +2 -0
  53. data/lib/expressir/model/types/array.rb +2 -0
  54. data/lib/expressir/model/types/bag.rb +2 -0
  55. data/lib/expressir/model/types/binary.rb +2 -0
  56. data/lib/expressir/model/types/enumeration.rb +2 -0
  57. data/lib/expressir/model/types/generic.rb +2 -0
  58. data/lib/expressir/model/types/generic_entity.rb +2 -0
  59. data/lib/expressir/model/types/list.rb +2 -0
  60. data/lib/expressir/model/types/real.rb +2 -0
  61. data/lib/expressir/model/types/select.rb +2 -0
  62. data/lib/expressir/model/types/set.rb +2 -0
  63. data/lib/expressir/model/types/string.rb +2 -0
  64. data/lib/expressir/model/unique.rb +2 -0
  65. data/lib/expressir/model/variable.rb +2 -0
  66. data/lib/expressir/model/where.rb +2 -0
  67. data/lib/expressir/version.rb +1 -1
  68. data/original/examples/syntax/hyperlink.exp +8 -0
  69. data/original/examples/syntax/hyperlink_formatted.exp +19 -0
  70. data/original/examples/syntax/syntax.exp +18 -18
  71. data/original/examples/syntax/syntax_formatted.exp +32 -24
  72. data/spec/expressir/express_exp/{format_remark_spec.rb → formatter/remark_spec.rb} +2 -2
  73. data/spec/expressir/express_exp/{format_syntax_spec.rb → formatter/syntax_spec.rb} +2 -2
  74. data/spec/expressir/express_exp/hyperlink_formatter_spec.rb +24 -0
  75. data/spec/expressir/express_exp/{head_source_spec.rb → parser/head_source_spec.rb} +1 -1
  76. data/spec/expressir/express_exp/{parse_multiple_spec.rb → parser/multiple_spec.rb} +1 -1
  77. data/spec/expressir/express_exp/{parse_remark_spec.rb → parser/remark_spec.rb} +2 -2
  78. data/spec/expressir/express_exp/{source_spec.rb → parser/source_spec.rb} +1 -1
  79. data/spec/expressir/express_exp/{parse_syntax_spec.rb → parser/syntax_spec.rb} +76 -44
  80. data/spec/expressir/express_exp/schema_head_formatter_spec.rb +36 -0
  81. data/spec/expressir/model/{scope_spec.rb → model_element/find_spec.rb} +7 -2
  82. data/spec/expressir/model/{model_element_spec.rb → model_element/hash_spec.rb} +7 -18
  83. metadata +32 -13
  84. data/lib/expressir/model/scope.rb +0 -71
  85. 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::Scope do
4
+ RSpec.describe Expressir::Model::ModelElement do
5
5
  describe ".find" do
6
6
  it "finds an object" do
7
- repo = Expressir::ExpressExp::Parser.from_exp(sample_file)
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.from_exp(sample_file)
36
+ repo = Expressir::ExpressExp::Parser.from_file(sample_file)
37
37
 
38
- result = repo.to_hash
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.11
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-09 00:00:00.000000000 Z
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/ap233_spec.rb
677
- - spec/expressir/express_exp/format_remark_spec.rb
678
- - spec/expressir/express_exp/format_syntax_spec.rb
679
- - spec/expressir/express_exp/head_source_spec.rb
680
- - spec/expressir/express_exp/parse_multiple_spec.rb
681
- - spec/expressir/express_exp/parse_remark_spec.rb
682
- - spec/expressir/express_exp/parse_syntax_spec.rb
683
- - spec/expressir/express_exp/source_spec.rb
684
- - spec/expressir/model/model_element_spec.rb
685
- - spec/expressir/model/scope_spec.rb
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