formula_dsl 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/formula_dsl.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "formula_dsl"
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sergio Junior"]
@@ -33,19 +33,19 @@ module FormulaDSL
33
33
 
34
34
  #binary operations + - / *
35
35
  rule :addition do
36
- ( number.as(:left) >> space? >> add_operator >> space? >> ( number ).as(:right) ).as(:+)
36
+ ( argument.as(:left) >> space? >> add_operator >> space? >> ( argument ).as(:right) ).as(:+)
37
37
  end
38
38
 
39
39
  rule :subtraction do
40
- ( number.as(:left) >> space? >> sub_operator >> space? >> ( number ).as(:right) ).as(:-)
40
+ ( argument.as(:left) >> space? >> sub_operator >> space? >> ( argument ).as(:right) ).as(:-)
41
41
  end
42
42
 
43
43
  rule :multiplication do
44
- ( number.as(:left) >> space? >> mult_operator >> space? >> ( number ).as(:right) ).as(:*)
44
+ ( argument.as(:left) >> space? >> mult_operator >> space? >> ( argument ).as(:right) ).as(:*)
45
45
  end
46
46
 
47
47
  rule :division do
48
- ( number.as(:left) >> space? >> div_operator >> space? >> ( number ).as(:right) ).as(:/)
48
+ ( argument.as(:left) >> space? >> div_operator >> space? >> ( argument ).as(:right) ).as(:/)
49
49
  end
50
50
 
51
51
  rule :function do
@@ -63,19 +63,19 @@ module FormulaDSL
63
63
  # expression with other expression (compose expression)
64
64
  # Ex: expression >> some_op >> number === [ Mont(data) - 1 ]
65
65
  rule :subtraction_expression do
66
- (single_expression.as(:left) >> space? >> sub_operator >> space? >> (single_expression | number).as(:right) ).as(:-)
66
+ (single_expression.as(:left) >> space? >> sub_operator >> space? >> ( expression_list | argument).as(:right) ).as(:-)
67
67
  end
68
68
 
69
69
  rule :addition_expression do
70
- (single_expression.as(:left) >> space? >> add_operator >> space? >> ( expression_list | number ).as(:right) ).as(:+)
70
+ (single_expression.as(:left) >> space? >> add_operator >> space? >> ( expression_list | argument ).as(:right) ).as(:+)
71
71
  end
72
72
 
73
73
  rule :multiplication_expression do
74
- (single_expression.as(:left) >> space? >> mult_operator >> space? >> (single_expression | number).as(:right) ).as(:*)
74
+ (single_expression.as(:left) >> space? >> mult_operator >> space? >> (expression_list | argument).as(:right) ).as(:*)
75
75
  end
76
76
 
77
77
  rule :division_expression do
78
- (single_expression.as(:left) >> space? >> div_operator >> space? >> (single_expression | number).as(:right) ).as(:/)
78
+ (single_expression.as(:left) >> space? >> div_operator >> space? >> (expression_list | argument).as(:right) ).as(:/)
79
79
  end
80
80
 
81
81
  rule :string_concat_expression do
@@ -34,6 +34,34 @@ module FormulaDSL
34
34
  end
35
35
  end
36
36
 
37
+ context "Expressions based on identifier names (aka variables)" do
38
+ it "should recognize expression 'budget + fee' " do
39
+ ast = parser.parse('budget + fee')
40
+ ast.to_s.should == %Q({:+=>{:left=>"budget"@0, :right=>"fee"@9}})
41
+ end
42
+
43
+ it "should recognize expression 'budget - fee' " do
44
+ ast = parser.parse('budget - fee')
45
+ ast.to_s.should == %Q({:-=>{:left=>"budget"@0, :right=>"fee"@9}})
46
+ end
47
+
48
+ it "should recognize expression 'budget * fee' " do
49
+ ast = parser.parse('budget * fee')
50
+ ast.to_s.should == %Q({:*=>{:left=>"budget"@0, :right=>"fee"@9}})
51
+ end
52
+
53
+ it "should recognize expression 'budget + 1 + fee' " do
54
+ ast = parser.parse('budget + 1 + fee')
55
+ ast.to_s.should == %Q({:+=>{:left=>{:+=>{:left=>"budget"@0, :right=>"1"@9}}, :right=>"fee"@13}})
56
+ end
57
+
58
+ it "should recognize expression 'budget * 1 + fee' " do
59
+ ast = parser.parse('budget * 1 + fee')
60
+ ast.to_s.should == %Q({:+=>{:left=>{:*=>{:left=>"budget"@0, :right=>"1"@9}}, :right=>"fee"@13}})
61
+ end
62
+
63
+ end
64
+
37
65
  context "Composed expression's " do
38
66
  it "should recognize a function like 'Month(data)' " do
39
67
  ast = parser.parse('Month(data)')
@@ -81,6 +109,22 @@ module FormulaDSL
81
109
  ast = parser.parse('Month(data) + "/" + Year(data)')
82
110
  ast.to_s.should == %Q({:+=>{:left=>{:function=>{:name=>"Month"@0, :args=>"data"@6}}, :right=>{:+=>{:left=>"\\\"/\\\""@14, :right=>{:function=>{:name=>"Year"@20, :args=>"data"@25}}}}}})
83
111
  end
112
+
113
+ it " should recognize expression with string concat 'Month(data) - 1 + \"/\" + Year(data)'" do
114
+ ast = parser.parse('Month(data) - 1 + "/" + Year(data)')
115
+ ast.to_s.should == %Q({:-=>{:left=>{:function=>{:name=>\"Month\"@0, :args=>\"data\"@6}}, :right=>{:+=>{:left=>\"1\"@14, :right=>{:+=>{:left=>\"\\\"/\\\"\"@18, :right=>{:function=>{:name=>\"Year\"@24, :args=>\"data\"@29}}}}}}}})
116
+ end
117
+
118
+ it " should recognize expression with string concat 'Month(data) - 1 + \"/\" + Year(data)'" do
119
+ ast = parser.parse('Month(data) * 1 + "/" + Year(data)')
120
+ ast.to_s.should == %Q({:*=>{:left=>{:function=>{:name=>\"Month\"@0, :args=>\"data\"@6}}, :right=>{:+=>{:left=>\"1\"@14, :right=>{:+=>{:left=>\"\\\"/\\\"\"@18, :right=>{:function=>{:name=>\"Year\"@24, :args=>\"data\"@29}}}}}}}})
121
+ end
122
+
123
+ it " should recognize expression with string concat 'Month(data) - 1 + \"/\" + Year(data)'" do
124
+ ast = parser.parse('Month(data) / 1 + "/" + Year(data)')
125
+ ast.to_s.should == %Q({:/=>{:left=>{:function=>{:name=>\"Month\"@0, :args=>\"data\"@6}}, :right=>{:+=>{:left=>\"1\"@14, :right=>{:+=>{:left=>\"\\\"/\\\"\"@18, :right=>{:function=>{:name=>\"Year\"@24, :args=>\"data\"@29}}}}}}}})
126
+ end
127
+
84
128
  end
85
129
 
86
130
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formula_dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -125,7 +125,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
125
  version: '0'
126
126
  segments:
127
127
  - 0
128
- hash: 2530953314598159526
128
+ hash: -3658736757412770386
129
129
  required_rubygems_version: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements: