expressir 0.2.2 → 0.2.3

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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/lib/expressir/express_exp/formatter.rb +1444 -0
  4. data/lib/expressir/express_exp/visitor.rb +288 -280
  5. data/lib/expressir/model.rb +13 -42
  6. data/lib/expressir/model/{derived.rb → attribute.rb} +13 -4
  7. data/lib/expressir/model/constant.rb +2 -1
  8. data/lib/expressir/model/entity.rb +22 -17
  9. data/lib/expressir/model/enumeration_item.rb +2 -1
  10. data/lib/expressir/model/expressions/aggregate_initializer.rb +9 -9
  11. data/lib/expressir/model/expressions/aggregate_item.rb +15 -0
  12. data/lib/expressir/model/expressions/{attribute_qualifier.rb → attribute_reference.rb} +3 -1
  13. data/lib/expressir/model/expressions/binary_expression.rb +40 -0
  14. data/lib/expressir/model/expressions/{function_call.rb → call.rb} +3 -3
  15. data/lib/expressir/model/expressions/entity_constructor.rb +11 -11
  16. data/lib/expressir/model/expressions/{group_qualifier.rb → group_reference.rb} +3 -1
  17. data/lib/expressir/model/expressions/{index_qualifier.rb → index_reference.rb} +3 -1
  18. data/lib/expressir/model/expressions/interval.rb +17 -17
  19. data/lib/expressir/model/expressions/query_expression.rb +26 -0
  20. data/lib/expressir/model/expressions/simple_reference.rb +13 -0
  21. data/lib/expressir/model/expressions/{expression.rb → unary_expression.rb} +7 -3
  22. data/lib/expressir/model/function.rb +14 -6
  23. data/lib/expressir/model/{reference.rb → interface.rb} +6 -1
  24. data/lib/expressir/model/literals/logical.rb +4 -0
  25. data/lib/expressir/model/parameter.rb +4 -3
  26. data/lib/expressir/model/procedure.rb +14 -6
  27. data/lib/expressir/model/repository.rb +1 -1
  28. data/lib/expressir/model/rule.rb +16 -8
  29. data/lib/expressir/model/schema.rb +22 -6
  30. data/lib/expressir/model/statements/alias.rb +3 -2
  31. data/lib/expressir/model/statements/{procedure_call.rb → call.rb} +3 -3
  32. data/lib/expressir/model/statements/case.rb +2 -2
  33. data/lib/expressir/model/statements/case_action.rb +2 -2
  34. data/lib/expressir/model/statements/repeat.rb +3 -2
  35. data/lib/expressir/model/subtype_constraint.rb +6 -5
  36. data/lib/expressir/model/type.rb +3 -2
  37. data/lib/expressir/model/types/aggregate.rb +2 -1
  38. data/lib/expressir/model/types/generic.rb +2 -1
  39. data/lib/expressir/model/types/generic_entity.rb +2 -1
  40. data/lib/expressir/model/unique.rb +2 -1
  41. data/lib/expressir/model/{local.rb → variable.rb} +3 -2
  42. data/lib/expressir/model/where.rb +2 -1
  43. data/lib/expressir/version.rb +1 -1
  44. data/original/examples/syntax/remark.exp +126 -108
  45. data/original/examples/syntax/remark_formatted.exp +172 -0
  46. data/original/examples/syntax/syntax.exp +287 -277
  47. data/original/examples/syntax/syntax_formatted.exp +1176 -0
  48. data/spec/expressir/express_exp/format_remark_spec.rb +28 -0
  49. data/spec/expressir/express_exp/format_syntax_spec.rb +28 -0
  50. data/spec/expressir/express_exp/{remark_spec.rb → parse_remark_spec.rb} +80 -36
  51. data/spec/expressir/express_exp/parse_syntax_spec.rb +2998 -0
  52. metadata +22 -46
  53. data/lib/expressir/model/explicit.rb +0 -19
  54. data/lib/expressir/model/expressions/aggregate_element.rb +0 -15
  55. data/lib/expressir/model/expressions/qualified_ref.rb +0 -15
  56. data/lib/expressir/model/expressions/query.rb +0 -25
  57. data/lib/expressir/model/inverse.rb +0 -19
  58. data/lib/expressir/model/operators/addition.rb +0 -8
  59. data/lib/expressir/model/operators/and.rb +0 -8
  60. data/lib/expressir/model/operators/andor.rb +0 -8
  61. data/lib/expressir/model/operators/combine.rb +0 -8
  62. data/lib/expressir/model/operators/equal.rb +0 -8
  63. data/lib/expressir/model/operators/exponentiation.rb +0 -8
  64. data/lib/expressir/model/operators/greater_than.rb +0 -8
  65. data/lib/expressir/model/operators/greater_than_or_equal.rb +0 -8
  66. data/lib/expressir/model/operators/in.rb +0 -8
  67. data/lib/expressir/model/operators/instance_equal.rb +0 -8
  68. data/lib/expressir/model/operators/instance_not_equal.rb +0 -8
  69. data/lib/expressir/model/operators/integer_division.rb +0 -8
  70. data/lib/expressir/model/operators/less_than.rb +0 -8
  71. data/lib/expressir/model/operators/less_than_or_equal.rb +0 -8
  72. data/lib/expressir/model/operators/like.rb +0 -8
  73. data/lib/expressir/model/operators/modulo.rb +0 -8
  74. data/lib/expressir/model/operators/multiplication.rb +0 -8
  75. data/lib/expressir/model/operators/not.rb +0 -8
  76. data/lib/expressir/model/operators/not_equal.rb +0 -8
  77. data/lib/expressir/model/operators/oneof.rb +0 -8
  78. data/lib/expressir/model/operators/or.rb +0 -8
  79. data/lib/expressir/model/operators/real_division.rb +0 -8
  80. data/lib/expressir/model/operators/subtraction.rb +0 -8
  81. data/lib/expressir/model/operators/unary_minus.rb +0 -8
  82. data/lib/expressir/model/operators/unary_plus.rb +0 -8
  83. data/lib/expressir/model/operators/xor.rb +0 -8
  84. data/lib/expressir/model/ref.rb +0 -11
  85. data/lib/expressir/model/use.rb +0 -13
  86. data/spec/expressir/express_exp/syntax_spec.rb +0 -2992
@@ -1,15 +1,11 @@
1
+ require 'expressir/model/attribute'
1
2
  require 'expressir/model/constant'
2
- require 'expressir/model/derived'
3
3
  require 'expressir/model/entity'
4
4
  require 'expressir/model/enumeration_item'
5
- require 'expressir/model/explicit'
6
5
  require 'expressir/model/function'
7
- require 'expressir/model/inverse'
8
- require 'expressir/model/local'
6
+ require 'expressir/model/interface'
9
7
  require 'expressir/model/parameter'
10
8
  require 'expressir/model/procedure'
11
- require 'expressir/model/ref'
12
- require 'expressir/model/reference'
13
9
  require 'expressir/model/renamed_ref'
14
10
  require 'expressir/model/repository'
15
11
  require 'expressir/model/rule'
@@ -17,59 +13,34 @@ require 'expressir/model/schema'
17
13
  require 'expressir/model/subtype_constraint'
18
14
  require 'expressir/model/type'
19
15
  require 'expressir/model/unique'
20
- require 'expressir/model/use'
16
+ require 'expressir/model/variable'
21
17
  require 'expressir/model/where'
22
18
  require 'expressir/model/expressions/aggregate_initializer'
23
- require 'expressir/model/expressions/aggregate_element'
24
- require 'expressir/model/expressions/attribute_qualifier'
19
+ require 'expressir/model/expressions/aggregate_item'
20
+ require 'expressir/model/expressions/binary_expression'
21
+ require 'expressir/model/expressions/call'
22
+ require 'expressir/model/expressions/attribute_reference'
25
23
  require 'expressir/model/expressions/entity_constructor'
26
- require 'expressir/model/expressions/expression'
27
- require 'expressir/model/expressions/function_call'
28
- require 'expressir/model/expressions/group_qualifier'
29
- require 'expressir/model/expressions/index_qualifier'
24
+ require 'expressir/model/expressions/group_reference'
25
+ require 'expressir/model/expressions/index_reference'
30
26
  require 'expressir/model/expressions/interval'
31
- require 'expressir/model/expressions/qualified_ref'
32
- require 'expressir/model/expressions/query'
27
+ require 'expressir/model/expressions/query_expression'
28
+ require 'expressir/model/expressions/simple_reference'
29
+ require 'expressir/model/expressions/unary_expression'
33
30
  require 'expressir/model/literals/binary'
34
31
  require 'expressir/model/literals/integer'
35
32
  require 'expressir/model/literals/logical'
36
33
  require 'expressir/model/literals/real'
37
34
  require 'expressir/model/literals/string'
38
- require 'expressir/model/operators/addition'
39
- require 'expressir/model/operators/and'
40
- require 'expressir/model/operators/andor'
41
- require 'expressir/model/operators/combine'
42
- require 'expressir/model/operators/equal'
43
- require 'expressir/model/operators/exponentiation'
44
- require 'expressir/model/operators/greater_than'
45
- require 'expressir/model/operators/greater_than_or_equal'
46
- require 'expressir/model/operators/in'
47
- require 'expressir/model/operators/instance_equal'
48
- require 'expressir/model/operators/instance_not_equal'
49
- require 'expressir/model/operators/integer_division'
50
- require 'expressir/model/operators/less_than'
51
- require 'expressir/model/operators/less_than_or_equal'
52
- require 'expressir/model/operators/like'
53
- require 'expressir/model/operators/modulo'
54
- require 'expressir/model/operators/multiplication'
55
- require 'expressir/model/operators/not'
56
- require 'expressir/model/operators/not_equal'
57
- require 'expressir/model/operators/oneof'
58
- require 'expressir/model/operators/or'
59
- require 'expressir/model/operators/real_division'
60
- require 'expressir/model/operators/subtraction'
61
- require 'expressir/model/operators/unary_plus'
62
- require 'expressir/model/operators/unary_minus'
63
- require 'expressir/model/operators/xor'
64
35
  require 'expressir/model/statements/alias'
65
36
  require 'expressir/model/statements/assignment'
37
+ require 'expressir/model/statements/call'
66
38
  require 'expressir/model/statements/case'
67
39
  require 'expressir/model/statements/case_action'
68
40
  require 'expressir/model/statements/compound'
69
41
  require 'expressir/model/statements/escape'
70
42
  require 'expressir/model/statements/if'
71
43
  require 'expressir/model/statements/null'
72
- require 'expressir/model/statements/procedure_call'
73
44
  require 'expressir/model/statements/repeat'
74
45
  require 'expressir/model/statements/return'
75
46
  require 'expressir/model/statements/skip'
@@ -1,18 +1,27 @@
1
1
  module Expressir
2
2
  module Model
3
- class Derived
4
- attr_accessor :id
3
+ class Attribute
4
+ EXPLICIT = :EXPLICIT
5
+ DERIVED = :DERIVED
6
+ INVERSE = :INVERSE
7
+
8
+ attr_accessor :kind
5
9
  attr_accessor :supertype_attribute
10
+ attr_accessor :id
11
+ attr_accessor :optional
6
12
  attr_accessor :type
7
13
  attr_accessor :expression
14
+
15
+ attr_accessor :parent
8
16
  attr_accessor :remarks
9
17
 
10
18
  def initialize(options = {})
11
- @id = options[:id]
19
+ @kind = options[:kind]
12
20
  @supertype_attribute = options[:supertype_attribute]
21
+ @id = options[:id]
22
+ @optional = options[:optional]
13
23
  @type = options[:type]
14
24
  @expression = options[:expression]
15
- @remarks = options[:remarks]
16
25
  end
17
26
  end
18
27
  end
@@ -4,13 +4,14 @@ module Expressir
4
4
  attr_accessor :id
5
5
  attr_accessor :type
6
6
  attr_accessor :expression
7
+
8
+ attr_accessor :parent
7
9
  attr_accessor :remarks
8
10
 
9
11
  def initialize(options = {})
10
12
  @id = options[:id]
11
13
  @type = options[:type]
12
14
  @expression = options[:expression]
13
- @remarks = options[:remarks]
14
15
  end
15
16
  end
16
17
  end
@@ -3,35 +3,40 @@ module Expressir
3
3
  class Entity
4
4
  attr_accessor :id
5
5
  attr_accessor :abstract
6
- attr_accessor :abstract_supertype
7
- attr_accessor :supertypes
8
- attr_accessor :subtype_expression
9
- attr_accessor :explicit
10
- attr_accessor :derived
11
- attr_accessor :inverse
6
+ attr_accessor :supertype_expression
7
+ attr_accessor :subtype_of
8
+ attr_accessor :attributes
12
9
  attr_accessor :unique
13
10
  attr_accessor :where
11
+
12
+ attr_accessor :parent
14
13
  attr_accessor :remarks
15
14
 
16
15
  def initialize(options = {})
17
16
  @id = options[:id]
18
17
  @abstract = options[:abstract]
19
- @abstract_supertype = options[:abstract_supertype]
20
- @supertypes = options[:supertypes]
21
- @subtype_expression = options[:subtype_expression]
22
- @explicit = options[:explicit]
23
- @derived = options[:derived]
24
- @inverse = options[:inverse]
18
+ @supertype_expression = options[:supertype_expression]
19
+ @subtype_of = options[:subtype_of]
20
+ @attributes = options[:attributes]
25
21
  @unique = options[:unique]
26
22
  @where = options[:where]
27
- @remarks = options[:remarks]
28
23
  end
29
24
 
30
- def scope_items
25
+ def explicit_attributes
26
+ @attributes.select{|x| x.kind == Expressir::Model::Attribute::EXPLICIT}
27
+ end
28
+
29
+ def derived_attributes
30
+ @attributes.select{|x| x.kind == Expressir::Model::Attribute::DERIVED}
31
+ end
32
+
33
+ def inverse_attributes
34
+ @attributes.select{|x| x.kind == Expressir::Model::Attribute::INVERSE}
35
+ end
36
+
37
+ def children
31
38
  items = []
32
- items.push(*@explicit) if @explicit
33
- items.push(*@derived) if @derived
34
- items.push(*@inverse) if @inverse
39
+ items.push(*@attributes) if @attributes
35
40
  items.push(*@unique) if @unique
36
41
  items.push(*@where) if @where
37
42
  items
@@ -2,11 +2,12 @@ module Expressir
2
2
  module Model
3
3
  class EnumerationItem
4
4
  attr_accessor :id
5
+
6
+ attr_accessor :parent
5
7
  attr_accessor :remarks
6
8
 
7
9
  def initialize(options = {})
8
10
  @id = options[:id]
9
- @remarks = options[:remarks]
10
11
  end
11
12
  end
12
13
  end
@@ -1,13 +1,13 @@
1
1
  module Expressir
2
- module Model
3
- module Expressions
4
- class AggregateInitializer
5
- attr_accessor :items
6
-
7
- def initialize(options = {})
8
- @items = options[:items]
9
- end
2
+ module Model
3
+ module Expressions
4
+ class AggregateInitializer
5
+ attr_accessor :items
6
+
7
+ def initialize(options = {})
8
+ @items = options[:items]
10
9
  end
11
10
  end
12
11
  end
13
- end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ class AggregateItem
5
+ attr_accessor :expression
6
+ attr_accessor :repetition
7
+
8
+ def initialize(options = {})
9
+ @expression = options[:expression]
10
+ @repetition = options[:repetition]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,10 +1,12 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class AttributeQualifier
4
+ class AttributeReference
5
+ attr_accessor :ref
5
6
  attr_accessor :attribute
6
7
 
7
8
  def initialize(options = {})
9
+ @ref = options[:ref]
8
10
  @attribute = options[:attribute]
9
11
  end
10
12
  end
@@ -0,0 +1,40 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ class BinaryExpression
5
+ ADDITION = :ADDITION
6
+ AND = :AND
7
+ ANDOR = :ANDOR
8
+ COMBINE = :COMBINE
9
+ EQUAL = :EQUAL
10
+ EXPONENTIATION = :EXPONENTIATION
11
+ GREATER_THAN = :GREATER_THAN
12
+ GREATER_THAN_OR_EQUAL = :GREATER_THAN_OR_EQUAL
13
+ IN = :IN
14
+ INSTANCE_EQUAL = :INSTANCE_EQUAL
15
+ INSTANCE_NOT_EQUAL = :INSTANCE_NOT_EQUAL
16
+ INTEGER_DIVISION = :INTEGER_DIVISION
17
+ LESS_THAN = :LESS_THAN
18
+ LESS_THAN_OR_EQUAL = :LESS_THAN_OR_EQUAL
19
+ LIKE = :LIKE
20
+ MODULO = :MODULO
21
+ MULTIPLICATION = :MULTIPLICATION
22
+ NOT_EQUAL = :NOT_EQUAL
23
+ OR = :OR
24
+ REAL_DIVISION = :REAL_DIVISION
25
+ SUBTRACTION = :SUBTRACTION
26
+ XOR = :XOR
27
+
28
+ attr_accessor :operator
29
+ attr_accessor :operand1
30
+ attr_accessor :operand2
31
+
32
+ def initialize(options = {})
33
+ @operator = options[:operator]
34
+ @operand1 = options[:operand1]
35
+ @operand2 = options[:operand2]
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,12 +1,12 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class FunctionCall
5
- attr_accessor :function
4
+ class Call
5
+ attr_accessor :ref
6
6
  attr_accessor :parameters
7
7
 
8
8
  def initialize(options = {})
9
- @function = options[:function]
9
+ @ref = options[:ref]
10
10
  @parameters = options[:parameters]
11
11
  end
12
12
  end
@@ -1,15 +1,15 @@
1
1
  module Expressir
2
- module Model
3
- module Expressions
4
- class EntityConstructor
5
- attr_accessor :entity
6
- attr_accessor :parameters
7
-
8
- def initialize(options = {})
9
- @entity = options[:entity]
10
- @parameters = options[:parameters]
11
- end
2
+ module Model
3
+ module Expressions
4
+ class EntityConstructor
5
+ attr_accessor :entity
6
+ attr_accessor :parameters
7
+
8
+ def initialize(options = {})
9
+ @entity = options[:entity]
10
+ @parameters = options[:parameters]
12
11
  end
13
12
  end
14
13
  end
15
- end
14
+ end
15
+ end
@@ -1,10 +1,12 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class GroupQualifier
4
+ class GroupReference
5
+ attr_accessor :ref
5
6
  attr_accessor :entity
6
7
 
7
8
  def initialize(options = {})
9
+ @ref = options[:ref]
8
10
  @entity = options[:entity]
9
11
  end
10
12
  end
@@ -1,11 +1,13 @@
1
1
  module Expressir
2
2
  module Model
3
3
  module Expressions
4
- class IndexQualifier
4
+ class IndexReference
5
+ attr_accessor :ref
5
6
  attr_accessor :index1
6
7
  attr_accessor :index2
7
8
 
8
9
  def initialize(options = {})
10
+ @ref = options[:ref]
9
11
  @index1 = options[:index1]
10
12
  @index2 = options[:index2]
11
13
  end
@@ -1,21 +1,21 @@
1
1
  module Expressir
2
- module Model
3
- module Expressions
4
- class Interval
5
- attr_accessor :low
6
- attr_accessor :operator1
7
- attr_accessor :item
8
- attr_accessor :operator2
9
- attr_accessor :high
10
-
11
- def initialize(options = {})
12
- @low = options[:low]
13
- @operator1 = options[:operator1]
14
- @item = options[:item]
15
- @operator2 = options[:operator2]
16
- @high = options[:high]
17
- end
2
+ module Model
3
+ module Expressions
4
+ class Interval
5
+ attr_accessor :low
6
+ attr_accessor :operator1
7
+ attr_accessor :item
8
+ attr_accessor :operator2
9
+ attr_accessor :high
10
+
11
+ def initialize(options = {})
12
+ @low = options[:low]
13
+ @operator1 = options[:operator1]
14
+ @item = options[:item]
15
+ @operator2 = options[:operator2]
16
+ @high = options[:high]
18
17
  end
19
18
  end
20
19
  end
21
- end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ module Expressir
2
+ module Model
3
+ module Expressions
4
+ class QueryExpression
5
+ attr_accessor :id
6
+ attr_accessor :source
7
+ attr_accessor :expression
8
+
9
+ attr_accessor :parent
10
+ attr_accessor :remarks
11
+
12
+ def initialize(options = {})
13
+ @id = options[:id]
14
+ @source = options[:source]
15
+ @expression = options[:expression]
16
+ end
17
+
18
+ def children
19
+ items = []
20
+ items.push(self)
21
+ items
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end