nelson 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 33aefff26477090c67b8f6cbecfaffd8ac3a3173
4
- data.tar.gz: 1623ada73d5b8dcaea957cd320715cebcfd85d95
3
+ metadata.gz: 45100c598e2cff175d15dfc787c63b014544d7d8
4
+ data.tar.gz: f6e35b6b8e318fbdbdc078f6a41b723961ab230f
5
5
  SHA512:
6
- metadata.gz: ccb43e9f48aa59421075f7cd27462749a8665f335f5c836d28cbec331ddae08447363bb8f364dd1dc586bee1bc6e37ce5e73f2deff522f22fb5b69fae1acf044
7
- data.tar.gz: aca694d340d8c234715a67b336f5d8f1c07238f7d4c1daabd60b96ddd116c104d6a58dd755ab5d47c48df12103a805e8196a21f7a34e2a99e75339cd754933ae
6
+ metadata.gz: f9ea8892b4313eae7949e084498b68574004d259698e814efcb4ccc6c3c84b5e3ac9dfd0a25c7bedc49c7def206ecc9cd54505a7c487bf7224d8cdda8c378759
7
+ data.tar.gz: fd41e23ea3f1b0d85b514be9a60c538311724dea8e8a619f358683010259dc4cc1b315b231b553e9d33bdec2974638a1d841777f54293c4ba8c6977664da1d8f
@@ -1,4 +1,5 @@
1
1
  require "nelson/version"
2
+ require "nelson/term"
2
3
  require "nelson/expression"
3
4
  require "nelson/expression_builder"
4
5
  require "nelson/dsl"
@@ -5,7 +5,7 @@ module Nelson
5
5
 
6
6
  def initialize(*terms)
7
7
  raise ArgumentError, "At least 1 term must be specified" unless terms.length > 0
8
- @terms = terms
8
+ @terms = terms.map { |t| Term(t) }
9
9
  end
10
10
 
11
11
  def *(term)
@@ -32,10 +32,14 @@ module Nelson
32
32
  DivisionExpression.new(rhs_value, lhs_value).call
33
33
  end
34
34
 
35
+ def has_term?(term)
36
+ terms.include?(term)
37
+ end
38
+
35
39
  private
36
40
 
37
41
  def try_to_eval(term)
38
- term.respond_to?(:call) ? term.call : term
42
+ term.respond_to?(:call) ? term.call : Term(term)
39
43
  end
40
44
  end
41
45
 
@@ -0,0 +1,112 @@
1
+
2
+ module Nelson
3
+ class Term
4
+ include Comparable
5
+ attr_reader :raw_value, :value
6
+
7
+ def initialize(value)
8
+ @raw_value = value
9
+ @value = value.is_a?(Numeric) ? value.to_r : value
10
+ end
11
+
12
+ def <=>(other)
13
+ other <=> @value
14
+ end
15
+
16
+ def value=(new_value)
17
+ @raw_value = new_value
18
+ @value = @raw_value.to_r
19
+ end
20
+
21
+ def +(other)
22
+ if other.is_a? Term
23
+ Term.new(value + other.value)
24
+ elsif other.is_a? Numeric
25
+ Term.new(value + other)
26
+ elsif other.is_a? Expression
27
+ Term.new(value + other.call)
28
+ else
29
+ if other.respond_to? :coerce
30
+ a, b = other.coerce(self)
31
+ a + b
32
+ else
33
+ raise TypeError, "#{other.class} can't be coerced into Term"
34
+ end
35
+ end
36
+ end
37
+
38
+ def -(other)
39
+ if other.is_a? Term
40
+ Term.new(value - other.value)
41
+ elsif other.is_a? Numeric
42
+ Term.new(value - other)
43
+ else
44
+ if other.respond_to? :coerce
45
+ a, b = other.coerce(self)
46
+ a - b
47
+ else
48
+ raise TypeError, "#{other.class} can't be coerced into Term"
49
+ end
50
+ end
51
+ end
52
+
53
+ def *(other)
54
+ if other.is_a? Term
55
+ Term.new(value * other.value)
56
+ elsif other.is_a? Numeric
57
+ Term.new(value * other)
58
+ else
59
+ if other.respond_to? :coerce
60
+ a, b = other.coerce(self)
61
+ a * b
62
+ else
63
+ raise TypeError, "#{other.class} can't be coerced into Term"
64
+ end
65
+ end
66
+ end
67
+
68
+ def /(other)
69
+ if other.is_a? Term
70
+ Term.new(value / other.value)
71
+ elsif other.is_a? Numeric
72
+ Term.new(value / other)
73
+ else
74
+ if other.respond_to? :coerce
75
+ a, b = other.coerce(self)
76
+ a / b
77
+ else
78
+ raise TypeError, "#{other.class} can't be coerced into Term"
79
+ end
80
+ end
81
+ end
82
+
83
+ def coerce(other)
84
+ [Term.new(other), self]
85
+ end
86
+
87
+ def to_s
88
+ raw_value.to_s
89
+ end
90
+
91
+ def to_r
92
+ value
93
+ end
94
+
95
+ def to_f
96
+ value.to_f
97
+ end
98
+
99
+ def to_i
100
+ value.to_i
101
+ end
102
+ end
103
+ end
104
+
105
+ def Term(value)
106
+ case value
107
+ when Nelson::Term, Nelson::Expression
108
+ value
109
+ when Numeric
110
+ Nelson::Term.new(value)
111
+ end
112
+ end
@@ -1,3 +1,3 @@
1
1
  module Nelson
2
- VERSION = "0.6.0"
2
+ VERSION = "0.7.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nelson
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Metcalfe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-05 00:00:00.000000000 Z
11
+ date: 2015-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -124,6 +124,7 @@ files:
124
124
  - lib/nelson/expressions/division_expression.rb
125
125
  - lib/nelson/expressions/multipication_expression.rb
126
126
  - lib/nelson/expressions/subtraction_expression.rb
127
+ - lib/nelson/term.rb
127
128
  - lib/nelson/version.rb
128
129
  - nelson.gemspec
129
130
  homepage: