measure 0.1.0

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.
@@ -0,0 +1,59 @@
1
+ # = Definitions of the length dimension units
2
+ #
3
+ # Author:: Kenta Murata
4
+ # Copyright:: Copyright (C) 2008 Kenta Murata
5
+ # License:: LGPL version 3.0
6
+
7
+ require 'measure'
8
+
9
+ Measure.define_unit :meter, :length
10
+ Measure.define_alias :m, :meter
11
+
12
+ Measure.define_unit :kilo_meter, :length
13
+ Measure.define_alias :km, :kilo_meter
14
+
15
+ Measure.define_unit :centi_meter, :length
16
+ Measure.define_alias :cm, :centi_meter
17
+
18
+ Measure.define_unit :milli_meter, :length
19
+ Measure.define_alias :mm, :milli_meter
20
+
21
+ Measure.define_unit :micro_meter, :length
22
+ Measure.define_alias :um, :micro_meter
23
+
24
+ Measure.define_unit :nano_meter, :length
25
+ Measure.define_alias :nm, :nano_meter
26
+
27
+ Measure.define_unit :inch, :length
28
+ Measure.define_alias :in, :inch
29
+
30
+ Measure.define_unit :feet, :length
31
+ Measure.define_alias :ft, :feet
32
+
33
+ Measure.define_unit :yard, :length
34
+ Measure.define_alias :yd, :yard
35
+
36
+ Measure.define_conversion :m, :cm => 100, :mm => 1000, :um => 1000000, :nm => 1000000000
37
+ Measure.define_conversion :km, :m => 1000
38
+ Measure.define_conversion :cm, :mm => 10
39
+ Measure.define_conversion :mm, :um => 1000
40
+ Measure.define_conversion :um, :nm => 1000
41
+ Measure.define_conversion :in, :m => 0.254, :cm => 2.54, :mm => 25.4
42
+ Measure.define_conversion :ft, :in => 12
43
+ Measure.define_conversion :yd, :in => 36, :ft => 3
44
+
45
+ # for DTP
46
+
47
+ Measure.define_unit :point, :length
48
+ Measure.define_alias :pt, :point
49
+ Measure.define_alias :didot_point, :point
50
+ Measure.define_alias :dp, :didot_point
51
+
52
+ Measure.define_unit :big_point, :length
53
+ Measure.define_alias :bp, :big_point
54
+
55
+ Measure.define_unit :pica, :length
56
+ Measure.define_alias :pc, :pica
57
+
58
+ Measure.define_conversion :in, :pt => 72.27, :bp => 72.0
59
+ Measure.define_conversion :pc, :pt => 12
@@ -0,0 +1,52 @@
1
+ # Author:: Kenta Murata
2
+ # Copyright:: Copyright (C) 2008 Kenta Murata
3
+ # License:: LGPL version 3.0
4
+
5
+ module MeasureSupport
6
+ def self.enable?
7
+ Thread.current[:measure_support_enabled]
8
+ end
9
+
10
+ def self.enable
11
+ Thread.current[:measure_support_enabled] = true
12
+ end
13
+
14
+ def self.disable
15
+ Thread.current[:measure_support_enabled] = false
16
+ end
17
+
18
+ def self.included(mod)
19
+ mod.module_eval %Q{
20
+ alias measure_support_saved_method_missing method_missing
21
+ private_methods :measure_support_saved_method_missing
22
+
23
+ def method_missing(name, *args)
24
+ if MeasureSupport.enable?
25
+ return Measure.new(self, name) if Measure.defined?(name)
26
+ end
27
+ return measure_support_saved_method_missing(name, *args)
28
+ end
29
+ }
30
+ end
31
+ end
32
+
33
+ class << Measure
34
+ def with_short_form
35
+ begin
36
+ MeasureSupport.enable
37
+ return yield
38
+ ensure
39
+ MeasureSupport.disable
40
+ end
41
+ end
42
+
43
+ alias form with_short_form
44
+ end
45
+
46
+ class Integer
47
+ include MeasureSupport
48
+ end
49
+
50
+ class Float
51
+ include MeasureSupport
52
+ end
@@ -0,0 +1,17 @@
1
+ # Author:: Kenta Murata
2
+ # Copyright:: Copyright (C) 2008 Kenta Murata
3
+ # License:: LGPL version 3.0
4
+
5
+ class Measure
6
+ module VERSION
7
+ unless defined? MAJOR
8
+ MAJOR = 0
9
+ MINOR = 1
10
+ TINY = 0
11
+
12
+ STRING = [MAJOR, MINOR, TINY].join('.')
13
+
14
+ SUMMARY = "measure version #{STRING}"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,104 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+ require 'measure'
3
+
4
+ describe Measure do
5
+ before :each do
6
+ end
7
+
8
+ it 'has no units when nothing is defined' do
9
+ Measure.num_units.should be_equal 0
10
+ Measure.units.should be_empty
11
+ end
12
+
13
+ it 'has the [meter] after this is defined' do
14
+ Measure.define_unit :meter, :length
15
+ Measure.should have_unit :meter
16
+ Measure.should be_defined :meter
17
+ end
18
+
19
+ it 'returns the number of defined units when call Measure.num_units' do
20
+ Measure.define_unit :meter, :length
21
+ Measure.define_unit :inch, :length
22
+ Measure.num_units.should == 2
23
+ end
24
+
25
+ it 'raises Measure::UnitRedefinitionError ' +
26
+ 'when the [meter] is defined twice with different dimensions' do
27
+ Measure.define_unit :meter, :length
28
+ lambda { Measure.define_unit :meter, :length }.
29
+ should_not raise_error(Measure::UnitRedefinitionError)
30
+ lambda { Measure.define_unit :meter, :weight }.
31
+ should raise_error(Measure::UnitRedefinitionError)
32
+ end
33
+
34
+ it 'returns length units when call units(:length)' do
35
+ length_units = [:meter, :feet, :inch]
36
+ length_units.each {|u| Measure.define_unit u, :length }
37
+ Measure.define_unit :kilogram, :weight
38
+ Measure.define_unit :second, :time
39
+ set_equal?(Measure.units(:length), length_units).should be_true
40
+ end
41
+
42
+ it 'raises Measure::InvalidUnitError when conversion is defined with undefined unit' do
43
+ Measure.define_unit :meter, :length
44
+ lambda { Measure.define_conversion :inch, :meter => 1/0.254 }.
45
+ should raise_error(Measure::InvalidUnitError)
46
+ lambda { Measure.define_conversion :meter, :inch => 1/0.254 }.
47
+ should raise_error(Measure::InvalidUnitError)
48
+ end
49
+
50
+ it 'has commutative compatibility' do
51
+ Measure.define_unit :meter, :length
52
+ Measure.define_unit :inch, :length
53
+ Measure.define_conversion :meter, :inch => 0.254
54
+ Measure.compatible?(:meter, :inch).should be_true
55
+ Measure.compatible?(:inch, :meter).should be_true
56
+ end
57
+
58
+ it 'can convert meter to centimeter after define_conversion(:meter, :centimeter => 100)' do
59
+ Measure.define_unit :meter, :length
60
+ Measure.define_unit :centimeter, :length
61
+ Measure.define_conversion :meter, :centimeter => 100
62
+ (Measure(1, :meter).as_centimeter).should == Measure(100, :centimeter)
63
+ (Measure(1, :centimeter).as_meter).should == Measure(0.01, :meter)
64
+ end
65
+
66
+ it 'can convert to string' do
67
+ Measure.define_unit :meter, :length
68
+ Measure(1, :meter).to_s.should == '1 [meter]'
69
+ end
70
+
71
+ it 'can define aliases' do
72
+ Measure.define_unit :meter, :length
73
+ Measure.define_alias :m, :meter
74
+ Measure.should be_defined :m
75
+ Measure.dimension(:m).should == :length
76
+
77
+ Measure.define_unit :centimeter, :length
78
+ lambda { Measure.define_alias :centimeter, :meter }.
79
+ should raise_error(Measure::UnitRedefinitionError)
80
+
81
+ Measure.define_conversion :meter, :centimeter => 100
82
+ lambda { Measure(1, :m).as_centimeter }.
83
+ should_not raise_error(StandardError)
84
+ end
85
+
86
+ it 'can perform multi-hop conversion' do
87
+ Measure.define_unit :millimeter, :length
88
+ Measure.define_unit :inch, :length
89
+ Measure.define_unit :feet, :length
90
+ Measure.define_conversion :inch, :millimeter => 25.4
91
+ Measure.define_conversion :feet, :inch => 12.0
92
+ Measure(1, :feet).as_millimeter.should be_close(Measure(12.0 * 25.4, :millimeter), 1e-9)
93
+ end
94
+
95
+ after :each do
96
+ Measure.clear_units
97
+ end
98
+ end
99
+
100
+ private
101
+
102
+ def set_equal?(a1, a2)
103
+ (a1 - a2).empty?
104
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format profile
3
+ --timeout 20
4
+ --diff
@@ -0,0 +1,4 @@
1
+ dir = File.dirname(__FILE__)
2
+ lib_path = File.expand_path(File.join(dir, '..', 'lib'))
3
+ $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
4
+ require 'spec'
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: measure
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kenta Murata
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-11 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Measure is a library to handle measurement numbers.
17
+ email: measure-devel@rubyforge.org
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - CHANGES
25
+ - COPYING.LIB
26
+ files:
27
+ - ChangeLog
28
+ - CHANGES
29
+ - COPYING
30
+ - COPYING.LIB
31
+ - Rakefile
32
+ - README
33
+ - TODO
34
+ - lib/measure/length.rb
35
+ - lib/measure/support.rb
36
+ - lib/measure/version.rb
37
+ - lib/measure.rb
38
+ - spec/measure_spec.rb
39
+ - spec/spec.opts
40
+ - spec/spec_helper.rb
41
+ has_rdoc: true
42
+ homepage: http://measure.rubyforge.org
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --title
46
+ - Measure
47
+ - --line-numbers
48
+ - --inline-source
49
+ - --main
50
+ - README
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ requirements: []
66
+
67
+ rubyforge_project: measure
68
+ rubygems_version: 1.2.0
69
+ signing_key:
70
+ specification_version: 2
71
+ summary: measure version 0.1.0
72
+ test_files: []
73
+