quantify 3.1.4 → 3.2.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/Gemfile CHANGED
@@ -6,9 +6,9 @@ gem "i18n"
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "bundler", "~> 1.0.0"
9
+ gem "bundler"
10
10
  gem "jeweler", "~> 1.6.4"
11
11
  gem 'rspec', '~> 2.6.0'
12
- gem 'rcov'
12
+ gem 'simplecov'
13
13
  gem 'rdoc'
14
14
  end
data/README.md CHANGED
@@ -32,6 +32,11 @@ _.to_s #=> "0.68 kg"
32
32
 
33
33
  Unit.ratio(:kg, :ton) #=> <Quantify::Quantity:0xb7332bbc ... >
34
34
  _.to_s #=> "1016.047 kilograms per long ton"
35
+
36
+ Quantity.new(nil, nil) #=> <Quantify::Quantity:0xb7332bbc ... >
37
+ _.value #=> nil
38
+ _.unit #=> <Quantify::Unit::Base:0x007ff622bd9320 ...>
39
+ _.unit.name #=> "unity" #== 'unitless' unit
35
40
  ```
36
41
 
37
42
  General introduction
@@ -219,4 +224,4 @@ License
219
224
 
220
225
  © Copyright 2012 Andrew Berkeley.
221
226
 
222
- Licensed under the MIT license (See COPYING file for details)
227
+ Licensed under the MIT license (See COPYING file for details)
data/Rakefile CHANGED
@@ -35,13 +35,6 @@ Jeweler::Tasks.new do |gem|
35
35
  end
36
36
  Jeweler::RubygemsDotOrgTasks.new
37
37
 
38
- require 'rcov/rcovtask'
39
- desc "Generate code coverage"
40
- RSpec::Core::RakeTask.new(:coverage) do |t|
41
- t.rcov = true
42
- t.rcov_opts = ['--exclude', 'spec']
43
- end
44
-
45
38
  require 'rdoc/task'
46
39
  RDoc::Task.new do |rd|
47
40
  rd.title = "Quantify"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.1.4
1
+ 3.2.0
@@ -45,7 +45,9 @@ module Quantify
45
45
  # subseqent unit name, symbol or JScience label. Returns an array containing
46
46
  # quantity objects for each quantity recognised.
47
47
  def self.parse(string,options={})
48
-
48
+
49
+ return [Quantity.new(nil, nil)] unless string != nil && string.strip.length > 0
50
+
49
51
  quantities = []
50
52
  remainder = []
51
53
  words = string.words
@@ -121,8 +123,16 @@ module Quantify
121
123
  # JScience label of a known (or derivable through know units and prefixes)
122
124
  # unit
123
125
  def initialize(value, unit)
124
- @value = value.to_f
125
- @unit = Unit.for(unit)
126
+ if value
127
+ @value = value.to_f
128
+ else
129
+ @value = nil
130
+ end
131
+ if unit
132
+ @unit = Unit.for(unit)
133
+ else
134
+ @unit = Unit.for('unity')
135
+ end
126
136
  end
127
137
 
128
138
  # Returns a description of what the quantity describes, based upon the physica
data/quantify.gemspec CHANGED
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = "quantify"
8
- s.version = "3.1.4"
7
+ s.name = %q{quantify}
8
+ s.version = "3.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Andrew Berkeley"]
12
- s.date = "2012-10-30"
13
- s.description = "A gem to support physical quantities and unit conversions"
14
- s.email = "andrew.berkeley.is@googlemail.com"
12
+ s.date = %q{2012-10-30}
13
+ s.description = %q{A gem to support physical quantities and unit conversions}
14
+ s.email = %q{andrew.berkeley.is@googlemail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "README.md"
17
17
  ]
@@ -50,39 +50,40 @@ Gem::Specification.new do |s|
50
50
  "spec/string_spec.rb",
51
51
  "spec/unit_spec.rb"
52
52
  ]
53
- s.homepage = "https://github.com/spatchcock/quantify"
53
+ s.homepage = %q{https://github.com/spatchcock/quantify}
54
54
  s.licenses = ["MIT"]
55
55
  s.require_paths = ["lib"]
56
- s.rubygems_version = "1.8.24"
57
- s.summary = "Support for handling physical quantities, unit conversions, etc"
56
+ s.rubygems_version = %q{1.3.7.1}
57
+ s.summary = %q{Support for handling physical quantities, unit conversions, etc}
58
58
 
59
59
  if s.respond_to? :specification_version then
60
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
60
61
  s.specification_version = 3
61
62
 
62
63
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
63
64
  s.add_runtime_dependency(%q<activesupport>, ["~> 3.0"])
64
65
  s.add_runtime_dependency(%q<i18n>, [">= 0"])
65
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
66
+ s.add_development_dependency(%q<bundler>, [">= 0"])
66
67
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
67
68
  s.add_development_dependency(%q<rspec>, ["~> 2.6.0"])
68
- s.add_development_dependency(%q<rcov>, [">= 0"])
69
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
69
70
  s.add_development_dependency(%q<rdoc>, [">= 0"])
70
71
  else
71
72
  s.add_dependency(%q<activesupport>, ["~> 3.0"])
72
73
  s.add_dependency(%q<i18n>, [">= 0"])
73
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
74
+ s.add_dependency(%q<bundler>, [">= 0"])
74
75
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
75
76
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
76
- s.add_dependency(%q<rcov>, [">= 0"])
77
+ s.add_dependency(%q<simplecov>, [">= 0"])
77
78
  s.add_dependency(%q<rdoc>, [">= 0"])
78
79
  end
79
80
  else
80
81
  s.add_dependency(%q<activesupport>, ["~> 3.0"])
81
82
  s.add_dependency(%q<i18n>, [">= 0"])
82
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
83
+ s.add_dependency(%q<bundler>, [">= 0"])
83
84
  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
84
85
  s.add_dependency(%q<rspec>, ["~> 2.6.0"])
85
- s.add_dependency(%q<rcov>, [">= 0"])
86
+ s.add_dependency(%q<simplecov>, [">= 0"])
86
87
  s.add_dependency(%q<rdoc>, [">= 0"])
87
88
  end
88
89
  end
@@ -4,6 +4,12 @@ include Quantify
4
4
 
5
5
  describe Quantity do
6
6
 
7
+ it "should create a valid instance with nil values" do
8
+ quantity = Quantity.new nil, nil
9
+ quantity.value.should be_nil
10
+ quantity.unit.should eq(Unit.for('unity'))
11
+ end
12
+
7
13
  it "should create a valid instance with standard create and unit name" do
8
14
  quantity = Quantity.new 10.0, 'metre'
9
15
  quantity.value.should == 10
@@ -116,6 +122,13 @@ describe Quantity do
116
122
  quantities.first.unit.name.should == 'kilometre'
117
123
  end
118
124
 
125
+
126
+ it "should create a valid instance with unity unit from an empty string" do
127
+ quantities = Quantity.parse " "
128
+ quantities.first.value.should == nil
129
+ quantities.first.unit.name.should == 'unity'
130
+ end
131
+
119
132
  it "should create valid instances from complex string, no space and two-digit symbol" do
120
133
  quantities = Quantity.parse "100km driving cars"
121
134
  quantities.first.value.should == 100
@@ -329,6 +342,10 @@ describe Quantity do
329
342
  lambda{1.metre + 5.kg}.should raise_error
330
343
  end
331
344
 
345
+ it "should throw error when adding nil quantities" do
346
+ lambda{Quantity.new(nil,nil) + 5.kg}.should raise_error
347
+ end
348
+
332
349
  it "should subtract quantities correctly with different units of same dimension" do
333
350
  result = (125.4.kelvin - -211.85.degree_celsius)
334
351
  result.value.should be_within(0.00000001).of(64.1)
@@ -347,6 +364,10 @@ describe Quantity do
347
364
  lambda{1.metre - 5.kg}.should raise_error
348
365
  end
349
366
 
367
+ it "should throw error when subtracting nil quantities" do
368
+ lambda{Quantity.new(nil,nil) - 5.kg}.should raise_error
369
+ end
370
+
350
371
  it "should successfully multiply a quantity by a scalar" do
351
372
  (20.metre * 3).to_s.should == "60.0 m"
352
373
  end
@@ -359,7 +380,12 @@ describe Quantity do
359
380
  lambda{20.metre * '3'}.should raise_error
360
381
  end
361
382
 
362
- it "should two quantities" do
383
+ it "should raise error when multiplying by nil quantity" do
384
+ lambda{Quantity.new(nil,nil) * 5.kg}.should raise_error
385
+ lambda{5.kg * Quantity.new(nil,nil)}.should raise_error
386
+ end
387
+
388
+ it "should multiply two quantities" do
363
389
  quantity = (20.metre * 1.metre)
364
390
  quantity.value.should == 20
365
391
  quantity.unit.measures.should == 'area'
@@ -385,6 +411,11 @@ describe Quantity do
385
411
  (2.kg / 0.5).round.to_s.should == "4 kg"
386
412
  end
387
413
 
414
+ it "should throw error when dividing nil quantities" do
415
+ lambda{Quantity.new(nil,nil) / 5.kg}.should raise_error
416
+ lambda{5.kg / Quantity.new(nil,nil)}.should raise_error
417
+ end
418
+
388
419
  it "should calculate speed from distance and time quantities" do
389
420
  distance_in_km = 12.km
390
421
  time_in_min = 16.5.min
@@ -429,6 +460,14 @@ describe Quantity do
429
460
  quantity.unit.pluralized_name.should eql "kilograms"
430
461
  end
431
462
 
463
+ specify "converting a nil quantity to another unit yields nil" do
464
+ Quantity.new(nil,nil).to_kg.should be_nil
465
+ end
466
+
467
+ it "should raise error when trying to round a nil quantity" do
468
+ lambda{Quantity.new(nil,nil).round(2)}.should raise_error
469
+ end
470
+
432
471
  it "should convert compound units correctly" do
433
472
  speed = Quantity.new 100, (Unit.km/Unit.h)
434
473
  speed.to_mi.round(2).to_s.should == "62.14 mi/h"
@@ -468,6 +507,11 @@ describe Quantity do
468
507
  (80.kg/2.m/4.s/5.s).to_s(:name).should == '2.0 pascals'
469
508
  end
470
509
 
510
+ it "should raise error when trying to raise a nil quantity to a power" do
511
+ lambda{Quantity.new(nil,nil) ** 2}.should raise_error
512
+ lambda{Quantity.new(nil,nil).pow(2)}.should raise_error
513
+ end
514
+
471
515
  it "should raise a quantity to a power correctly" do
472
516
  unit = 50.ft ** 2
473
517
  unit.to_s.should == "2500.0 ft²"
@@ -516,6 +560,32 @@ describe Quantity do
516
560
  quantity.unit.symbol.should eql "yd²"
517
561
  end
518
562
 
563
+ context "comparing nil quantities" do
564
+ specify "greater than" do
565
+ lambda{Quantity.new(nil,nil) > 1.m}.should raise_error
566
+ end
567
+
568
+ specify "greater than or equals" do
569
+ lambda{Quantity.new(nil,nil) >= 1.m}.should raise_error
570
+ end
571
+
572
+ specify "less than" do
573
+ lambda{Quantity.new(nil,nil) < 1.m}.should raise_error
574
+ end
575
+
576
+ specify "less than or equals" do
577
+ lambda{Quantity.new(nil,nil) <= 1.m}.should raise_error
578
+ end
579
+
580
+ specify "equals" do
581
+ lambda{Quantity.new(nil,nil) == 1.m}.should raise_error
582
+ end
583
+
584
+ specify "between" do
585
+ lambda{Quantity.new(nil,nil).between? 1.ft,10.m}.should raise_error
586
+ end
587
+ end
588
+
519
589
  it "should be greater than" do
520
590
  (20.ft > 1.m).should be_true
521
591
  end
@@ -580,6 +650,15 @@ describe Quantity do
580
650
  lambda{20.ft === (1.ft..3)}.should raise_error
581
651
  end
582
652
 
653
+ specify "a range with nil quantities raises an error" do
654
+ lambda{Quantity.new(nil,nil)..Quantity.new(nil,nil)}.should raise_error
655
+ lambda{Quantity.new(nil,nil)..20.ft}.should raise_error
656
+ end
657
+
658
+ specify "cover? with nil quantities raises an error" do
659
+ lambda{(2.ft..20.ft).cover?(Quantity.new(nil,nil))}.should raise_error
660
+ end
661
+
583
662
  it "should return unit consolidation setting" do
584
663
  Quantity.auto_consolidate_units?.should be_false
585
664
  end
metadata CHANGED
@@ -1,136 +1,124 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: quantify
3
- version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease:
6
- segments:
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.2.0
5
+ segments:
7
6
  - 3
8
- - 1
9
- - 4
10
- version: 3.1.4
7
+ - 2
8
+ - 0
9
+ prerelease: false
11
10
  platform: ruby
12
- authors:
11
+ authors:
13
12
  - Andrew Berkeley
14
- autorequire:
13
+ autorequire: !!null
15
14
  bindir: bin
16
15
  cert_chain: []
17
-
18
- date: 2012-10-30 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- prerelease: false
22
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ date: 2012-10-30 00:00:00.000000000 +00:00
17
+ default_executable: !!null
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: activesupport
21
+ requirement: &24562920 !ruby/object:Gem::Requirement
23
22
  none: false
24
- requirements:
23
+ requirements:
25
24
  - - ~>
26
- - !ruby/object:Gem::Version
27
- hash: 7
28
- segments:
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ segments:
29
28
  - 3
30
29
  - 0
31
- version: "3.0"
32
30
  type: :runtime
33
- name: activesupport
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
31
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
32
+ version_requirements: *24562920
33
+ - !ruby/object:Gem::Dependency
34
+ name: i18n
35
+ requirement: &24561840 !ruby/object:Gem::Requirement
38
36
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ segments:
44
42
  - 0
45
- version: "0"
46
43
  type: :runtime
47
- name: i18n
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
44
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
45
+ version_requirements: *24561840
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: &24557200 !ruby/object:Gem::Requirement
52
49
  none: false
53
- requirements:
54
- - - ~>
55
- - !ruby/object:Gem::Version
56
- hash: 23
57
- segments:
58
- - 1
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ segments:
59
55
  - 0
60
- - 0
61
- version: 1.0.0
62
56
  type: :development
63
- name: bundler
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
57
  prerelease: false
67
- requirement: &id004 !ruby/object:Gem::Requirement
58
+ version_requirements: *24557200
59
+ - !ruby/object:Gem::Dependency
60
+ name: jeweler
61
+ requirement: &24555280 !ruby/object:Gem::Requirement
68
62
  none: false
69
- requirements:
63
+ requirements:
70
64
  - - ~>
71
- - !ruby/object:Gem::Version
72
- hash: 7
73
- segments:
65
+ - !ruby/object:Gem::Version
66
+ version: 1.6.4
67
+ segments:
74
68
  - 1
75
69
  - 6
76
70
  - 4
77
- version: 1.6.4
78
71
  type: :development
79
- name: jeweler
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
72
  prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
73
+ version_requirements: *24555280
74
+ - !ruby/object:Gem::Dependency
75
+ name: rspec
76
+ requirement: &24554180 !ruby/object:Gem::Requirement
84
77
  none: false
85
- requirements:
78
+ requirements:
86
79
  - - ~>
87
- - !ruby/object:Gem::Version
88
- hash: 23
89
- segments:
80
+ - !ruby/object:Gem::Version
81
+ version: 2.6.0
82
+ segments:
90
83
  - 2
91
84
  - 6
92
85
  - 0
93
- version: 2.6.0
94
86
  type: :development
95
- name: rspec
96
- version_requirements: *id005
97
- - !ruby/object:Gem::Dependency
98
87
  prerelease: false
99
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: *24554180
89
+ - !ruby/object:Gem::Dependency
90
+ name: simplecov
91
+ requirement: &24553080 !ruby/object:Gem::Requirement
100
92
  none: false
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- hash: 3
105
- segments:
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ segments:
106
98
  - 0
107
- version: "0"
108
99
  type: :development
109
- name: rcov
110
- version_requirements: *id006
111
- - !ruby/object:Gem::Dependency
112
100
  prerelease: false
113
- requirement: &id007 !ruby/object:Gem::Requirement
101
+ version_requirements: *24553080
102
+ - !ruby/object:Gem::Dependency
103
+ name: rdoc
104
+ requirement: &24552260 !ruby/object:Gem::Requirement
114
105
  none: false
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- hash: 3
119
- segments:
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ segments:
120
111
  - 0
121
- version: "0"
122
112
  type: :development
123
- name: rdoc
124
- version_requirements: *id007
113
+ prerelease: false
114
+ version_requirements: *24552260
125
115
  description: A gem to support physical quantities and unit conversions
126
116
  email: andrew.berkeley.is@googlemail.com
127
117
  executables: []
128
-
129
118
  extensions: []
130
-
131
- extra_rdoc_files:
119
+ extra_rdoc_files:
132
120
  - README.md
133
- files:
121
+ files:
134
122
  - COPYING
135
123
  - Gemfile
136
124
  - README.md
@@ -164,38 +152,35 @@ files:
164
152
  - spec/quantity_spec.rb
165
153
  - spec/string_spec.rb
166
154
  - spec/unit_spec.rb
155
+ has_rdoc: true
167
156
  homepage: https://github.com/spatchcock/quantify
168
- licenses:
157
+ licenses:
169
158
  - MIT
170
- post_install_message:
159
+ post_install_message: !!null
171
160
  rdoc_options: []
172
-
173
- require_paths:
161
+ require_paths:
174
162
  - lib
175
- required_ruby_version: !ruby/object:Gem::Requirement
163
+ required_ruby_version: !ruby/object:Gem::Requirement
176
164
  none: false
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- hash: 3
181
- segments:
165
+ requirements:
166
+ - - ! '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ segments:
182
170
  - 0
183
- version: "0"
184
- required_rubygems_version: !ruby/object:Gem::Requirement
171
+ hash: 4343267713667360298
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
173
  none: false
186
- requirements:
187
- - - ">="
188
- - !ruby/object:Gem::Version
189
- hash: 3
190
- segments:
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ segments:
191
179
  - 0
192
- version: "0"
193
180
  requirements: []
194
-
195
- rubyforge_project:
196
- rubygems_version: 1.8.24
197
- signing_key:
181
+ rubyforge_project: !!null
182
+ rubygems_version: 1.3.7.1
183
+ signing_key: !!null
198
184
  specification_version: 3
199
185
  summary: Support for handling physical quantities, unit conversions, etc
200
186
  test_files: []
201
-