maths 0.0.3 → 0.0.4

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/bin/maths CHANGED
@@ -31,17 +31,8 @@ while command = Readline.readline(prompt, true)
31
31
  else
32
32
  begin
33
33
  result = parser.parse(command)
34
-
35
- if result.nil?
36
- output = "Undefined"
37
- elsif !result.is_a?(Numeric)
38
- output = result.to_s
39
- elsif result.frac == 0
40
- output = result.to_i.to_s
41
- else
42
- output = result.to_s("F")
43
- end
44
- puts "= #{output}"
34
+
35
+ puts "= #{Maths::Formatter.format(result)}"
45
36
  rescue ParseError
46
37
  puts $!
47
38
  end
data/lib/maths/calc.y CHANGED
@@ -3,8 +3,9 @@ class Calculator
3
3
  prechigh
4
4
  nonassoc UMINUS
5
5
  nonassoc FUNC
6
- left '^' '*' '/' '%'
7
- left '+' '-'
6
+ left "^" "*" '/' '%'
7
+ left "+" "-"
8
+ right PERCENTAGE_OF
8
9
  right "="
9
10
  preclow
10
11
  rule
@@ -25,7 +26,8 @@ rule
25
26
  | NUMBER
26
27
  | FLOAT
27
28
  | FUNC exp { result = Maths::Functions.exec(val[0], val[1]) }
28
-
29
+ | exp PERCENTAGE_OF exp { result = Percentage.build(val[0], val[2]) }
30
+
29
31
  assign: VARIABLE "=" exp { result = Brain.assign(val[0], val[2]) }
30
32
  | VARIABLE "=" assign { result = Brain.assign(val[0], val[2]) }
31
33
 
@@ -41,6 +43,15 @@ module Maths
41
43
  until str.empty?
42
44
  case str
43
45
  when /\A\s+/
46
+ when /\Aas a percentage of/
47
+ @q.push [:PERCENTAGE_OF, $&]
48
+ when /\Aas a % of/
49
+ @q.push [:PERCENTAGE_OF, $&]
50
+ when /\Aas % of/
51
+ @q.push [:PERCENTAGE_OF, $&]
52
+ when /\Aas % of/
53
+ @q.push [:PERCENTAGE_OF, $&]
54
+
44
55
  when /\A[A-Za-z]+[0-9]*/
45
56
  if Maths::Functions::FUNCTIONS.has_key?($&)
46
57
  @q.push [:FUNC, $&]
@@ -0,0 +1,22 @@
1
+ module Maths
2
+ class Formatter
3
+ # Public: Formats values for us to output.
4
+ def self.format(val)
5
+ if val.nil?
6
+ output = "Undefined"
7
+ elsif !val.is_a?(Numeric)
8
+ output = val.to_s
9
+ elsif val.frac == 0
10
+ output = val.to_i.to_s
11
+ else
12
+ output = val.to_s("F")
13
+ end
14
+
15
+ if val.is_a?(Percentage)
16
+ output += "%"
17
+ end
18
+
19
+ output
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,14 @@
1
+ module Maths
2
+ # Public: Represents a number that should be formatted as a percentage
3
+ class Percentage < BigDecimal
4
+ # Pretty much idential to a BigDecimal
5
+
6
+ # Public: Builds out a fraction by the numerator and denominator
7
+ def self.build(numerator, denominator)
8
+ numerator = BigDecimal.new(numerator.to_s)
9
+ denominator = BigDecimal.new(denominator.to_s)
10
+ puts numerator, denominator
11
+ Percentage.new(((numerator / denominator) * 100).to_s)
12
+ end
13
+ end
14
+ end
data/lib/maths/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Maths
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/maths.rb CHANGED
@@ -7,4 +7,6 @@ require "bigdecimal"
7
7
  require "maths/version"
8
8
  require "maths/calc"
9
9
  require "maths/brain"
10
- require "maths/functions"
10
+ require "maths/functions"
11
+ require "maths/formatter"
12
+ require "maths/percentage"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maths
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -44,7 +44,9 @@ files:
44
44
  - lib/maths.rb
45
45
  - lib/maths/brain.rb
46
46
  - lib/maths/calc.y
47
+ - lib/maths/formatter.rb
47
48
  - lib/maths/functions.rb
49
+ - lib/maths/percentage.rb
48
50
  - lib/maths/version.rb
49
51
  - maths.gemspec
50
52
  homepage: http://github.com/commondream/maths