unitwise 1.0.4 → 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cdeefee8c44bb010c6198248b58819010f753d6f
4
+ data.tar.gz: 3e7283137b22b8bf7bf621b8585ce29680ce993e
5
+ SHA512:
6
+ metadata.gz: 1727d64bdd2929aa882a8150ca3f735a9e95035aebc06fb466e87108f4ba5bf9a3b4d2f734b0cebae0ef37fb9125616c2a307f61951802094fe0db7f656728f1
7
+ data.tar.gz: 9c516ce0638721abfe37b8a5f3236d39214896b96c46b813e9a8507027020c40748d9f64e24dcf16dd9228e790fcc6a47c3529fcccbc8f196510a7b5b1e8c142
@@ -5,6 +5,16 @@ version 1.0.0.
5
5
 
6
6
  Unitwise uses semantic versioning.
7
7
 
8
+ ## 1.1.0 - 2015-09-10
9
+
10
+ - `require unitwise/ext` has been deprecated as it is a performance drag and
11
+ violates Ruby best practices. Use `require unitwise` instead. Any use of the
12
+ Numeric helpers like `1.meter`, `2.to_foot` will need to change to
13
+ `Unitwise(1, 'meter')`, and `Unitwise(2, 'foot')`.
14
+ - `#to_s` should no longer return the unexpected ' 1' suffix for dimless measurements.
15
+ - `#to_s(mode)` will fall back to using the atom's `primary_code` if the mode
16
+ isn't available.
17
+
8
18
  ## 1.0.4 - 2015-01-10
9
19
 
10
20
  - Added Ruby 2.2 support.
data/README.md CHANGED
@@ -13,9 +13,11 @@ For an over the top example, consider a car (2800 lb) completing the quarter
13
13
  mile in 10 seconds (with uniform acceleration).
14
14
 
15
15
  ```ruby
16
- distance = 0.25.mile # => #<Unitwise::Measurement value=0.25 unit=mile>
17
- time = 10.second # => #<Unitwise::Measurement value=10 unit=second>
18
- mass = 2800.pound # => #<Unitwise::Measurement value=2800 unit=pound>
16
+ require 'unitwise'
17
+
18
+ distance = Unitwise(0.25, 'mile') # => #<Unitwise::Measurement value=0.25 unit=mile>
19
+ time = Unitwise(10, 'second') # => #<Unitwise::Measurement value=10 unit=second>
20
+ mass = Unitwise(2800, 'pound') # => #<Unitwise::Measurement value=2800 unit=pound>
19
21
 
20
22
  acceleration = 2.0 * distance / time ** 2
21
23
  # => #<Unitwise::Measurement value=0.005 unit=[mi_us]/s2>
@@ -71,23 +73,13 @@ Unitwise(2.3, 'kilogram') # => #<Unitwise::Measurement value=2.3 unit=kilogram>
71
73
  Unitwise(100, 'pound') # => #<Unitwise::Measurement value=100 unit=pound>
72
74
  ```
73
75
 
74
- Unitwise doesn't mess with the core library by default. However, you can
75
- optionally require the core extensions for some handy helpers.
76
-
77
- ```ruby
78
- require 'unitwise/ext'
79
-
80
- 1.convert_to('liter') # => #<Unitwise::Measurement value=1 unit=liter>
81
- 4.teaspoon # => #<Unitwise::Measurement value=4 unit=teaspoon>
82
- ```
83
-
84
76
  ### Conversion
85
77
 
86
78
  Unitwise is able to convert any unit within the UCUM spec to any other
87
79
  compatible unit.
88
80
 
89
81
  ```ruby
90
- 5.0.kilometer.convert_to('mile')
82
+ Unitwise(5.0, 'kilometer').convert_to('mile')
91
83
  # => #<Unitwise::Measurement value=3.106849747474748 unit=mile>
92
84
  ```
93
85
 
@@ -104,8 +96,8 @@ Unitwise(26.2, 'mile').to_kilometer
104
96
  It also has the ability to compare measurements with the same or different units.
105
97
 
106
98
  ```ruby
107
- 12.inch == 1.foot # => true
108
- 1.meter > 1.yard # => true
99
+ Unitwise(12, 'inch') == Unitwise(1, 'foot') # => true
100
+ Unitwise(1, 'meter') > Unitwise(1, 'yard') # => true
109
101
  ```
110
102
 
111
103
  Again, you have to compare compatible units. For example, comparing two
@@ -116,8 +108,8 @@ temperatures will work, comparing a mass to a length would fail.
116
108
  You can use shorthand for SI units.
117
109
 
118
110
  ```ruby
119
- 1000.m == 1.km # => true
120
- 1.ml == 0.001.l # => true
111
+ Unitwise(1000, 'm') == Unitwise(1, 'km') # => true
112
+ Unitwise(1, 'ml') == Unitwise(0.001, 'l') # => true
121
113
  ```
122
114
 
123
115
  ### Complex Units
@@ -145,29 +137,28 @@ Unitwise(1000, 'kg.s-1.(m/s)2').to_kilowatt
145
137
  You can add or subtract compatible measurements.
146
138
 
147
139
  ```ruby
148
- 2.0.meter + 3.0.inch - 1.0.yard
140
+ Unitwise(2.0, 'meter') + Unitwise(3.0, 'inch') - Unitwise(1.0, 'yard')
149
141
  # => #<Unitwise::Measurement value=1.1618 unit=meter>
150
142
  ```
151
143
 
152
144
  You can multiply or divide measurements and numbers.
153
145
 
154
146
  ```ruby
155
- 110.volt * 2
147
+ Unitwise(110, 'volt') * 2
156
148
  # => #<Unitwise::Measurement value=220 unit=volt>
157
149
  ```
158
150
 
159
151
  You can multiply or divide measurements with measurements.
160
152
 
161
153
  ```ruby
162
- 20.milligram / 1.liter
154
+ Unitwise(20, 'milligram') / Unitwise(1, 'liter')
163
155
  # => #<Unitwise::Measurement value=20 unit=mg/l>
164
-
165
156
  ```
166
157
 
167
158
  Exponentiation is also supported.
168
159
 
169
160
  ```ruby
170
- (10.cm ** 3).to_liter
161
+ (Unitwise(10, 'cm') ** 3).to_liter
171
162
  # => #<Unitwise::Measurement value=1 unit=liter>
172
163
  ```
173
164
 
@@ -246,6 +237,21 @@ Unitwise(1, "meter/s") # Does not work, mixed designations (name and primar
246
237
  Unitwise(1, "meter") / Unitwise(1, "s") # Also works
247
238
  ```
248
239
 
240
+ ## Core extensions (deprecated)
241
+
242
+ Unitwise doesn't mess with the core library by default. However, you can
243
+ optionally require the core extensions for some handy helpers. I find these
244
+ fun for doing calculations in an irb or pry session, but use them in your
245
+ application at your own risk. These extensions have been known to negatively
246
+ impact performance, and will be removed in a future version.
247
+
248
+ ```ruby
249
+ require 'unitwise/ext'
250
+
251
+ 4.teaspoon # => #<Unitwise::Measurement value=4 unit=teaspoon>
252
+ 1.convert_to('liter') # => #<Unitwise::Measurement value=1 unit=liter>
253
+ ```
254
+
249
255
  ## Supported Ruby Versions
250
256
 
251
257
  This library aims to support and is tested against the following Ruby
@@ -51,7 +51,7 @@ module Unitwise
51
51
  # @return [String]
52
52
  # @api public
53
53
  def to_s(mode = :primary_code)
54
- res = send(mode)
54
+ res = send(mode) || primary_code
55
55
  res.respond_to?(:each) ? res.first.to_s : res.to_s
56
56
  end
57
57
  end
@@ -1,2 +1,5 @@
1
1
  require 'unitwise'
2
2
  require 'unitwise/ext/numeric'
3
+
4
+ warn '`unitwise/ext` is deprecated. These core extensions will be removed ' \
5
+ 'in a future version. Please use `unitwise` instead.'
@@ -1,6 +1,8 @@
1
1
  # Unitwise extends Numeric to add these dyanmic method conveniences: `1.meter`,
2
- # `26.2.to_mile`, and `4.convert_to("Joule")`. These overrides are optional due
3
- # to their controversial nature. `require 'unitwise/ext'` to enable them.
2
+ # `26.2.to_mile`, and `4.convert_to("Joule")`. These overrides are optional
3
+ # and may be enabled with `require 'unitwise/ext'`. These methods are known to
4
+ # reduce performance, as well as violate Ruby best practices. They are
5
+ # deprecated and will be removed in a future version.
4
6
  class Numeric
5
7
  # Converts numeric to a measurement
6
8
  # @param unit [Unitwise::Unit, String] The unit to use in the measurement
@@ -116,7 +116,12 @@ module Unitwise
116
116
  # Convert to a simple string representing the scale.
117
117
  # @api public
118
118
  def to_s(mode = nil)
119
- "#{simplified_value} #{unit.to_s(mode)}"
119
+ unit_string = unit.to_s(mode)
120
+ if unit_string && unit_string != '1'
121
+ "#{simplified_value} #{unit_string}"
122
+ else
123
+ simplified_value.to_s
124
+ end
120
125
  end
121
126
 
122
127
  def inspect
@@ -114,8 +114,12 @@ module Unitwise
114
114
  end
115
115
 
116
116
  def to_s(mode = :primary_code)
117
- [(factor if factor != 1), (prefix.send(mode) if prefix),
118
- (atom.send(mode) if atom), (exponent if exponent != 1)].compact.join('')
117
+ [
118
+ (factor if factor != 1),
119
+ (prefix.send(mode) if prefix),
120
+ (atom.send(mode) if atom),
121
+ (exponent if exponent != 1)
122
+ ].compact.join('')
119
123
  end
120
124
 
121
125
  private
@@ -1,3 +1,3 @@
1
1
  module Unitwise
2
- VERSION = '1.0.4'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -228,6 +228,14 @@ describe Unitwise::Measurement do
228
228
  temp.to_s(:primary_code).must_equal("25 Cel")
229
229
  temp.to_s(:symbol).must_equal("25 °C")
230
230
  end
231
+ it "should fallback when there is no value for the provided mode" do
232
+ vol = described_class.new(12, "teaspoon")
233
+ vol.to_s(:symbol).must_equal("12 [tsp_us]")
234
+ end
235
+ it "should not return '1 1' for dimless measurements" do
236
+ dimless = described_class.new(1, "1")
237
+ dimless.to_s.must_equal("1")
238
+ end
231
239
  end
232
240
 
233
241
  end
metadata CHANGED
@@ -1,158 +1,139 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unitwise
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
5
- prerelease:
4
+ version: 1.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Josh Lewis
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-01-10 00:00:00.000000000 Z
11
+ date: 2015-09-10 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: liner
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0.2'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0.2'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: signed_multiset
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0.2'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0.2'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: memoizable
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0.4'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0.4'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: parslet
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ~>
59
+ - - "~>"
68
60
  - !ruby/object:Gem::Version
69
61
  version: 1.5.0
70
62
  type: :runtime
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ~>
66
+ - - "~>"
76
67
  - !ruby/object:Gem::Version
77
68
  version: 1.5.0
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: nokogiri
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ~>
73
+ - - "~>"
84
74
  - !ruby/object:Gem::Version
85
75
  version: 1.5.10
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ~>
80
+ - - "~>"
92
81
  - !ruby/object:Gem::Version
93
82
  version: 1.5.10
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: pry
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ~>
87
+ - - "~>"
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0.9'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ~>
94
+ - - "~>"
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0.9'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: minitest
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ~>
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
103
  version: '5.0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ~>
108
+ - - "~>"
124
109
  - !ruby/object:Gem::Version
125
110
  version: '5.0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: rake
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ~>
115
+ - - "~>"
132
116
  - !ruby/object:Gem::Version
133
117
  version: '10.0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ~>
122
+ - - "~>"
140
123
  - !ruby/object:Gem::Version
141
124
  version: '10.0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: nori
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ~>
129
+ - - "~>"
148
130
  - !ruby/object:Gem::Version
149
131
  version: '2.3'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ~>
136
+ - - "~>"
156
137
  - !ruby/object:Gem::Version
157
138
  version: '2.3'
158
139
  description: Physical quantity and units of measure conversion and math library
@@ -162,9 +143,9 @@ executables: []
162
143
  extensions: []
163
144
  extra_rdoc_files: []
164
145
  files:
165
- - .gitignore
166
- - .ruby-version
167
- - .travis.yml
146
+ - ".gitignore"
147
+ - ".ruby-version"
148
+ - ".travis.yml"
168
149
  - CHANGELOG.md
169
150
  - Gemfile
170
151
  - LICENSE.txt
@@ -222,27 +203,26 @@ files:
222
203
  homepage: http://github.com/joshwlewis/unitwise
223
204
  licenses:
224
205
  - MIT
206
+ metadata: {}
225
207
  post_install_message:
226
208
  rdoc_options: []
227
209
  require_paths:
228
210
  - lib
229
211
  required_ruby_version: !ruby/object:Gem::Requirement
230
- none: false
231
212
  requirements:
232
- - - ! '>='
213
+ - - ">="
233
214
  - !ruby/object:Gem::Version
234
215
  version: '0'
235
216
  required_rubygems_version: !ruby/object:Gem::Requirement
236
- none: false
237
217
  requirements:
238
- - - ! '>='
218
+ - - ">="
239
219
  - !ruby/object:Gem::Version
240
220
  version: '0'
241
221
  requirements: []
242
222
  rubyforge_project:
243
- rubygems_version: 1.8.23
223
+ rubygems_version: 2.4.5
244
224
  signing_key:
245
- specification_version: 3
225
+ specification_version: 4
246
226
  summary: Convert between and perform mathematical operations on physical quantities
247
227
  and units of measure defined by the Unified Code for Units of Measure.
248
228
  test_files:
@@ -262,4 +242,3 @@ test_files:
262
242
  - test/unitwise/term_test.rb
263
243
  - test/unitwise/unit_test.rb
264
244
  - test/unitwise_test.rb
265
- has_rdoc: