ruby-measurement 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) hide show
  1. data/.travis.yml +4 -0
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +2 -0
  4. data/Rakefile +3 -0
  5. data/lib/ruby-measurement/definitions/metric.rb +1 -0
  6. data/lib/ruby-measurement/definitions/metric/capacity.rb +12 -82
  7. data/lib/ruby-measurement/definitions/metric/volume.rb +82 -12
  8. data/lib/ruby-measurement/definitions/us_customary.rb +1 -0
  9. data/lib/ruby-measurement/definitions/us_customary/capacity.rb +29 -0
  10. data/lib/ruby-measurement/definitions/us_customary/length.rb +0 -20
  11. data/lib/ruby-measurement/definitions/us_customary/weight.rb +6 -6
  12. data/lib/ruby-measurement/measurement.rb +5 -14
  13. data/lib/ruby-measurement/unit.rb +52 -11
  14. data/lib/ruby-measurement/version.rb +1 -1
  15. data/ruby-measurement.gemspec +1 -0
  16. data/spec/ruby-measurement/definitions/metric/area_spec.rb +69 -0
  17. data/spec/ruby-measurement/definitions/metric/capacity_spec.rb +41 -0
  18. data/spec/ruby-measurement/definitions/metric/length_spec.rb +261 -0
  19. data/spec/ruby-measurement/definitions/metric/volume_spec.rb +261 -0
  20. data/spec/ruby-measurement/definitions/metric/weight_spec.rb +325 -0
  21. data/spec/ruby-measurement/definitions/us_customary/area_spec.rb +149 -0
  22. data/spec/ruby-measurement/definitions/us_customary/capacity_spec.rb +69 -0
  23. data/spec/ruby-measurement/definitions/us_customary/length_spec.rb +261 -0
  24. data/spec/ruby-measurement/definitions/us_customary/volume_spec.rb +201 -0
  25. data/spec/ruby-measurement/definitions/us_customary/weight_spec.rb +149 -0
  26. data/spec/ruby-measurement/measurement_spec.rb +342 -0
  27. data/spec/ruby-measurement/unit_builder_spec.rb +102 -0
  28. data/spec/ruby-measurement/unit_spec.rb +120 -0
  29. data/spec/spec_helper.rb +5 -0
  30. data/tasks/rspec.rake +6 -0
  31. 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
@@ -0,0 +1,5 @@
1
+ require 'ruby-measurement'
2
+
3
+ RSpec.configure do |config|
4
+ config.mock_with :rspec
5
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,6 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ desc 'Run all examples'
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ t.rspec_opts = %w(--color)
6
+ end
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.0.0
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-01-22 00:00:00.000000000 Z
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: &2156250560 !ruby/object:Gem::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: *2156250560
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