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