formula_dsl 0.2.0 → 0.3.0

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.
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: