expressir 1.3.0.pre.1-x86_64-linux-gnu

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 (146) hide show
  1. checksums.yaml +7 -0
  2. data/.cross_rubies +20 -0
  3. data/.github/workflows/rake.yml +312 -0
  4. data/.github/workflows/release.yml +124 -0
  5. data/.gitignore +23 -0
  6. data/.gitmodules +6 -0
  7. data/.hound.yml +3 -0
  8. data/.rspec +2 -0
  9. data/.rubocop.yml +18 -0
  10. data/.yardopts +11 -0
  11. data/Gemfile +4 -0
  12. data/README.adoc +155 -0
  13. data/Rakefile +17 -0
  14. data/bin/console +11 -0
  15. data/bin/rspec +29 -0
  16. data/bin/setup +8 -0
  17. data/docs/development.md +90 -0
  18. data/exe/expressir +22 -0
  19. data/exe/format +18 -0
  20. data/exe/format-test +81 -0
  21. data/exe/generate-parser +51 -0
  22. data/expressir.gemspec +48 -0
  23. data/lib/expressir/cli/ui.rb +36 -0
  24. data/lib/expressir/cli.rb +21 -0
  25. data/lib/expressir/config.rb +23 -0
  26. data/lib/expressir/express/2.7/express_parser.so +0 -0
  27. data/lib/expressir/express/3.0/express_parser.so +0 -0
  28. data/lib/expressir/express/3.1/express_parser.so +0 -0
  29. data/lib/expressir/express/3.2/express_parser.so +0 -0
  30. data/lib/expressir/express/cache.rb +51 -0
  31. data/lib/expressir/express/extension.rb +30 -0
  32. data/lib/expressir/express/formatter.rb +1608 -0
  33. data/lib/expressir/express/hyperlink_formatter.rb +36 -0
  34. data/lib/expressir/express/model_visitor.rb +24 -0
  35. data/lib/expressir/express/parser.rb +79 -0
  36. data/lib/expressir/express/resolve_references_model_visitor.rb +31 -0
  37. data/lib/expressir/express/schema_head_formatter.rb +23 -0
  38. data/lib/expressir/express/visitor.rb +2581 -0
  39. data/lib/expressir/model/cache.rb +17 -0
  40. data/lib/expressir/model/data_type.rb +9 -0
  41. data/lib/expressir/model/data_types/aggregate.rb +31 -0
  42. data/lib/expressir/model/data_types/array.rb +31 -0
  43. data/lib/expressir/model/data_types/bag.rb +25 -0
  44. data/lib/expressir/model/data_types/binary.rb +22 -0
  45. data/lib/expressir/model/data_types/boolean.rb +10 -0
  46. data/lib/expressir/model/data_types/enumeration.rb +25 -0
  47. data/lib/expressir/model/data_types/enumeration_item.rb +26 -0
  48. data/lib/expressir/model/data_types/generic.rb +26 -0
  49. data/lib/expressir/model/data_types/generic_entity.rb +26 -0
  50. data/lib/expressir/model/data_types/integer.rb +10 -0
  51. data/lib/expressir/model/data_types/list.rb +28 -0
  52. data/lib/expressir/model/data_types/logical.rb +10 -0
  53. data/lib/expressir/model/data_types/number.rb +10 -0
  54. data/lib/expressir/model/data_types/real.rb +19 -0
  55. data/lib/expressir/model/data_types/select.rb +28 -0
  56. data/lib/expressir/model/data_types/set.rb +25 -0
  57. data/lib/expressir/model/data_types/string.rb +22 -0
  58. data/lib/expressir/model/declaration.rb +9 -0
  59. data/lib/expressir/model/declarations/attribute.rb +47 -0
  60. data/lib/expressir/model/declarations/constant.rb +34 -0
  61. data/lib/expressir/model/declarations/entity.rb +53 -0
  62. data/lib/expressir/model/declarations/function.rb +67 -0
  63. data/lib/expressir/model/declarations/interface.rb +28 -0
  64. data/lib/expressir/model/declarations/interface_item.rb +23 -0
  65. data/lib/expressir/model/declarations/interfaced_item.rb +37 -0
  66. data/lib/expressir/model/declarations/parameter.rb +34 -0
  67. data/lib/expressir/model/declarations/procedure.rb +64 -0
  68. data/lib/expressir/model/declarations/remark_item.rb +21 -0
  69. data/lib/expressir/model/declarations/rule.rb +71 -0
  70. data/lib/expressir/model/declarations/schema.rb +117 -0
  71. data/lib/expressir/model/declarations/schema_version.rb +22 -0
  72. data/lib/expressir/model/declarations/schema_version_item.rb +22 -0
  73. data/lib/expressir/model/declarations/subtype_constraint.rb +40 -0
  74. data/lib/expressir/model/declarations/type.rb +45 -0
  75. data/lib/expressir/model/declarations/unique_rule.rb +31 -0
  76. data/lib/expressir/model/declarations/variable.rb +34 -0
  77. data/lib/expressir/model/declarations/where_rule.rb +31 -0
  78. data/lib/expressir/model/expression.rb +9 -0
  79. data/lib/expressir/model/expressions/aggregate_initializer.rb +19 -0
  80. data/lib/expressir/model/expressions/aggregate_initializer_item.rb +22 -0
  81. data/lib/expressir/model/expressions/binary_expression.rb +53 -0
  82. data/lib/expressir/model/expressions/entity_constructor.rb +22 -0
  83. data/lib/expressir/model/expressions/function_call.rb +22 -0
  84. data/lib/expressir/model/expressions/interval.rb +34 -0
  85. data/lib/expressir/model/expressions/query_expression.rb +35 -0
  86. data/lib/expressir/model/expressions/unary_expression.rb +27 -0
  87. data/lib/expressir/model/identifier.rb +34 -0
  88. data/lib/expressir/model/literal.rb +9 -0
  89. data/lib/expressir/model/literals/binary.rb +19 -0
  90. data/lib/expressir/model/literals/integer.rb +19 -0
  91. data/lib/expressir/model/literals/logical.rb +23 -0
  92. data/lib/expressir/model/literals/real.rb +19 -0
  93. data/lib/expressir/model/literals/string.rb +22 -0
  94. data/lib/expressir/model/model_element.rb +208 -0
  95. data/lib/expressir/model/reference.rb +9 -0
  96. data/lib/expressir/model/references/attribute_reference.rb +22 -0
  97. data/lib/expressir/model/references/group_reference.rb +22 -0
  98. data/lib/expressir/model/references/index_reference.rb +27 -0
  99. data/lib/expressir/model/references/simple_reference.rb +24 -0
  100. data/lib/expressir/model/repository.rb +23 -0
  101. data/lib/expressir/model/statement.rb +9 -0
  102. data/lib/expressir/model/statements/alias.rb +35 -0
  103. data/lib/expressir/model/statements/assignment.rb +22 -0
  104. data/lib/expressir/model/statements/case.rb +25 -0
  105. data/lib/expressir/model/statements/case_action.rb +22 -0
  106. data/lib/expressir/model/statements/compound.rb +19 -0
  107. data/lib/expressir/model/statements/escape.rb +10 -0
  108. data/lib/expressir/model/statements/if.rb +25 -0
  109. data/lib/expressir/model/statements/null.rb +10 -0
  110. data/lib/expressir/model/statements/procedure_call.rb +22 -0
  111. data/lib/expressir/model/statements/repeat.rb +47 -0
  112. data/lib/expressir/model/statements/return.rb +19 -0
  113. data/lib/expressir/model/statements/skip.rb +10 -0
  114. data/lib/expressir/model/supertype_expression.rb +9 -0
  115. data/lib/expressir/model/supertype_expressions/binary_supertype_expression.rb +29 -0
  116. data/lib/expressir/model/supertype_expressions/oneof_supertype_expression.rb +19 -0
  117. data/lib/expressir/model.rb +79 -0
  118. data/lib/expressir/version.rb +3 -0
  119. data/lib/expressir.rb +24 -0
  120. data/rakelib/antlr4-native.rake +161 -0
  121. data/rakelib/cross-ruby.rake +383 -0
  122. data/spec/acceptance/version_spec.rb +27 -0
  123. data/spec/expressir/express/cache_spec.rb +89 -0
  124. data/spec/expressir/express/formatter_spec.rb +173 -0
  125. data/spec/expressir/express/parser_spec.rb +141 -0
  126. data/spec/expressir/model/model_element_spec.rb +318 -0
  127. data/spec/spec_helper.rb +24 -0
  128. data/spec/support/console_helper.rb +29 -0
  129. data/spec/syntax/multiple.exp +23 -0
  130. data/spec/syntax/multiple.yaml +198 -0
  131. data/spec/syntax/multiple_formatted.exp +71 -0
  132. data/spec/syntax/multiple_hyperlink_formatted.exp +71 -0
  133. data/spec/syntax/multiple_schema_head_hyperlink_formatted.exp +13 -0
  134. data/spec/syntax/remark.exp +193 -0
  135. data/spec/syntax/remark.yaml +471 -0
  136. data/spec/syntax/remark_formatted.exp +228 -0
  137. data/spec/syntax/single.exp +4 -0
  138. data/spec/syntax/single.yaml +18 -0
  139. data/spec/syntax/single_formatted.exp +10 -0
  140. data/spec/syntax/single_formatted.yaml +36 -0
  141. data/spec/syntax/syntax.exp +333 -0
  142. data/spec/syntax/syntax.yaml +3509 -0
  143. data/spec/syntax/syntax_formatted.exp +902 -0
  144. data/spec/syntax/syntax_hyperlink_formatted.exp +902 -0
  145. data/spec/syntax/syntax_schema_head_formatted.exp +18 -0
  146. metadata +391 -0
@@ -0,0 +1,23 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 11 Interface specification
6
+ class InterfaceItem < ModelElement
7
+ model_attr_accessor :ref, 'Reference'
8
+ model_attr_accessor :id, 'String'
9
+
10
+ # @param [Hash] options
11
+ # @option (see Identifier#initialize_identifier)
12
+ # @option options [Reference] :ref
13
+ # @option options [String] :id
14
+ def initialize(options = {})
15
+ @ref = options[:ref]
16
+ @id = options[:id]
17
+
18
+ super
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 11 Interface specification
6
+ class InterfacedItem < ModelElement
7
+ model_attr_accessor :id, 'String'
8
+ model_attr_accessor :remarks, 'Array<String>'
9
+ model_attr_accessor :remark_items, 'Array<RemarkItem>'
10
+
11
+ model_attr_accessor :base_item, 'ModelElement'
12
+
13
+ # @param [Hash] options
14
+ # @option options [String] :id
15
+ # @option options [Array<String>] :remarks
16
+ # @option options [Array<RemarkItem>] :remark_items
17
+ # @option options [ModelElement] :base_item
18
+ def initialize(options = {})
19
+ @id = options[:id]
20
+ @remarks = options[:remarks] || []
21
+ @remark_items = options[:remark_items] || []
22
+
23
+ @base_item = options[:base_item]
24
+
25
+ super
26
+ end
27
+
28
+ # @return [Array<Declaration>]
29
+ def children
30
+ [
31
+ *remark_items
32
+ ]
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,34 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.5.3 Parameters
6
+ class Parameter < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :var, 'Boolean'
10
+ model_attr_accessor :type, 'DataType'
11
+
12
+ # @param [Hash] options
13
+ # @option (see Identifier#initialize_identifier)
14
+ # @option options [Boolean] :var
15
+ # @option options [DataType] :type
16
+ def initialize(options = {})
17
+ initialize_identifier(options)
18
+
19
+ @var = options[:var]
20
+ @type = options[:type]
21
+
22
+ super
23
+ end
24
+
25
+ # @return [Array<Declaration>]
26
+ def children
27
+ [
28
+ *remark_items
29
+ ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,64 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.5.2 Procedure
6
+ class Procedure < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :parameters, 'Array<Parameter>'
10
+ model_attr_accessor :types, 'Array<Type>'
11
+ model_attr_accessor :entities, 'Array<Entity>'
12
+ model_attr_accessor :subtype_constraints, 'Array<SubtypeConstraint>'
13
+ model_attr_accessor :functions, 'Array<Function>'
14
+ model_attr_accessor :procedures, 'Array<Procedure>'
15
+ model_attr_accessor :constants, 'Array<Constant>'
16
+ model_attr_accessor :variables, 'Array<Variable>'
17
+ model_attr_accessor :statements, 'Array<Statement>'
18
+
19
+ # @param [Hash] options
20
+ # @option (see Identifier#initialize_identifier)
21
+ # @option options [Array<Parameter>] :parameters
22
+ # @option options [Array<Type>] :types
23
+ # @option options [Array<Entity>] :entities
24
+ # @option options [Array<SubtypeConstraint>] :subtype_constraints
25
+ # @option options [Array<Function>] :functions
26
+ # @option options [Array<Procedure>] :procedures
27
+ # @option options [Array<Constant>] :constants
28
+ # @option options [Array<Variable>] :variables
29
+ # @option options [Array<Statement>] :statements
30
+ def initialize(options = {})
31
+ initialize_identifier(options)
32
+
33
+ @parameters = options[:parameters] || []
34
+ @types = options[:types] || []
35
+ @entities = options[:entities] || []
36
+ @subtype_constraints = options[:subtype_constraints] || []
37
+ @functions = options[:functions] || []
38
+ @procedures = options[:procedures] || []
39
+ @constants = options[:constants] || []
40
+ @variables = options[:variables] || []
41
+ @statements = options[:statements] || []
42
+
43
+ super
44
+ end
45
+
46
+ # @return [Array<Declaration>]
47
+ def children
48
+ [
49
+ *parameters,
50
+ *types,
51
+ *types.flat_map{|x| x.enumeration_items},
52
+ *entities,
53
+ *subtype_constraints,
54
+ *functions,
55
+ *procedures,
56
+ *constants,
57
+ *variables,
58
+ *remark_items
59
+ ]
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,21 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Implicit item with remarks
5
+ class RemarkItem < Declaration
6
+ model_attr_accessor :id, 'String'
7
+ model_attr_accessor :remarks, 'Array<String>'
8
+
9
+ # @param [Hash] options
10
+ # @option options [String] :id
11
+ # @option options [Array<String>] :remarks
12
+ def initialize(options = {})
13
+ @id = options[:id]
14
+ @remarks = options[:remarks] || []
15
+
16
+ super
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,71 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.6 Rule
6
+ class Rule < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :applies_to, 'Array<Reference>'
10
+ model_attr_accessor :types, 'Array<Type>'
11
+ model_attr_accessor :entities, 'Array<Entity>'
12
+ model_attr_accessor :subtype_constraints, 'Array<SubtypeConstraint>'
13
+ model_attr_accessor :functions, 'Array<Function>'
14
+ model_attr_accessor :procedures, 'Array<Procedure>'
15
+ model_attr_accessor :constants, 'Array<Constant>'
16
+ model_attr_accessor :variables, 'Array<Variable>'
17
+ model_attr_accessor :statements, 'Array<Statement>'
18
+ model_attr_accessor :where_rules, 'Array<WhereRule>'
19
+ model_attr_accessor :informal_propositions, 'Array<RemarkItem>'
20
+
21
+ # @param [Hash] options
22
+ # @option (see Identifier#initialize_identifier)
23
+ # @option options [Array<Reference>] :applies_to
24
+ # @option options [Array<Type>] :types
25
+ # @option options [Array<Entity>] :entities
26
+ # @option options [Array<SubtypeConstraint>] :subtype_constraints
27
+ # @option options [Array<Function>] :functions
28
+ # @option options [Array<Procedure>] :procedures
29
+ # @option options [Array<Constant>] :constants
30
+ # @option options [Array<Variable>] :variables
31
+ # @option options [Array<Statement>] :statements
32
+ # @option options [Array<WhereRule>] :where_rules
33
+ # @option options [Array<RemarkItem>] :informal_propositions
34
+ def initialize(options = {})
35
+ initialize_identifier(options)
36
+
37
+ @applies_to = options[:applies_to] || []
38
+ @types = options[:types] || []
39
+ @entities = options[:entities] || []
40
+ @subtype_constraints = options[:subtype_constraints] || []
41
+ @functions = options[:functions] || []
42
+ @procedures = options[:procedures] || []
43
+ @constants = options[:constants] || []
44
+ @variables = options[:variables] || []
45
+ @statements = options[:statements] || []
46
+ @where_rules = options[:where_rules] || []
47
+ @informal_propositions = options[:informal_propositions] || []
48
+
49
+ super
50
+ end
51
+
52
+ # @return [Array<Declaration>]
53
+ def children
54
+ [
55
+ *types,
56
+ *types.flat_map{|x| x.enumeration_items},
57
+ *entities,
58
+ *subtype_constraints,
59
+ *functions,
60
+ *procedures,
61
+ *constants,
62
+ *variables,
63
+ *where_rules,
64
+ *informal_propositions,
65
+ *remark_items
66
+ ]
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,117 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.3 Schema
6
+ class Schema < Declaration
7
+ model_attr_accessor :file, 'String'
8
+
9
+ include Identifier
10
+
11
+ model_attr_accessor :version, 'SchemaVersion'
12
+ model_attr_accessor :interfaces, 'Array<Interface>'
13
+ model_attr_accessor :constants, 'Array<Constant>'
14
+ model_attr_accessor :types, 'Array<Type>'
15
+ model_attr_accessor :entities, 'Array<Entity>'
16
+ model_attr_accessor :subtype_constraints, 'Array<SubtypeConstraint>'
17
+ model_attr_accessor :functions, 'Array<Function>'
18
+ model_attr_accessor :rules, 'Array<Rule>'
19
+ model_attr_accessor :procedures, 'Array<Procedure>'
20
+
21
+ # @param [Hash] options
22
+ # @option options [String] :file
23
+ # @option (see Identifier#initialize_identifier)
24
+ # @option options [SchemaVersion] :version
25
+ # @option options [Array<Interface>] :interfaces
26
+ # @option options [Array<Constant>] :constants
27
+ # @option options [Array<Type>] :types
28
+ # @option options [Array<Entity>] :entities
29
+ # @option options [Array<SubtypeConstraint>] :subtype_constraints
30
+ # @option options [Array<Function>] :functions
31
+ # @option options [Array<Rule>] :rules
32
+ # @option options [Array<Procedure>] :procedures
33
+ def initialize(options = {})
34
+ @file = options[:file]
35
+
36
+ initialize_identifier(options)
37
+
38
+ @version = options[:version]
39
+ @interfaces = options[:interfaces] || []
40
+ @constants = options[:constants] || []
41
+ @types = options[:types] || []
42
+ @entities = options[:entities] || []
43
+ @subtype_constraints = options[:subtype_constraints] || []
44
+ @functions = options[:functions] || []
45
+ @rules = options[:rules] || []
46
+ @procedures = options[:procedures] || []
47
+
48
+ super
49
+ end
50
+
51
+ # @return [Array<Declaration>]
52
+ def safe_children
53
+ [
54
+ *constants,
55
+ *types,
56
+ *types.flat_map{|x| x.enumeration_items},
57
+ *entities,
58
+ *subtype_constraints,
59
+ *functions,
60
+ *rules,
61
+ *procedures,
62
+ *remark_items
63
+ ]
64
+ end
65
+
66
+ # @return [Array<Declaration>]
67
+ def children
68
+ [
69
+ *interfaced_items,
70
+ *safe_children
71
+ ]
72
+ end
73
+
74
+ private
75
+
76
+ # @param [String] id
77
+ # @param [ModelElement] base_item
78
+ # @return [InterfacedItem]
79
+ def create_interfaced_item(id, base_item)
80
+ interfaced_item = InterfacedItem.new(
81
+ id: id
82
+ )
83
+ interfaced_item.base_item = base_item # skip overriding parent
84
+ interfaced_item.parent = self
85
+ interfaced_item
86
+ end
87
+
88
+ # @return [Array<InterfacedItem>]
89
+ def interfaced_items
90
+ return [] unless parent
91
+
92
+ interfaces.flat_map do |interface|
93
+ schema = parent.children_by_id[interface.schema.id.downcase]
94
+ if schema
95
+ schema_safe_children = schema.safe_children
96
+ schema_safe_children_by_id = schema_safe_children.select{|x| x.id}.map{|x| [x.id.downcase, x]}.to_h
97
+ if interface.items.length > 0
98
+ interface.items.map do |interface_item|
99
+ base_item = schema_safe_children_by_id[interface_item.ref.id.downcase]
100
+ if base_item
101
+ id = interface_item.id || base_item.id
102
+ create_interfaced_item(id, base_item)
103
+ end
104
+ end
105
+ else
106
+ schema_safe_children.map do |base_item|
107
+ id = base_item.id
108
+ create_interfaced_item(id, base_item)
109
+ end
110
+ end
111
+ end
112
+ end.select{|x| x}
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,22 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.3 Schema
6
+ class SchemaVersion < ModelElement
7
+ model_attr_accessor :value, 'String'
8
+ model_attr_accessor :items, 'Array<SchemaVersionItem>'
9
+
10
+ # @param [Hash] options
11
+ # @option options [String] :value
12
+ # @option options [Array<SchemaVersionItem>] :items
13
+ def initialize(options = {})
14
+ @value = options[:value]
15
+ @items = options[:items] || []
16
+
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.3 Schema
6
+ class SchemaVersionItem < ModelElement
7
+ model_attr_accessor :name, 'String'
8
+ model_attr_accessor :value, 'String'
9
+
10
+ # @param [Hash] options
11
+ # @option options [String] :name
12
+ # @option options [String] :value
13
+ def initialize(options = {})
14
+ @name = options[:name]
15
+ @value = options[:value]
16
+
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,40 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.7 Subtype constraints
6
+ class SubtypeConstraint < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :applies_to, 'Reference'
10
+ model_attr_accessor :abstract, 'Boolean'
11
+ model_attr_accessor :total_over, 'Array<Reference>'
12
+ model_attr_accessor :supertype_expression, 'SupertypeExpression'
13
+
14
+ # @param [Hash] options
15
+ # @option (see Identifier#initialize_identifier)
16
+ # @option options [Reference] :applies_to
17
+ # @option options [Boolean] :abstract
18
+ # @option options [Array<Reference>] :total_over
19
+ # @option options [SupertypeExpression] :supertype_expression
20
+ def initialize(options = {})
21
+ initialize_identifier(options)
22
+
23
+ @applies_to = options[:applies_to]
24
+ @abstract = options[:abstract]
25
+ @total_over = options[:total_over] || []
26
+ @supertype_expression = options[:supertype_expression]
27
+
28
+ super
29
+ end
30
+
31
+ # @return [Array<Declaration>]
32
+ def children
33
+ [
34
+ *remark_items
35
+ ]
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,45 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.1 Type declaration
6
+ class Type < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :underlying_type, 'DataType'
10
+ model_attr_accessor :where_rules, 'Array<WhereRule>'
11
+ model_attr_accessor :informal_propositions, 'Array<RemarkItem>'
12
+
13
+ # @param [Hash] options
14
+ # @option (see Identifier#initialize_identifier)
15
+ # @option options [DataType] :underlying_type
16
+ # @option options [Array<WhereRule>] :where_rules
17
+ # @option options [Array<RemarkItem>] :informal_propositions
18
+ def initialize(options = {})
19
+ initialize_identifier(options)
20
+
21
+ @underlying_type = options[:underlying_type]
22
+ @where_rules = options[:where_rules] || []
23
+ @informal_propositions = options[:informal_propositions] || []
24
+
25
+ super
26
+ end
27
+
28
+ # @return [Array<DataTypes::EnumerationItem>]
29
+ def enumeration_items
30
+ underlying_type.is_a?(DataTypes::Enumeration) ? underlying_type.items : []
31
+ end
32
+
33
+ # @return [Array<Declaration>]
34
+ def children
35
+ [
36
+ *enumeration_items,
37
+ *where_rules,
38
+ *informal_propositions,
39
+ *remark_items
40
+ ]
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,31 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.2.2.1 Uniqueness rule
6
+ class UniqueRule < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :attributes, 'Reference'
10
+
11
+ # @param [Hash] options
12
+ # @option (see Identifier#initialize_identifier)
13
+ # @option options [Reference] :attributes
14
+ def initialize(options = {})
15
+ initialize_identifier(options)
16
+
17
+ @attributes = options[:attributes] || []
18
+
19
+ super
20
+ end
21
+
22
+ # @return [Array<Declaration>]
23
+ def children
24
+ [
25
+ *remark_items
26
+ ]
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,34 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.5.4 Local variables
6
+ class Variable < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :type, 'DataType'
10
+ model_attr_accessor :expression, 'Expression'
11
+
12
+ # @param [Hash] options
13
+ # @option (see Identifier#initialize_identifier)
14
+ # @option options [DataType] :type
15
+ # @option options [Expression] :expression
16
+ def initialize(options = {})
17
+ initialize_identifier(options)
18
+
19
+ @type = options[:type]
20
+ @expression = options[:expression]
21
+
22
+ super
23
+ end
24
+
25
+ # @return [Array<Declaration>]
26
+ def children
27
+ [
28
+ *remark_items
29
+ ]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ module Expressir
2
+ module Model
3
+ module Declarations
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 9.2.2.2 Domain rules (WHERE clause)
6
+ class WhereRule < Declaration
7
+ include Identifier
8
+
9
+ model_attr_accessor :expression, 'Expression'
10
+
11
+ # @param [Hash] options
12
+ # @option (see Identifier#initialize_identifier)
13
+ # @option options [Expression] :expression
14
+ def initialize(options = {})
15
+ initialize_identifier(options)
16
+
17
+ @expression = options[:expression]
18
+
19
+ super
20
+ end
21
+
22
+ # @return [Array<Declaration>]
23
+ def children
24
+ [
25
+ *remark_items
26
+ ]
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ module Expressir
2
+ module Model
3
+ # Specified in ISO 10303-11:2004
4
+ # - section 12 Expression
5
+ # @abstract
6
+ class Expression < ModelElement
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 12.9 Aggregate initializer
6
+ class AggregateInitializer < Expression
7
+ model_attr_accessor :items, 'Array<AggregateInitializerItem>'
8
+
9
+ # @param [Hash] options
10
+ # @option options [Array<AggregateInitializerItem>] :items
11
+ def initialize(options = {})
12
+ @items = options[:items] || []
13
+
14
+ super
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ # Specified in ISO 10303-11:2004
5
+ # - section 12.9 Aggregate initializer
6
+ class AggregateInitializerItem < Expression
7
+ model_attr_accessor :expression, 'Expression'
8
+ model_attr_accessor :repetition, 'Expression'
9
+
10
+ # @param [Hash] options
11
+ # @option options [Expression] :expression
12
+ # @option options [Expression] :repetition
13
+ def initialize(options = {})
14
+ @expression = options[:expression]
15
+ @repetition = options[:repetition]
16
+
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end