hyde 0.0.2 → 0.0.3

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