ruby-measurement 1.0.0 → 1.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.
- data/.travis.yml +4 -0
- data/CHANGELOG.md +21 -0
- data/README.md +2 -0
- data/Rakefile +3 -0
- data/lib/ruby-measurement/definitions/metric.rb +1 -0
- data/lib/ruby-measurement/definitions/metric/capacity.rb +12 -82
- data/lib/ruby-measurement/definitions/metric/volume.rb +82 -12
- data/lib/ruby-measurement/definitions/us_customary.rb +1 -0
- data/lib/ruby-measurement/definitions/us_customary/capacity.rb +29 -0
- data/lib/ruby-measurement/definitions/us_customary/length.rb +0 -20
- data/lib/ruby-measurement/definitions/us_customary/weight.rb +6 -6
- data/lib/ruby-measurement/measurement.rb +5 -14
- data/lib/ruby-measurement/unit.rb +52 -11
- data/lib/ruby-measurement/version.rb +1 -1
- data/ruby-measurement.gemspec +1 -0
- data/spec/ruby-measurement/definitions/metric/area_spec.rb +69 -0
- data/spec/ruby-measurement/definitions/metric/capacity_spec.rb +41 -0
- data/spec/ruby-measurement/definitions/metric/length_spec.rb +261 -0
- data/spec/ruby-measurement/definitions/metric/volume_spec.rb +261 -0
- data/spec/ruby-measurement/definitions/metric/weight_spec.rb +325 -0
- data/spec/ruby-measurement/definitions/us_customary/area_spec.rb +149 -0
- data/spec/ruby-measurement/definitions/us_customary/capacity_spec.rb +69 -0
- data/spec/ruby-measurement/definitions/us_customary/length_spec.rb +261 -0
- data/spec/ruby-measurement/definitions/us_customary/volume_spec.rb +201 -0
- data/spec/ruby-measurement/definitions/us_customary/weight_spec.rb +149 -0
- data/spec/ruby-measurement/measurement_spec.rb +342 -0
- data/spec/ruby-measurement/unit_builder_spec.rb +102 -0
- data/spec/ruby-measurement/unit_spec.rb +120 -0
- data/spec/spec_helper.rb +5 -0
- data/tasks/rspec.rake +6 -0
- metadata +48 -5
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Measurement::Unit::Builder do
|
4
|
+
subject { Measurement::Unit::Builder.new(name, &block) }
|
5
|
+
|
6
|
+
let(:name) { :hour }
|
7
|
+
let(:block) { proc {} }
|
8
|
+
|
9
|
+
describe '.new' do
|
10
|
+
describe 'with a block' do
|
11
|
+
let(:block) do
|
12
|
+
proc { |unit| unit.alias :hr, :hrs }
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should evaluate the block' do
|
16
|
+
unit = subject.to_unit
|
17
|
+
unit.aliases.should include 'hr'
|
18
|
+
unit.aliases.should include 'hrs'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'without a block' do
|
23
|
+
let(:block) { nil }
|
24
|
+
|
25
|
+
it 'should not evaluate the block' do
|
26
|
+
unit = subject.to_unit
|
27
|
+
unit.aliases.should_not include 'hr'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#to_unit' do
|
33
|
+
it 'should return a matching unit' do
|
34
|
+
subject.to_unit.should be_a Measurement::Unit
|
35
|
+
subject.to_unit.name.should eq 'hour'
|
36
|
+
subject.to_unit.aliases.should eq %w(hour).to_set
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#alias' do
|
41
|
+
describe 'with a new alias' do
|
42
|
+
before do
|
43
|
+
subject.to_unit.aliases.should_not include 'hr'
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should append the new alias' do
|
47
|
+
aliases = subject.to_unit.aliases.dup
|
48
|
+
subject.alias :hr
|
49
|
+
subject.to_unit.aliases.size.should eq aliases.size + 1
|
50
|
+
subject.to_unit.aliases.should include 'hr'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'with multiple new aliases' do
|
55
|
+
before do
|
56
|
+
subject.to_unit.aliases.should_not include 'hr'
|
57
|
+
subject.to_unit.aliases.should_not include 'hrs'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'with an existing alias' do
|
62
|
+
before do
|
63
|
+
subject.alias :hour
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should not affect the list of aliases' do
|
67
|
+
aliases = subject.to_unit.aliases.dup
|
68
|
+
subject.alias :hour
|
69
|
+
subject.to_unit.aliases.should eq aliases
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#convert_to' do
|
75
|
+
describe 'with a new target alias' do
|
76
|
+
before do
|
77
|
+
subject.to_unit.conversions['min'].should be nil
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should add the conversion' do
|
81
|
+
conversion = proc { |value| value * 60.0 }
|
82
|
+
subject.to_unit.aliases.should_not include 'hr'
|
83
|
+
subject.convert_to(:min, &conversion)
|
84
|
+
subject.to_unit.conversions['min'].should eq conversion
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe 'with an existing target alias' do
|
89
|
+
before do
|
90
|
+
subject.convert_to(:min) { |value| value + 3 }
|
91
|
+
subject.to_unit.conversions['min'].should_not be nil
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should replace the conversion' do
|
95
|
+
conversion = proc { |value| value * 60.0 }
|
96
|
+
subject.to_unit.aliases.should_not include 'hr'
|
97
|
+
subject.convert_to(:min, &conversion)
|
98
|
+
subject.to_unit.conversions['min'].should eq conversion
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Measurement::Unit do
|
4
|
+
subject { Measurement::Unit.new(name) }
|
5
|
+
|
6
|
+
let(:name) { :hour }
|
7
|
+
|
8
|
+
describe '#name' do
|
9
|
+
it 'returns the name' do
|
10
|
+
subject.name.should eq 'hour'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#add_alias' do
|
15
|
+
it 'adds new aliases' do
|
16
|
+
subject.add_alias :hr, :hrs
|
17
|
+
subject.aliases.should eq %w(hour hr hrs).to_set
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'does not add aliases that already exist' do
|
21
|
+
subject.add_alias :hr, :hrs
|
22
|
+
expect { subject.add_alias :hr, :hrs }.to_not raise_error
|
23
|
+
subject.aliases.should eq %w(hour hr hrs).to_set
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#add_conversion' do
|
28
|
+
before do
|
29
|
+
subject.add_conversion(:sec) { |value| value * 3600.0 }
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'adds new conversions' do
|
33
|
+
conversion = proc { |value| value * 60.0 }
|
34
|
+
subject.add_conversion(:min, &conversion)
|
35
|
+
subject.conversions['min'].should be conversion
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'replaces existing conversions' do
|
39
|
+
conversion = proc { |value| value * 60.0 }
|
40
|
+
subject.add_conversion(:sec, &conversion)
|
41
|
+
subject.conversions['sec'].should be conversion
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#aliases' do
|
46
|
+
it 'returns the set of aliases' do
|
47
|
+
subject.aliases.should eq %w(hour).to_set
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#conversion' do
|
52
|
+
before do
|
53
|
+
Measurement::Unit.define(:min)
|
54
|
+
subject.add_conversion(:min) { |value| value * 60.0 }
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns conversion if it exists' do
|
58
|
+
subject.conversion(:min).should_not be_nil
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'returns nil if it does not exist' do
|
62
|
+
subject.conversion(:sec).should be_nil
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe '#inspect' do
|
67
|
+
it 'returns name' do
|
68
|
+
subject.inspect.should eq subject.name
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe '#to_s' do
|
73
|
+
it 'returns name' do
|
74
|
+
subject.inspect.should eq subject.name
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#==' do
|
79
|
+
before do
|
80
|
+
subject.add_alias(:hours, :hr, :hrs)
|
81
|
+
subject.add_conversion(:min) { |value| value * 60.0 }
|
82
|
+
end
|
83
|
+
|
84
|
+
describe 'other object is a Unit' do
|
85
|
+
it 'returns true when name, aliases, and conversions match' do
|
86
|
+
other = Measurement::Unit.new(:hour)
|
87
|
+
other.add_alias(:hours, :hr, :hrs)
|
88
|
+
other.add_conversion(:min) { |value| value * 60.0 }
|
89
|
+
#(subject == other).should be_true
|
90
|
+
end
|
91
|
+
|
92
|
+
it "returns false when the name doesn't match" do
|
93
|
+
other = Measurement::Unit.new(:hoooour)
|
94
|
+
other.add_alias(:hours, :hr, :hrs)
|
95
|
+
other.add_conversion(:min) { |value| value * 60.0 }
|
96
|
+
(subject == other).should be_false
|
97
|
+
end
|
98
|
+
|
99
|
+
it "returns false when the aliases don't match" do
|
100
|
+
other = Measurement::Unit.new(:hour)
|
101
|
+
other.add_alias(:hoooours, :hr, :hrs)
|
102
|
+
other.add_conversion(:min) { |value| value * 60.0 }
|
103
|
+
(subject == other).should be_false
|
104
|
+
end
|
105
|
+
|
106
|
+
it "returns false when the conversions don't match" do
|
107
|
+
other = Measurement::Unit.new(:hour)
|
108
|
+
other.add_alias(:hours, :hr, :hrs)
|
109
|
+
other.add_conversion(:min) { |value| value * 60000.0 }
|
110
|
+
(subject == other).should be_false
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe 'other object is not a Unit' do
|
115
|
+
it 'returns false' do
|
116
|
+
(subject == :hour).should be_false
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
data/spec/spec_helper.rb
ADDED
data/tasks/rspec.rake
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-measurement
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &2152673660 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,18 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2152673660
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &2152672480 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2152672480
|
25
36
|
description: Simple gem for calculating and converting measurements
|
26
37
|
email: matt.huggins@gmail.com
|
27
38
|
executables: []
|
@@ -29,6 +40,8 @@ extensions: []
|
|
29
40
|
extra_rdoc_files: []
|
30
41
|
files:
|
31
42
|
- .gitignore
|
43
|
+
- .travis.yml
|
44
|
+
- CHANGELOG.md
|
32
45
|
- Gemfile
|
33
46
|
- LICENSE.txt
|
34
47
|
- README.md
|
@@ -43,6 +56,7 @@ files:
|
|
43
56
|
- lib/ruby-measurement/definitions/metric/weight.rb
|
44
57
|
- lib/ruby-measurement/definitions/us_customary.rb
|
45
58
|
- lib/ruby-measurement/definitions/us_customary/area.rb
|
59
|
+
- lib/ruby-measurement/definitions/us_customary/capacity.rb
|
46
60
|
- lib/ruby-measurement/definitions/us_customary/length.rb
|
47
61
|
- lib/ruby-measurement/definitions/us_customary/volume.rb
|
48
62
|
- lib/ruby-measurement/definitions/us_customary/weight.rb
|
@@ -50,7 +64,22 @@ files:
|
|
50
64
|
- lib/ruby-measurement/unit.rb
|
51
65
|
- lib/ruby-measurement/version.rb
|
52
66
|
- ruby-measurement.gemspec
|
67
|
+
- spec/ruby-measurement/definitions/metric/area_spec.rb
|
68
|
+
- spec/ruby-measurement/definitions/metric/capacity_spec.rb
|
69
|
+
- spec/ruby-measurement/definitions/metric/length_spec.rb
|
70
|
+
- spec/ruby-measurement/definitions/metric/volume_spec.rb
|
71
|
+
- spec/ruby-measurement/definitions/metric/weight_spec.rb
|
72
|
+
- spec/ruby-measurement/definitions/us_customary/area_spec.rb
|
73
|
+
- spec/ruby-measurement/definitions/us_customary/capacity_spec.rb
|
74
|
+
- spec/ruby-measurement/definitions/us_customary/length_spec.rb
|
75
|
+
- spec/ruby-measurement/definitions/us_customary/volume_spec.rb
|
76
|
+
- spec/ruby-measurement/definitions/us_customary/weight_spec.rb
|
77
|
+
- spec/ruby-measurement/measurement_spec.rb
|
78
|
+
- spec/ruby-measurement/unit_builder_spec.rb
|
79
|
+
- spec/ruby-measurement/unit_spec.rb
|
80
|
+
- spec/spec_helper.rb
|
53
81
|
- tasks/debug.rake
|
82
|
+
- tasks/rspec.rake
|
54
83
|
homepage: https://github.com/mhuggins/ruby-measurement
|
55
84
|
licenses: []
|
56
85
|
post_install_message:
|
@@ -75,4 +104,18 @@ rubygems_version: 1.8.10
|
|
75
104
|
signing_key:
|
76
105
|
specification_version: 3
|
77
106
|
summary: Simple gem for calculating and converting measurements
|
78
|
-
test_files:
|
107
|
+
test_files:
|
108
|
+
- spec/ruby-measurement/definitions/metric/area_spec.rb
|
109
|
+
- spec/ruby-measurement/definitions/metric/capacity_spec.rb
|
110
|
+
- spec/ruby-measurement/definitions/metric/length_spec.rb
|
111
|
+
- spec/ruby-measurement/definitions/metric/volume_spec.rb
|
112
|
+
- spec/ruby-measurement/definitions/metric/weight_spec.rb
|
113
|
+
- spec/ruby-measurement/definitions/us_customary/area_spec.rb
|
114
|
+
- spec/ruby-measurement/definitions/us_customary/capacity_spec.rb
|
115
|
+
- spec/ruby-measurement/definitions/us_customary/length_spec.rb
|
116
|
+
- spec/ruby-measurement/definitions/us_customary/volume_spec.rb
|
117
|
+
- spec/ruby-measurement/definitions/us_customary/weight_spec.rb
|
118
|
+
- spec/ruby-measurement/measurement_spec.rb
|
119
|
+
- spec/ruby-measurement/unit_builder_spec.rb
|
120
|
+
- spec/ruby-measurement/unit_spec.rb
|
121
|
+
- spec/spec_helper.rb
|