nelson 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nelson/dsl.rb +9 -0
- data/lib/nelson/expression.rb +7 -0
- data/lib/nelson/expression_builder.rb +5 -0
- data/lib/nelson/expression_builders/division_expression_builder.rb +13 -0
- data/lib/nelson/expression_builders/multipication_expression_builder.rb +4 -14
- data/lib/nelson/expressions/division_expression.rb +23 -0
- data/lib/nelson/expressions/multipication_expression.rb +14 -4
- data/lib/nelson/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3fc4c34810d4cde8b5d8fc7228708acd891b3442
|
4
|
+
data.tar.gz: 4fecf9537288391a76e32187c6de46d7e6c9daff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d0510cb77e8a7876983137d7dc3609a3e50a767dc00820b22466dc468429e30d32d298929294af5f3dd72cb51fafd0b6bd8617e4b9d5a7b9a2bf6206092f86fc
|
7
|
+
data.tar.gz: 9c76ba2a597640269f2add63dd51f45a712f59e4b37177e265c97487f874bd03b77e975afae2064f0cee288188df95d583a32ee8a6e89b13ef44072ea083557e
|
data/lib/nelson/dsl.rb
CHANGED
@@ -10,5 +10,14 @@ module Nelson
|
|
10
10
|
def sum_of(*terms)
|
11
11
|
AdditionExpressionBuilder.new(*terms)
|
12
12
|
end
|
13
|
+
|
14
|
+
def quotient_of(*terms)
|
15
|
+
DivisionExpressionBuilder.new(*terms)
|
16
|
+
end
|
17
|
+
|
18
|
+
def difference_of(*terms)
|
19
|
+
SubtractionExpressionBuilder.new(*terms)
|
20
|
+
end
|
21
|
+
alias :difference_between :difference_of
|
13
22
|
end
|
14
23
|
end
|
data/lib/nelson/expression.rb
CHANGED
@@ -26,6 +26,12 @@ module Nelson
|
|
26
26
|
SubtractionExpression.new(rhs_value, lhs_value).call
|
27
27
|
end
|
28
28
|
|
29
|
+
def /(term)
|
30
|
+
rhs_value = self.call
|
31
|
+
lhs_value = try_to_eval term
|
32
|
+
DivisionExpression.new(rhs_value, lhs_value).call
|
33
|
+
end
|
34
|
+
|
29
35
|
private
|
30
36
|
|
31
37
|
def try_to_eval(term)
|
@@ -36,4 +42,5 @@ module Nelson
|
|
36
42
|
autoload :MultipicationExpression, "nelson/expressions/multipication_expression"
|
37
43
|
autoload :AdditionExpression, "nelson/expressions/addition_expression"
|
38
44
|
autoload :SubtractionExpression, "nelson/expressions/subtraction_expression"
|
45
|
+
autoload :DivisionExpression, "nelson/expressions/division_expression"
|
39
46
|
end
|
@@ -24,9 +24,14 @@ module Nelson
|
|
24
24
|
def minus(term)
|
25
25
|
SubtractionExpressionBuilder.new(self, term)
|
26
26
|
end
|
27
|
+
|
28
|
+
def divided_by(term)
|
29
|
+
DivisionExpressionBuilder.new(self, term)
|
30
|
+
end
|
27
31
|
end
|
28
32
|
|
29
33
|
autoload :MultipicationExpressionBuilder, "nelson/expression_builders/multipication_expression_builder"
|
30
34
|
autoload :AdditionExpressionBuilder, "nelson/expression_builders/addition_expression_builder"
|
31
35
|
autoload :SubtractionExpressionBuilder, "nelson/expression_builders/subtraction_expression_builder"
|
36
|
+
autoload :DivisionExpressionBuilder, "nelson/expression_builders/division_expression_builder"
|
32
37
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
|
2
|
+
module Nelson
|
3
|
+
class DivisionExpressionBuilder < ExpressionBuilder
|
4
|
+
def initialize(term1, term2)
|
5
|
+
super(term1, term2)
|
6
|
+
end
|
7
|
+
|
8
|
+
def build
|
9
|
+
terms.map! { |e| e.is_a?(ExpressionBuilder) ? e.build : e }
|
10
|
+
DivisionExpression.new(*terms)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,19 +1,9 @@
|
|
1
1
|
|
2
2
|
module Nelson
|
3
|
-
class
|
4
|
-
def
|
5
|
-
terms.
|
6
|
-
|
7
|
-
|
8
|
-
def to_s
|
9
|
-
terms.sort_by { |t| t.is_a?(Expression) ? 1 : 0 }.reduce("") do |c, t|
|
10
|
-
case t
|
11
|
-
when Expression
|
12
|
-
c << "(#{t})"
|
13
|
-
else
|
14
|
-
c = [c, t].map(&:to_s).reject(&:empty?).join("*")
|
15
|
-
end
|
16
|
-
end
|
3
|
+
class MultipicationExpressionBuilder < ExpressionBuilder
|
4
|
+
def build
|
5
|
+
terms.map! { |e| e.is_a?(ExpressionBuilder) ? e.build : e }
|
6
|
+
MultipicationExpression.new(*terms)
|
17
7
|
end
|
18
8
|
end
|
19
9
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
module Nelson
|
3
|
+
class DivisionExpression < Expression
|
4
|
+
def initialize(term1, term2)
|
5
|
+
super(term1.to_f, term2.to_f)
|
6
|
+
end
|
7
|
+
|
8
|
+
def call
|
9
|
+
terms.reduce(:/)
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
terms.sort_by { |t| t.is_a?(Expression) ? 1 : 0 }.reduce("") do |c, t|
|
14
|
+
case t
|
15
|
+
when Expression
|
16
|
+
c << "(#{t})"
|
17
|
+
else
|
18
|
+
c = [c, t].map(&:to_s).reject(&:empty?).join("/")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,9 +1,19 @@
|
|
1
1
|
|
2
2
|
module Nelson
|
3
|
-
class
|
4
|
-
def
|
5
|
-
terms.
|
6
|
-
|
3
|
+
class MultipicationExpression < Expression
|
4
|
+
def call
|
5
|
+
terms.reduce(:*)
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_s
|
9
|
+
terms.sort_by { |t| t.is_a?(Expression) ? 1 : 0 }.reduce("") do |c, t|
|
10
|
+
case t
|
11
|
+
when Expression
|
12
|
+
c << "(#{t})"
|
13
|
+
else
|
14
|
+
c = [c, t].map(&:to_s).reject(&:empty?).join("*")
|
15
|
+
end
|
16
|
+
end
|
7
17
|
end
|
8
18
|
end
|
9
19
|
end
|
data/lib/nelson/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nelson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Metcalfe
|
@@ -117,9 +117,11 @@ files:
|
|
117
117
|
- lib/nelson/expression.rb
|
118
118
|
- lib/nelson/expression_builder.rb
|
119
119
|
- lib/nelson/expression_builders/addition_expression_builder.rb
|
120
|
+
- lib/nelson/expression_builders/division_expression_builder.rb
|
120
121
|
- lib/nelson/expression_builders/multipication_expression_builder.rb
|
121
122
|
- lib/nelson/expression_builders/subtraction_expression_builder.rb
|
122
123
|
- lib/nelson/expressions/addition_expression.rb
|
124
|
+
- lib/nelson/expressions/division_expression.rb
|
123
125
|
- lib/nelson/expressions/multipication_expression.rb
|
124
126
|
- lib/nelson/expressions/subtraction_expression.rb
|
125
127
|
- lib/nelson/version.rb
|