quantify 3.1.4 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
-