hyde 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/Rakefile +1 -1
  2. data/lib/hyde.rb +64 -19
  3. data/test/hyde_test.rb +11 -0
  4. metadata +1 -1
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ DESCRIPTION = "unit converter of hyde"
17
17
  RUBYFORGE_PROJECT = "lowreal"
18
18
  HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
19
19
  BIN_FILES = %w( hyde )
20
- VERS = "0.0.2"
20
+ VERS = "0.0.3"
21
21
 
22
22
  REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
23
23
  CLEAN.include ['**/.*.sw?', '*.gem', '.config']
data/lib/hyde.rb CHANGED
@@ -1,17 +1,66 @@
1
1
 
2
2
  module Hyde
3
+ Units = {
4
+ # :metre => 1,
5
+ :m => 1,
6
+ :hyde => 1.56,
7
+ :barleycorn => 0.008467 ,
8
+ :inch => 0.0254 ,
9
+ :feet => 0.3048 ,
10
+ :yard => 0.9144 ,
11
+ :pole => 5.0292 ,
12
+ :chain => 20.1168 ,
13
+ :furlong => 201.168 ,
14
+ :mile => 1609.344 ,
15
+ :league => 4828.032 ,
16
+ }
3
17
 
4
- # convert unit hyde to metre
5
- def hyde_to_m(hyde)
6
- hyde * 1.56
7
- end
8
- module_function :hyde_to_m
18
+ Prefix = {
19
+ :Y => 1e24,
20
+ :Z => 1e21,
21
+ :E => 1e18,
22
+ :P => 1e15,
23
+ :T => 1e12,
24
+ :G => 1e9,
25
+ :M => 1e6,
26
+ :k => 1e3,
27
+ :h => 1e2,
28
+ :da => 1e1,
29
+ :d => 1e-1,
30
+ :c => 1e-2,
31
+ :m => 1e-3,
32
+ :u => 1e-6,
33
+ :n => 1e-9,
34
+ :p => 1e-12,
35
+ :f => 1e-15,
36
+ :a => 1e-18,
37
+ :z => 1e-21,
38
+ :y => 1e-24,
39
+ }
40
+
41
+ Units.each do |u, v|
42
+ module_eval <<-EOS
43
+ def metre_to_#{u}(m)
44
+ m / Units[:#{u}]
45
+ end
46
+ module_function :metre_to_#{u}
47
+
48
+ def #{u}_to_metre(t)
49
+ t * Units[:#{u}]
50
+ end
51
+ module_function :#{u}_to_metre
52
+
53
+ def hyde_to_#{u}(hyde)
54
+ metre_to_#{u}(hyde_to_metre(hyde))
55
+ end
56
+ module_function :hyde_to_#{u}
9
57
 
10
- # convert unit metre to hyde
11
- def m_to_hyde(m)
12
- m / 1.56
58
+ def #{u}_to_hyde(t)
59
+ metre_to_hyde(#{u}_to_metre(t))
60
+ end
61
+ module_function :#{u}_to_hyde
62
+ EOS
13
63
  end
14
- module_function :m_to_hyde
15
64
 
16
65
  module NumericExtension
17
66
  # convert to hyde taking self as m
@@ -29,17 +78,13 @@ module Hyde
29
78
  end
30
79
 
31
80
  def convert(a)
32
- _, num, unit = */([\d.]+)([ck]?m|hyde)/.match(a)
81
+ _, num, prefix, unit = */([\d.]+)(#{Prefix.keys.join("|")})?(#{Units.keys.join("|")})/o.match(a)
33
82
  num = num.to_f
34
- case unit
35
- when "m"
36
- "#{Hyde.m_to_hyde(num)}hyde"
37
- when "cm"
38
- "#{Hyde.m_to_hyde(num / 100)}hyde"
39
- when "km"
40
- "#{Hyde.m_to_hyde(num * 1000)}hyde"
41
- when "hyde"
42
- "#{Hyde.hyde_to_m(num) * 100}cm"
83
+ num *= Prefix[prefix.to_sym] if prefix
84
+ if unit == "hyde"
85
+ "%.1fcm" % [Hyde.hyde_to_metre(num) * 100]
86
+ else
87
+ "%.1fhyde" % [Hyde.send("#{unit}_to_hyde", num)]
43
88
  end
44
89
  end
45
90
  end
data/test/hyde_test.rb CHANGED
@@ -3,8 +3,18 @@ require File.dirname(__FILE__) + '/test_helper.rb'
3
3
  require "test/unit"
4
4
  class HydeTest < Test::Unit::TestCase
5
5
  def test_convert
6
+ assert_equal 1.56, Hyde.hyde_to_metre(1), "hyde must be 156cm"
6
7
  assert_equal 1.56, Hyde.hyde_to_m(1), "hyde must be 156cm"
7
8
  assert_equal 1, Hyde.m_to_hyde(1.56), "156cm must be hyde"
9
+ assert_equal 0.008467, Hyde.barleycorn_to_metre(1)
10
+ assert_equal 0.0254, Hyde.inch_to_metre(1)
11
+ assert_equal 0.3048, Hyde.feet_to_metre(1)
12
+ assert_equal 0.9144, Hyde.yard_to_metre(1)
13
+ assert_equal 5.0292, Hyde.pole_to_metre(1)
14
+ assert_equal 20.1168, Hyde.chain_to_metre(1)
15
+ assert_equal 201.168, Hyde.furlong_to_metre(1)
16
+ assert_equal 1609.344, Hyde.mile_to_metre(1)
17
+ assert_equal 4828.032, Hyde.league_to_metre(1)
8
18
  end
9
19
 
10
20
  def test_coreextension
@@ -17,5 +27,6 @@ class HydeTest < Test::Unit::TestCase
17
27
  assert_equal "1.0hyde", c.convert("156cm")
18
28
  assert_equal "1.0hyde", c.convert("1.56m")
19
29
  assert_equal "1.0hyde", c.convert("0.00156km")
30
+ assert_equal "1.0hyde", c.convert("5.11811024feet")
20
31
  end
21
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyde
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - cho45