unit_measurements 3.2.0 → 3.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/Gemfile.lock +1 -1
- data/README.md +63 -24
- data/lib/unit_measurements/base.rb +2 -0
- data/lib/unit_measurements/measurement.rb +1 -1
- data/lib/unit_measurements/unit_group.rb +7 -38
- data/lib/unit_measurements/unit_group_builder.rb +32 -2
- data/lib/unit_measurements/unit_groups/acceleration.rb +13 -3
- data/lib/unit_measurements/unit_groups/all.rb +4 -2
- data/lib/unit_measurements/unit_groups/amount_of_substance.rb +5 -1
- data/lib/unit_measurements/unit_groups/angular_acceleration.rb +6 -2
- data/lib/unit_measurements/unit_groups/angular_velocity.rb +25 -0
- data/lib/unit_measurements/unit_groups/area.rb +14 -6
- data/lib/unit_measurements/unit_groups/density.rb +9 -5
- data/lib/unit_measurements/unit_groups/electric_charge.rb +20 -0
- data/lib/unit_measurements/unit_groups/electric_current.rb +12 -4
- data/lib/unit_measurements/unit_groups/force.rb +26 -8
- data/lib/unit_measurements/unit_groups/length.rb +13 -5
- data/lib/unit_measurements/unit_groups/luminous_intensity.rb +5 -1
- data/lib/unit_measurements/unit_groups/plane_angle.rb +6 -2
- data/lib/unit_measurements/unit_groups/solid_angle.rb +5 -1
- data/lib/unit_measurements/unit_groups/sound_level.rb +5 -1
- data/lib/unit_measurements/unit_groups/temperature.rb +8 -2
- data/lib/unit_measurements/unit_groups/time.rb +6 -2
- data/lib/unit_measurements/unit_groups/velocity.rb +23 -10
- data/lib/unit_measurements/unit_groups/voltage.rb +13 -5
- data/lib/unit_measurements/unit_groups/volume.rb +18 -10
- data/lib/unit_measurements/unit_groups/weight.rb +7 -3
- data/lib/unit_measurements/unit_methods.rb +45 -0
- data/lib/unit_measurements/unit_system.rb +29 -0
- data/lib/unit_measurements/version.rb +1 -1
- data/units.md +32 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c50e2f3f71c84f00b3b65de4e636b9497a9212cb923bc2d984d98dbb1d705f9
|
4
|
+
data.tar.gz: '079c32f6cd5bfbe6e1c6579274cefcf416ab4387808e32b837aa4f07028585fc'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96d7edaf7d57d86a087eb55c77202e30d465ce745440068d6f3f17e2cf9c83acbda65fedc6630033ee5e77af0a19c6d6dd101d9370aebe73a0990afc795c121c
|
7
|
+
data.tar.gz: 82cffad83e21aed77c6a8c5da32eab913ea548e55f350a2aeb2371bb4b905e6f2d715488c6c78ca888a94a21d695915035aff6493a4573192279d88ef0cf66fc
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
## [3.4.0](https://github.com/shivam091/unit_measurements/compare/v3.3.0...v3.4.0) - 2023-08-29
|
2
|
+
|
3
|
+
### What's new
|
4
|
+
|
5
|
+
- Added ability to group units by `unit system`.
|
6
|
+
- Added ability to set `primitive` unit for each unit system.
|
7
|
+
- Added method `primitive?` to check whether the unit is primitive or not.
|
8
|
+
- Added method `system_for` to find unit system by name.
|
9
|
+
|
10
|
+
### What's changed
|
11
|
+
|
12
|
+
- Grouped units in system and set primitive unit for those systems.
|
13
|
+
|
14
|
+
----------
|
15
|
+
|
16
|
+
## [3.3.0](https://github.com/shivam091/unit_measurements/compare/v3.2.0...v3.3.0) - 2023-08-28
|
17
|
+
|
18
|
+
### What's new
|
19
|
+
|
20
|
+
- Added unit group for `electric charge` units.
|
21
|
+
- Added unit group for `angular velocity` units.
|
22
|
+
|
23
|
+
----------
|
24
|
+
|
1
25
|
## [3.2.0](https://github.com/shivam091/unit_measurements/compare/v3.1.0...v3.2.0) - 2023-08-27
|
2
26
|
|
3
27
|
### What's new
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -9,7 +9,7 @@ A library that encapsulate measurements and their units in Ruby.
|
|
9
9
|
[](https://codeclimate.com/github/shivam091/unit_measurements/test_coverage)
|
10
10
|
[](https://github.com/shivam091/unit_measurements/blob/main/LICENSE.md)
|
11
11
|
|
12
|
-
**Harshal V. Ladhe,
|
12
|
+
**Harshal V. Ladhe, Master of Computer Science.**
|
13
13
|
|
14
14
|
## Introduction
|
15
15
|
|
@@ -251,28 +251,51 @@ UnitMeasurements::Weight.name
|
|
251
251
|
#=> weight
|
252
252
|
```
|
253
253
|
|
254
|
-
**See all
|
254
|
+
**See all unit systems defined in the unit group:**
|
255
|
+
|
256
|
+
```ruby
|
257
|
+
UnitMeasurements::Length.systems
|
258
|
+
#=> [#<UnitMeasurements::UnitSystem:0x00007fa1a46d11c0 @name=:metric, @primitive=#<UnitMeasurements::Unit: m (meter, meters, metre, metres)>, @units=[]>]
|
259
|
+
```
|
260
|
+
|
261
|
+
**Finding unit system within the unit group:**
|
262
|
+
|
263
|
+
```ruby
|
264
|
+
UnitMeasurements::Length.system_for(:imperial)
|
265
|
+
#=> #<UnitMeasurements::UnitSystem:0x00007f87a348e680
|
266
|
+
# @name=:imperial,
|
267
|
+
# @primitive=#<UnitMeasurements::Unit: in (", inch, inches)>,
|
268
|
+
# @units=[#<UnitMeasurements::Unit: in (", inch, inches)>, #<UnitMeasurements::Unit: ft (', feet, foot)>, ...]>
|
269
|
+
```
|
270
|
+
|
271
|
+
**See all units of the unit group/unit system:**
|
255
272
|
|
256
273
|
```ruby
|
257
274
|
UnitMeasurements::Weight.units
|
258
275
|
#=> [#<UnitMeasurements::Unit: g (gram, gramme, grammes, grams)>, ..., ...]
|
276
|
+
UnitMeasurements::Length.system_for(:imperial).units
|
277
|
+
#=> [#<UnitMeasurements::Unit: in (", inch, inches)>, #<UnitMeasurements::Unit: ft (', feet, foot)>, ...]
|
259
278
|
```
|
260
279
|
|
261
|
-
**See names of all valid units of the unit group:**
|
280
|
+
**See names of all valid units of the unit group/unit system:**
|
262
281
|
|
263
282
|
```ruby
|
264
283
|
UnitMeasurements::Weight.unit_names
|
265
284
|
#=> ["g", "kg", "lb", "oz", ...]
|
285
|
+
UnitMeasurements::Length.system_for(:imperial).unit_names
|
286
|
+
#=> ["ft", "in", "mi", "yd"]
|
266
287
|
```
|
267
288
|
|
268
|
-
**See all valid units of the unit group along with their aliases:**
|
289
|
+
**See all valid units of the unit group/unit system along with their aliases:**
|
269
290
|
|
270
291
|
```ruby
|
271
292
|
UnitMeasurements::Weight.unit_names_with_aliases
|
272
293
|
#=> ["g", "gram", "gramme", "grammes", "grams", "kg", "kilogram", "kilogramme", "kilogrammes", "kilograms", "lb", "ounce", "ounces", "oz", "pound", "pounds", ...]
|
294
|
+
UnitMeasurements::Length.system_for(:imperial).unit_names_with_aliases
|
295
|
+
#=> ["feet", "foot", "ft", "in", "inch", "inches", "mi", "mile", "miles", "yard", "yards", "yd"]
|
273
296
|
```
|
274
297
|
|
275
|
-
**Finding units within the unit group:**
|
298
|
+
**Finding units within the unit group/unit system:**
|
276
299
|
|
277
300
|
You can use `#unit_for` or `#unit_for!` (aliased as `#[]`) to find units within
|
278
301
|
the unit group. `#unit_for!` method returns error if a unit is not present in the
|
@@ -287,28 +310,43 @@ UnitMeasurements::Weight.unit_for!(:g)
|
|
287
310
|
#=> #<UnitMeasurements::Unit: g (gram, gramme, grammes, grams)>
|
288
311
|
UnitMeasurements::Weight.unit_for!(:z)
|
289
312
|
#=> Invalid unit: 'z'. (UnitMeasurements::UnitError)
|
313
|
+
|
314
|
+
UnitMeasurements::Length.system_for(:imperial).unit_for(:in)
|
315
|
+
#=> #<UnitMeasurements::Unit: in (", inch, inches)>
|
316
|
+
UnitMeasurements::Length.system_for(:imperial).unit_for(:m)
|
317
|
+
#=> nil
|
318
|
+
UnitMeasurements::Length.system_for(:imperial).unit_for!(:in)
|
319
|
+
#=> #<UnitMeasurements::Unit: in (", inch, inches)>
|
320
|
+
UnitMeasurements::Length.system_for(:imperial).unit_for!(:m)
|
321
|
+
#=> Invalid unit: 'm'. (UnitMeasurements::UnitError)
|
290
322
|
```
|
291
323
|
|
292
|
-
**Finding whether the unit is defined within the unit group:**
|
324
|
+
**Finding whether the unit is defined within the unit group/unit system:**
|
293
325
|
|
294
326
|
```ruby
|
295
327
|
UnitMeasurements::Weight.defined?(:g)
|
296
328
|
#=> true
|
297
|
-
UnitMeasurements::Weight.defined?(:kg)
|
298
|
-
#=> true
|
299
329
|
UnitMeasurements::Weight.defined?(:gramme)
|
300
330
|
#=> false
|
331
|
+
|
332
|
+
UnitMeasurements::Length.system_for(:metric).defined?(:m)
|
333
|
+
#=> true
|
334
|
+
UnitMeasurements::Length.system_for(:metric).defined?(:in)
|
335
|
+
#=> false
|
301
336
|
```
|
302
337
|
|
303
|
-
**Check if the unit is a valid unit or alias within the unit group:**
|
338
|
+
**Check if the unit is a valid unit or alias within the unit group/unit system:**
|
304
339
|
|
305
340
|
```ruby
|
306
341
|
UnitMeasurements::Weight.unit_or_alias?(:g)
|
307
342
|
#=> true
|
308
|
-
UnitMeasurements::Weight.unit_or_alias?(:kg)
|
309
|
-
#=> true
|
310
343
|
UnitMeasurements::Weight.unit_or_alias?(:gramme)
|
311
344
|
#=> true
|
345
|
+
|
346
|
+
UnitMeasurements::Length.system_for(:metric).unit_or_alias?(:m)
|
347
|
+
#=> true
|
348
|
+
UnitMeasurements::Length.system_for(:metric).unit_or_alias?(:metre)
|
349
|
+
#=> true
|
312
350
|
```
|
313
351
|
|
314
352
|
### Comparisons
|
@@ -338,6 +376,7 @@ UnitMeasurements::Length.new(1, :ft).clamp(UnitMeasurements::Length.new(13, :in)
|
|
338
376
|
You have ability to perform arithmetic operations on measurements with the same or
|
339
377
|
different units within a same unit group. You can perform arithmetic operations on
|
340
378
|
measurement by either other compatible measurement or number.
|
379
|
+
In cases of different units, the left hand side takes precedence:
|
341
380
|
|
342
381
|
**Methods:**
|
343
382
|
1. `#+` - Adds the other measurement quantity or number to the measurement.
|
@@ -480,24 +519,24 @@ use `UnitMeasurements.build` in order to define units within it:
|
|
480
519
|
If the unit is supporting [si prefixes](#si-units-support), you can use `si_unit` method to build it.
|
481
520
|
If you build unit using `si_unit`, the unit will be added along with all SI prefixes for it.
|
482
521
|
|
522
|
+
For convenience, you also have ability to group units by the unit system and set primitive unit for each unit system using `system` and `primitive` methods.
|
523
|
+
|
483
524
|
```ruby
|
484
525
|
UnitMeasurements::Time = UnitMeasurements.build do
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
526
|
+
# Group units by the unit system name.
|
527
|
+
system :metric do
|
528
|
+
# Set primitive unit for the unit system.
|
529
|
+
primitive :s
|
489
530
|
|
490
|
-
|
491
|
-
|
492
|
-
end
|
493
|
-
```
|
531
|
+
# Add a SI unit to the unit group
|
532
|
+
si_unit :s, aliases: [:second, :seconds]
|
494
533
|
|
495
|
-
|
496
|
-
|
497
|
-
# Add a SI unit to the unit group
|
498
|
-
si_unit :s, aliases: [:second, :seconds]
|
534
|
+
# Add units to the group, along with their conversion multipliers.
|
535
|
+
unit :min, value: "60 s", aliases: [:hour, :hours]
|
499
536
|
|
500
|
-
|
537
|
+
# You can also specify unit value as an array.
|
538
|
+
unit :h, value: [60, :min], aliases: [:day, :days]
|
539
|
+
end
|
501
540
|
end
|
502
541
|
```
|
503
542
|
|
@@ -24,6 +24,8 @@ end
|
|
24
24
|
|
25
25
|
require "unit_measurements/unit_group_builder"
|
26
26
|
require "unit_measurements/unit"
|
27
|
+
require "unit_measurements/unit_methods"
|
28
|
+
require "unit_measurements/unit_system"
|
27
29
|
require "unit_measurements/unit_group"
|
28
30
|
require "unit_measurements/arithmetic"
|
29
31
|
require "unit_measurements/comparison"
|
@@ -73,7 +73,7 @@ module UnitMeasurements
|
|
73
73
|
|
74
74
|
def_delegators :unit_group, :units, :unit_names, :unit_with_name_and_aliases,
|
75
75
|
:unit_names_with_aliases, :unit_for, :unit_for!, :defined?,
|
76
|
-
:unit_or_alias?, :[]
|
76
|
+
:unit_or_alias?, :[], :systems, :system_for
|
77
77
|
|
78
78
|
def parse(input)
|
79
79
|
input = Normalizer.normalize(input)
|
@@ -4,48 +4,17 @@
|
|
4
4
|
|
5
5
|
module UnitMeasurements
|
6
6
|
class UnitGroup
|
7
|
-
|
7
|
+
include UnitMethods
|
8
8
|
|
9
|
-
|
10
|
-
@units = units.map { |unit| unit.with(unit_group: self) }
|
11
|
-
end
|
12
|
-
|
13
|
-
def unit_for(name)
|
14
|
-
unit_name_to_unit(name)
|
15
|
-
end
|
16
|
-
|
17
|
-
def unit_for!(name)
|
18
|
-
unit = unit_for(name)
|
19
|
-
raise UnitError, name unless unit
|
20
|
-
unit
|
21
|
-
end
|
22
|
-
alias_method :[], :unit_for!
|
23
|
-
|
24
|
-
def unit_with_name_and_aliases
|
25
|
-
units.each_with_object({}) do |unit, hash|
|
26
|
-
unit.names.each { |name| hash[name.to_s] = unit }
|
27
|
-
end
|
28
|
-
end
|
9
|
+
attr_reader :units, :systems
|
29
10
|
|
30
|
-
def
|
31
|
-
units.map(
|
32
|
-
|
33
|
-
|
34
|
-
def unit_names_with_aliases
|
35
|
-
units.flat_map(&:names).sort
|
36
|
-
end
|
37
|
-
|
38
|
-
def unit_name_to_unit(name)
|
39
|
-
unit_with_name_and_aliases[name.to_s]
|
40
|
-
end
|
41
|
-
|
42
|
-
def defined?(name)
|
43
|
-
unit = unit_for(name)
|
44
|
-
unit ? unit.name == name.to_s : false
|
11
|
+
def initialize(units, systems)
|
12
|
+
@units = units.map { |unit| unit.with(unit_group: self) }
|
13
|
+
@systems = systems
|
45
14
|
end
|
46
15
|
|
47
|
-
def
|
48
|
-
|
16
|
+
def system_for(system_name)
|
17
|
+
@systems.find { |system| system.name.to_s == system_name.to_s }
|
49
18
|
end
|
50
19
|
end
|
51
20
|
end
|
@@ -7,7 +7,7 @@ module UnitMeasurements
|
|
7
7
|
attr_reader :units
|
8
8
|
|
9
9
|
def initialize
|
10
|
-
@units = []
|
10
|
+
@units, @systems = [], []
|
11
11
|
end
|
12
12
|
|
13
13
|
def unit(name, value: 1.0, aliases: [])
|
@@ -19,7 +19,19 @@ module UnitMeasurements
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def build
|
22
|
-
UnitGroup.new(@units)
|
22
|
+
UnitGroup.new(@units, @systems)
|
23
|
+
end
|
24
|
+
|
25
|
+
def system(system_name, &block)
|
26
|
+
@current_system = find_or_create_system(system_name)
|
27
|
+
instance_eval(&block) if block_given?
|
28
|
+
@current_system.set_primitive(@current_primitive) if @current_primitive
|
29
|
+
ensure
|
30
|
+
@current_primitive, @current_system = nil, nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def primitive(primitive)
|
34
|
+
@current_primitive = primitive
|
23
35
|
end
|
24
36
|
|
25
37
|
private
|
@@ -40,6 +52,7 @@ module UnitMeasurements
|
|
40
52
|
def build_unit(name, value:, aliases:)
|
41
53
|
unit = Unit.new(name, value: value, aliases: aliases)
|
42
54
|
check_for_duplicate_unit_names!(unit)
|
55
|
+
add_unit_to_system(unit)
|
43
56
|
|
44
57
|
unit
|
45
58
|
end
|
@@ -51,5 +64,22 @@ module UnitMeasurements
|
|
51
64
|
raise UnitAlreadyDefinedError.new(unit.name)
|
52
65
|
end
|
53
66
|
end
|
67
|
+
|
68
|
+
def find_system(name)
|
69
|
+
@systems.find { |system| system.name.to_s == name.to_s }
|
70
|
+
end
|
71
|
+
|
72
|
+
def find_or_create_system(system_name)
|
73
|
+
system = find_system(system_name)
|
74
|
+
unless system
|
75
|
+
system = UnitSystem.new(system_name)
|
76
|
+
@systems << system
|
77
|
+
end
|
78
|
+
system
|
79
|
+
end
|
80
|
+
|
81
|
+
def add_unit_to_system(unit)
|
82
|
+
@current_system.add_unit(unit) if @current_system
|
83
|
+
end
|
54
84
|
end
|
55
85
|
end
|
@@ -3,9 +3,19 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Acceleration = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :"m/s²"
|
8
|
+
|
9
|
+
si_unit :"m/s²", aliases: [:"m/s^2", :"m·s⁻²", :"meter per second squared", :"meters per second squared", :"metre per second squared", :"metres per second squared"]
|
10
|
+
end
|
11
|
+
|
12
|
+
system :imperial do
|
13
|
+
unit :"in/s²", value: "0.0254 m/s²", aliases: [:"in/s^2", :"in·s⁻²", :"inch per second squared", :"inches per second squared"]
|
14
|
+
end
|
15
|
+
|
16
|
+
system :foot_pound_second do
|
17
|
+
unit :"ft/s²", value: "0.3048 m/s²", aliases: [:"ft/s^2", :"ft·s⁻²", :"foot per second squared", :"feet per second squared"]
|
18
|
+
end
|
7
19
|
|
8
|
-
unit :"in/s²", value: "0.0254 m/s²", aliases: [:"in/s^2", :"in·s⁻²", :"inch per second squared", :"inches per second squared"]
|
9
|
-
unit :"ft/s²", value: "0.3048 m/s²", aliases: [:"ft/s^2", :"ft·s⁻²", :"foot per second squared", :"feet per second squared"]
|
10
20
|
unit :"Kn/s", value: "0.5144444 m/s²", aliases: [:"knot per second", :"knots per second"]
|
11
21
|
end
|
@@ -17,11 +17,13 @@ require_relative "weight"
|
|
17
17
|
require_relative "area"
|
18
18
|
require_relative "volume"
|
19
19
|
require_relative "density"
|
20
|
-
require_relative "force"
|
21
|
-
require_relative "voltage"
|
22
20
|
require_relative "velocity"
|
23
21
|
require_relative "acceleration"
|
22
|
+
require_relative "angular_velocity"
|
24
23
|
require_relative "angular_acceleration"
|
24
|
+
require_relative "force"
|
25
|
+
require_relative "voltage"
|
26
|
+
require_relative "electric_charge"
|
25
27
|
|
26
28
|
## Other units
|
27
29
|
|
@@ -3,7 +3,11 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::AmountOfSubstance = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :cgs do
|
7
|
+
primitive :mol
|
8
|
+
|
9
|
+
si_unit :mol, aliases: [:mole, :moles]
|
10
|
+
end
|
7
11
|
|
8
12
|
unit :NA, value: "1.6605389210322e-24 mol", aliases: [:"avogadro constant"]
|
9
13
|
end
|
@@ -3,8 +3,12 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::AngularAcceleration = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :"rad/s²"
|
8
|
+
|
9
|
+
si_unit :"rad/s²", aliases: [:"rad/s^2", :"rad·s⁻²", :"radian per second squared", :"radians per second squared"]
|
10
|
+
unit :"gon/s²", value: [(Math::PI / 200), :"rad/s²"], aliases: [:"gon/s^2", :"ᵍ/s²", :"gon·s⁻²", :"gradian per second squared", :"gradians per second squared"]
|
11
|
+
end
|
7
12
|
|
8
13
|
unit :"deg/s²", value: [(Math::PI / 180), :"rad/s²"], aliases: [:"deg/s^2", :"°/s²", :"deg·s⁻²", :"degree per second squared", :"degrees per second squared"]
|
9
|
-
unit :"gon/s²", value: [(Math::PI / 200), :"rad/s²"], aliases: [:"gon/s^2", :"ᵍ/s²", :"gon·s⁻²", :"gradian per second squared", :"gradians per second squared"]
|
10
14
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# -*- frozen_string_literal: true -*-
|
3
|
+
# -*- warn_indent: true -*-
|
4
|
+
|
5
|
+
UnitMeasurements::AngularVelocity = UnitMeasurements.build do
|
6
|
+
system :metric do
|
7
|
+
primitive :"rad/s"
|
8
|
+
|
9
|
+
unit :"rad/s", aliases: [:"rad·s⁻¹", :"radian per second", :"radians per second"]
|
10
|
+
unit :"rad/min", value: "1/60 rad/s", aliases: [:"rad·min⁻¹", :"radian per minute", :"radians per minute"]
|
11
|
+
unit :"rad/h", value: "1/60 rad/min", aliases: [:"rad·h⁻¹", :"radian per hour", :"radians per hour"]
|
12
|
+
|
13
|
+
unit :"gon/s", value: [(Math::PI / 200), :"rad/s"], aliases: [:"ᵍ/s", :"gon·s⁻¹", :"gradian per second", :"gradians per second"]
|
14
|
+
unit :"gon/min", value: "1/60 gon/s", aliases: [:"ᵍ/min", :"gon·min⁻¹", :"gradian per minute", :"gradians per minute"]
|
15
|
+
unit :"gon/h", value: "1/60 gon/min", aliases: [:"ᵍ/h", :"gon·h⁻¹", :"gradian per hour", :"gradians per hour"]
|
16
|
+
end
|
17
|
+
|
18
|
+
unit :"deg/s", value: [(Math::PI / 180), :"rad/s"], aliases: [:"°/s", :"deg·s⁻¹", :"degree per second", :"degrees per second"]
|
19
|
+
unit :"deg/min", value: "1/60 deg/s", aliases: [:"°/min", :"deg·min⁻¹", :"degree per minute", :"degrees per minute"]
|
20
|
+
unit :"deg/h", value: "1/60 deg/min", aliases: [:"°/h", :"deg·h⁻¹", :"degree per hour", :"degrees per hour"]
|
21
|
+
|
22
|
+
unit :"rev/s", value: "360 deg/s", aliases: [:"rev·s⁻¹", :"revolution per second", :"revolutions per second"]
|
23
|
+
unit :"rev/min", value: "1/60 rev/s", aliases: [:"rev·min⁻¹", :"revolution per minute", :"revolutions per minute"]
|
24
|
+
unit :"rev/h", value: "1/60 rev/min", aliases: [:"rev·h⁻¹", :"revolution per hour", :"revolutions per hour"]
|
25
|
+
end
|
@@ -3,11 +3,19 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Area = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :m²
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
unit :m², aliases: [:"m^2", :"sq m", :"square meter", :"square meters", :"square metre", :"square metres"]
|
10
|
+
unit :km², value: "1e+6 m²", aliases: [:"km^2", :"sq km", :"square kilometer", :"square kilometers", :"square kilometre", :"square kilometres"]
|
11
|
+
end
|
12
|
+
|
13
|
+
system :imperial do
|
14
|
+
primitive :in²
|
15
|
+
|
16
|
+
unit :in², value: "0.00064516 m²", aliases: [:"in^2", :"sq in", :"square inch", :"square inches"]
|
17
|
+
unit :ft², value: "144 in²", aliases: [:"ft^2", :"sq ft", :"square foot", :"square feet"]
|
18
|
+
unit :yd², value: "9 ft²", aliases: [:"yd^2", :"sq yd", :"square yard", :"square yards"]
|
19
|
+
unit :mi², value: "3097600 yd²", aliases: [:"mi^2", :"sq mi", :"square mile", :"square miles"]
|
20
|
+
end
|
13
21
|
end
|
@@ -3,11 +3,15 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Density = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :"g/m³"
|
7
8
|
|
8
|
-
|
9
|
-
unit :"g/ml", value: "1000 g/l", aliases: [:"g·ml⁻¹", :"gram per milliliter", :"grams per milliliter", :"gramme per millilitre", :"grammes per millilitre"]
|
9
|
+
unit :"g/m³", aliases: [:"g/m^3", :"g·m⁻³", :"gram per cubic meter", :"grams per cubic meter", :"gramme per cubic metre", :"grammes per cubic metre"]
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
unit :"g/l", value: "1 kg/m³", aliases: [:"g·l⁻¹", :"gram per liter", :"grams per liter", :"gramme per litre", :"grammes per litre"]
|
12
|
+
unit :"g/ml", value: "1000 g/l", aliases: [:"g·ml⁻¹", :"gram per milliliter", :"grams per milliliter", :"gramme per millilitre", :"grammes per millilitre"]
|
13
|
+
|
14
|
+
unit :"kg/m³", value: "1000 g/m³", aliases: [:"kg/m^3", :"kg·m⁻³", :"kilogram per cubic meter", :"kilograms per cubic meter", :"kilogramme per cubic metre", :"kilogrammes per cubic metre"]
|
15
|
+
unit :"kg/l", value: "1e+6 g/m³", aliases: [:"kg·l⁻¹", :"kilogram per liter", :"kilograms per liter", :"kilogramme per litre", :"kilogrammes per litre"]
|
16
|
+
end
|
13
17
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# -*- frozen_string_literal: true -*-
|
3
|
+
# -*- warn_indent: true -*-
|
4
|
+
|
5
|
+
UnitMeasurements::ElectricCharge = UnitMeasurements.build do
|
6
|
+
system :metric do
|
7
|
+
primitive :C
|
8
|
+
|
9
|
+
si_unit :C, aliases: [:coulomb, :coulombs]
|
10
|
+
end
|
11
|
+
|
12
|
+
system :centimetre_gram_second do
|
13
|
+
primitive :statC
|
14
|
+
|
15
|
+
unit :Fr, value: "3.335641e-10 C", aliases: [:franklin, :franklins]
|
16
|
+
unit :Fd, value: "96485.3377164 C", aliases: [:faraday, :faradays]
|
17
|
+
unit :abC, value: "10 C", aliases: [:abcoulomb, :abcoulombs]
|
18
|
+
unit :statC, value: "3.335641e-10 C", aliases: [:statcoulomb, :statcoulombs]
|
19
|
+
end
|
20
|
+
end
|
@@ -3,9 +3,17 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::ElectricCurrent = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :A
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
si_unit :A, aliases: [:amp, :ampere, :amperes]
|
10
|
+
end
|
11
|
+
|
12
|
+
system :centimetre_gram_second do
|
13
|
+
primitive :abA
|
14
|
+
|
15
|
+
unit :Bi, value: "10 A", aliases: [:biot, :biots]
|
16
|
+
unit :abA, value: "10 A", aliases: [:abampere, :abamperes]
|
17
|
+
unit :statA, value: "3.33564e-10 A", aliases: [:statampere, :statamperes]
|
18
|
+
end
|
11
19
|
end
|
@@ -3,12 +3,30 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Force = UnitMeasurements.build do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :N
|
8
|
+
|
9
|
+
si_unit :N, aliases: [:newton, :newtons]
|
10
|
+
unit :kgf, value: "9.80665 N", aliases: [:"kilogram-force", :"kilogramme-force"]
|
11
|
+
end
|
12
|
+
|
13
|
+
system :centimetre_gram_second do
|
14
|
+
unit :dyn, value: "1e-5 N", aliases: [:dyne, :dynes]
|
15
|
+
end
|
16
|
+
|
17
|
+
system :metre_tonne_second do
|
18
|
+
unit :tf, value: "8896.443230521 N", aliases: [:"tonne-force"]
|
19
|
+
end
|
20
|
+
|
21
|
+
system :avoirdupois do
|
22
|
+
unit :ozf, value: "0.27801385095378125 N", aliases: [:"ounce-force"]
|
23
|
+
end
|
24
|
+
|
25
|
+
system :english_engineering do
|
26
|
+
unit :lbf, value: "4.4482216152605 N", aliases: [:"pound-force"]
|
27
|
+
end
|
28
|
+
|
29
|
+
system :foot_pound_second do
|
30
|
+
unit :pdl, value: "0.138254954376 N", aliases: [:poundal, :poundals]
|
31
|
+
end
|
14
32
|
end
|
@@ -3,10 +3,18 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Length = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :m
|
7
8
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
si_unit :m, aliases: [:meter, :metre, :meters, :metres]
|
10
|
+
end
|
11
|
+
|
12
|
+
system :imperial do
|
13
|
+
primitive :in
|
14
|
+
|
15
|
+
unit :in, value: "25.4 mm", aliases: [:'"', :inch, :inches]
|
16
|
+
unit :ft, value: "12 in", aliases: [:"'", :foot, :feet]
|
17
|
+
unit :yd, value: "3 ft", aliases: [:yard, :yards]
|
18
|
+
unit :mi, value: "1760 yd", aliases: [:mile, :miles]
|
19
|
+
end
|
12
20
|
end
|
@@ -3,7 +3,11 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::LuminousIntensity = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :cd
|
8
|
+
|
9
|
+
si_unit :cd, aliases: [:candela, :candelas]
|
10
|
+
end
|
7
11
|
|
8
12
|
unit :hk, value: "0.92 cd", aliases: [:hefnerkerze]
|
9
13
|
end
|
@@ -3,10 +3,14 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::PlaneAngle = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :rad
|
8
|
+
|
9
|
+
si_unit :rad, aliases: [:radian, :radians]
|
10
|
+
unit :gon, value: [(Math::PI / 200), :rad], aliases: [:ᵍ, :grad, :gradian, :gradians] # (π / 200) rad
|
11
|
+
end
|
7
12
|
|
8
13
|
unit :deg, value: [(Math::PI / 180), :rad], aliases: [:°, :degree, :degrees] # (π / 180) rad
|
9
|
-
unit :gon, value: [(Math::PI / 200), :rad], aliases: [:ᵍ, :grad, :gradian, :gradians] # (π / 200) rad
|
10
14
|
unit :cir, value: [360, :deg], aliases: [:circle, :circles] # (2 * π) rad
|
11
15
|
unit :mil, value: [Rational(1, 6400), :cir], aliases: [:mils] # ((2 * π) / 6400) rad
|
12
16
|
unit :rev, value: [1, :cir], aliases: [:revolution, :revolutions] # (2 * π) rad
|
@@ -3,7 +3,11 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::SolidAngle = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :sr
|
8
|
+
|
9
|
+
si_unit :sr, aliases: [:steradian, :steradians]
|
10
|
+
end
|
7
11
|
|
8
12
|
unit :sp, value: [(4 * Math::PI), :sr], aliases: [:spat, :spats] # (4 * π) sr
|
9
13
|
unit :deg², value: [((Math::PI / 180) ** 2), :sr], aliases: [:"(°)²", :"sq °", :"square degree", :"square degrees"] # (π / 180)² sr
|
@@ -3,7 +3,11 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::SoundLevel = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :dB
|
8
|
+
|
9
|
+
si_unit :B, aliases: [:bel, :bels]
|
10
|
+
end
|
7
11
|
|
8
12
|
unit :Np, value: [(20 / Math.log(10)), :dB], aliases: [:neper, :nepers] # (20 / ln(10)) dB
|
9
13
|
end
|
@@ -3,7 +3,13 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Temperature = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :K
|
7
8
|
|
8
|
-
|
9
|
+
si_unit :K, aliases: [:kelvin, :kelvins]
|
10
|
+
end
|
11
|
+
|
12
|
+
system :english_engineering do
|
13
|
+
unit :°R, value: "5/9 K", aliases: [:R, :°Ra, :Ra, :rankine]
|
14
|
+
end
|
9
15
|
end
|
@@ -3,7 +3,12 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Time = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :s
|
8
|
+
|
9
|
+
si_unit :s, aliases: [:sec, :second, :seconds]
|
10
|
+
unit :min, value: "60 s", aliases: [:minute, :minutes]
|
11
|
+
end
|
7
12
|
|
8
13
|
unit :h, value: "60 min", aliases: [:hr, :hour, :hours]
|
9
14
|
unit :d, value: "24 h", aliases: [:day, :days]
|
@@ -11,7 +16,6 @@ UnitMeasurements::Time = UnitMeasurements.build do
|
|
11
16
|
unit :fn, value: "2 wk", aliases: [:"4tnite", :fortnight, :fortnights]
|
12
17
|
unit :mo, value: "30.4167 d", aliases: [:month, :months]
|
13
18
|
unit :yr, value: "365 d", aliases: [:y, :year, :years]
|
14
|
-
unit :min, value: "60 s", aliases: [:minute, :minutes]
|
15
19
|
unit :qtr, value: "3 mo", aliases: [:quarter, :quarters]
|
16
20
|
unit :dec, value: "10 y", aliases: [:decade, :decades]
|
17
21
|
unit :cent, value: "10 dec", aliases: [:century, :centuries]
|
@@ -3,18 +3,31 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Velocity = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :"m/s"
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
unit :"m/s", aliases: [:"m·s⁻¹", :"meter per second", :"meters per second", :"metre per second", :"metres per second"]
|
10
|
+
unit :"m/min", value: "1/60 m/s", aliases: [:"m·min⁻¹", :"meter per minute", :"meters per minute", :"metre per minute", :"metres per minute"]
|
11
|
+
unit :"m/h", value: "1/60 m/min", aliases: [:"m·h⁻¹", :"meter per hour", :"meters per hour", :"metre per hour", :"metres per hour"]
|
12
|
+
end
|
10
13
|
|
11
|
-
|
12
|
-
|
13
|
-
unit :"in/h", value: "1/60 in/min", aliases: [:"in·h⁻¹", :"inch per hour", :"inches per hour"]
|
14
|
+
system :imperial do
|
15
|
+
primitive :"in/s"
|
14
16
|
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
unit :"in/s", value: "0.0254 m/s", aliases: [:"in·s⁻¹", :"inch per second", :"inches per second"]
|
18
|
+
unit :"in/min", value: "1/60 in/s", aliases: [:"in·min⁻¹", :"inch per minute", :"inches per minute"]
|
19
|
+
unit :"in/h", value: "1/60 in/min", aliases: [:"in·h⁻¹", :"inch per hour", :"inches per hour"]
|
20
|
+
end
|
18
21
|
|
19
|
-
|
22
|
+
system :foot_pound_second do
|
23
|
+
primitive :"ft/s"
|
24
|
+
|
25
|
+
unit :"ft/s", value: "12 in/s", aliases: [:"ft·s⁻¹", :"foot per second", :"feet per second"]
|
26
|
+
unit :"ft/min", value: "1/60 ft/s", aliases: [:"ft·min⁻¹", :"foot per minute", :"feet per minute"]
|
27
|
+
unit :"ft/h", value: "1/60 ft/min", aliases: [:"ft·h⁻¹", :"foot per hour", :"feet per hour"]
|
28
|
+
end
|
29
|
+
|
30
|
+
system :meteorology_aviation_maritime do
|
31
|
+
unit :Kn, value: "0.514773 m/s", aliases: [:kt, :knot, :knots]
|
32
|
+
end
|
20
33
|
end
|
@@ -3,11 +3,19 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Voltage = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :V
|
7
8
|
|
8
|
-
|
9
|
-
unit :statV, value: "299.792458 V", aliases: [:statvolt, :statvolts]
|
9
|
+
si_unit :V, aliases: [:volt, :volts]
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
unit :"W/A", value: "1 V", aliases: [:"W·A⁻¹", :"watt per ampere", :"watts per ampere"]
|
12
|
+
unit :"J/C", value: "1 V", aliases: [:"J·C⁻¹", :"joule per coulomb", :"joules per coulomb"]
|
13
|
+
end
|
14
|
+
|
15
|
+
system :centimetre_gram_second do
|
16
|
+
primitive :statV
|
17
|
+
|
18
|
+
unit :abV, value: "1e-8 V", aliases: [:abvolt, :abvolts]
|
19
|
+
unit :statV, value: "299.792458 V", aliases: [:statvolt, :statvolts]
|
20
|
+
end
|
13
21
|
end
|
@@ -3,16 +3,24 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Volume = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :m³
|
7
8
|
|
8
|
-
|
9
|
-
unit :mm³, value: "1e-9 m³", aliases: [:"mm^3", :"cu mm", :"cubic millimeter", :"cubic millimeters", :"cubic millimetre", :"cubic millimetres"]
|
10
|
-
unit :cm³, value: "1e-6 m³", aliases: [:"cm^3", :"cu cm", :"cubic centimeter", :"cubic centimeters", :"cubic centimetre", :"cubic centimetres"]
|
11
|
-
unit :dm³, value: "1 l", aliases: [:"dm^3", :"cu dm", :"cubic decimeter", :"cubic decimeters", :"cubic decimetre", :"cubic decimetres"]
|
12
|
-
unit :km³, value: "1e+9 m³", aliases: [:"km^3", :"cu km", :"cubic kilometer", :"cubic kilometers", :"cubic kilometre", :"cubic kilometres"]
|
9
|
+
si_unit :l, aliases: [:liter, :litre, :liters, :litres]
|
13
10
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
unit :m³, value: "1000 l", aliases: [:"m^3", :"cu m", :"cubic meter", :"cubic meters", :"cubic metre", :"cubic metres"]
|
12
|
+
unit :mm³, value: "1e-9 m³", aliases: [:"mm^3", :"cu mm", :"cubic millimeter", :"cubic millimeters", :"cubic millimetre", :"cubic millimetres"]
|
13
|
+
unit :cm³, value: "1e-6 m³", aliases: [:"cm^3", :"cu cm", :"cubic centimeter", :"cubic centimeters", :"cubic centimetre", :"cubic centimetres"]
|
14
|
+
unit :dm³, value: "1 l", aliases: [:"dm^3", :"cu dm", :"cubic decimeter", :"cubic decimeters", :"cubic decimetre", :"cubic decimetres"]
|
15
|
+
unit :km³, value: "1e+9 m³", aliases: [:"km^3", :"cu km", :"cubic kilometer", :"cubic kilometers", :"cubic kilometre", :"cubic kilometres"]
|
16
|
+
end
|
17
|
+
|
18
|
+
system :imperial do
|
19
|
+
primitive :in³
|
20
|
+
|
21
|
+
unit :in³, value: "16.387064 ml", aliases: [:"in^3", :"cu in", :"cubic inch", :"cubic inches"]
|
22
|
+
unit :ft³, value: "1728 in³", aliases: [:"ft^3", :"cu ft", :"cubic foot", :"cubic feet"]
|
23
|
+
unit :yd³, value: "27 ft³", aliases: [:"yd^3", :"cu yd", :"cubic yard", :"cubic yards"]
|
24
|
+
unit :mi³, value: "5451776000 yd³", aliases: [:"mi^3", :"cu mi", :"cubic mile", :"cubic miles"]
|
25
|
+
end
|
18
26
|
end
|
@@ -3,8 +3,12 @@
|
|
3
3
|
# -*- warn_indent: true -*-
|
4
4
|
|
5
5
|
UnitMeasurements::Weight = UnitMeasurements.build do
|
6
|
-
|
6
|
+
system :metric do
|
7
|
+
primitive :kg
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
si_unit :g, aliases: [:gram, :grams, :gramme, :grammes]
|
10
|
+
|
11
|
+
unit :q, value: "100 kg", aliases: [:quintal, :quintals]
|
12
|
+
unit :t, value: "1000 kg", aliases: [:tonne, :tonnes, :"metric tonne", :"metric tonnes"]
|
13
|
+
end
|
10
14
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# -*- frozen_string_literal: true -*-
|
3
|
+
# -*- warn_indent: true -*-
|
4
|
+
|
5
|
+
module UnitMeasurements
|
6
|
+
module UnitMethods
|
7
|
+
def unit_for(name)
|
8
|
+
unit_name_to_unit(name)
|
9
|
+
end
|
10
|
+
|
11
|
+
def unit_for!(name)
|
12
|
+
unit = unit_for(name)
|
13
|
+
raise UnitError, name unless unit
|
14
|
+
unit
|
15
|
+
end
|
16
|
+
alias_method :[], :unit_for!
|
17
|
+
|
18
|
+
def unit_with_name_and_aliases
|
19
|
+
units.each_with_object({}) do |unit, hash|
|
20
|
+
unit.names.each { |name| hash[name.to_s] = unit }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def unit_names
|
25
|
+
units.map(&:name).sort
|
26
|
+
end
|
27
|
+
|
28
|
+
def unit_names_with_aliases
|
29
|
+
units.flat_map(&:names).sort
|
30
|
+
end
|
31
|
+
|
32
|
+
def unit_name_to_unit(name)
|
33
|
+
unit_with_name_and_aliases[name.to_s]
|
34
|
+
end
|
35
|
+
|
36
|
+
def defined?(name)
|
37
|
+
unit = unit_for(name)
|
38
|
+
unit ? unit.name == name.to_s : false
|
39
|
+
end
|
40
|
+
|
41
|
+
def unit_or_alias?(name)
|
42
|
+
!!unit_for(name)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# -*- frozen_string_literal: true -*-
|
3
|
+
# -*- warn_indent: true -*-
|
4
|
+
|
5
|
+
module UnitMeasurements
|
6
|
+
class UnitSystem
|
7
|
+
include UnitMethods
|
8
|
+
|
9
|
+
attr_reader :name, :primitive, :units
|
10
|
+
|
11
|
+
def initialize(name)
|
12
|
+
@name = name
|
13
|
+
@primitive = nil
|
14
|
+
@units = []
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_unit(unit)
|
18
|
+
@units << unit
|
19
|
+
end
|
20
|
+
|
21
|
+
def set_primitive(primitive)
|
22
|
+
@primitive = unit_for!(primitive)
|
23
|
+
end
|
24
|
+
|
25
|
+
def primitive?(unit)
|
26
|
+
@primitive.to_s == (unit.is_a?(Unit) ? unit.name : unit)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/units.md
CHANGED
@@ -231,7 +231,26 @@ These units are defined in `UnitMeasurements::Acceleration`.
|
|
231
231
|
| 3 | ft/s² | ft/s^2, ft·s⁻², foot per second squared, feet per second squared |
|
232
232
|
| 4 | Kn/s | knot per second, knots per second |
|
233
233
|
|
234
|
-
## 19. Angular
|
234
|
+
## 19. Angular velocity
|
235
|
+
|
236
|
+
These units are defined in `UnitMeasurements::AngularVelocity`.
|
237
|
+
|
238
|
+
| # | Name | Aliases |
|
239
|
+
|:--|:--|:--|
|
240
|
+
| 1 | rad/s | rad·s⁻¹, radian per second, radians per second |
|
241
|
+
| 2 | rad/min | rad·min⁻¹, radian per minute, radians per minute |
|
242
|
+
| 3 | rad/h | rad·h⁻¹, radian per hour, radians per hour |
|
243
|
+
| 4 | deg/s | °/s, deg·s⁻¹, degree per second, degrees per second |
|
244
|
+
| 5 | deg/min | °/min, deg·min⁻¹, degree per minute, degrees per minute |
|
245
|
+
| 6 | deg/h | °/h, deg·h⁻¹, degree per hour, degrees per hour |
|
246
|
+
| 7 | rev/s | rev·s⁻¹, revolution per second, revolutions per second |
|
247
|
+
| 8 | rev/min | rev·min⁻¹, revolution per minute, revolutions per minute |
|
248
|
+
| 9 | rev/h | rev·h⁻¹, revolution per hour, revolutions per hour |
|
249
|
+
| 10 | gon/s | ᵍ/s, gon·s⁻¹, gradian per second, gradians per second |
|
250
|
+
| 11 | gon/min | ᵍ/min, gon·min⁻¹, gradian per minute, gradians per minute |
|
251
|
+
| 12 | gon/h | ᵍ/h, gon·h⁻¹, gradian per hour, gradians per hour |
|
252
|
+
|
253
|
+
## 20. Angular acceleration
|
235
254
|
|
236
255
|
These units are defined in `UnitMeasurements::AngularAcceleration`.
|
237
256
|
|
@@ -240,3 +259,15 @@ These units are defined in `UnitMeasurements::AngularAcceleration`.
|
|
240
259
|
| 1 | rad/s² | rad/s^2, rad·s⁻², radian per second squared, radians per second squared |
|
241
260
|
| 2 | deg/s² | deg/s^2, °/s², deg·s⁻², degree per second squared, degrees per second squared |
|
242
261
|
| 3 | gon/s² | gon/s^2, ᵍ/s², gon·s⁻², gradian per second squared, gradians per second squared |
|
262
|
+
|
263
|
+
## 21. Electric charge
|
264
|
+
|
265
|
+
These units are defined in `UnitMeasurements::ElectricCharge`.
|
266
|
+
|
267
|
+
| # | Name | Aliases |
|
268
|
+
|:--|:--|:--|
|
269
|
+
| 1 | C* | coulomb, coulombs |
|
270
|
+
| 2 | abC | abcoulomb, abcoulombs |
|
271
|
+
| 3 | statC | statcoulomb, statcoulombs |
|
272
|
+
| 4 | Fr | franklin, franklins |
|
273
|
+
| 5 | Fd | faraday, faradays |
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unit_measurements
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Harshal LADHE
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -122,8 +122,10 @@ files:
|
|
122
122
|
- lib/unit_measurements/unit_groups/all.rb
|
123
123
|
- lib/unit_measurements/unit_groups/amount_of_substance.rb
|
124
124
|
- lib/unit_measurements/unit_groups/angular_acceleration.rb
|
125
|
+
- lib/unit_measurements/unit_groups/angular_velocity.rb
|
125
126
|
- lib/unit_measurements/unit_groups/area.rb
|
126
127
|
- lib/unit_measurements/unit_groups/density.rb
|
128
|
+
- lib/unit_measurements/unit_groups/electric_charge.rb
|
127
129
|
- lib/unit_measurements/unit_groups/electric_current.rb
|
128
130
|
- lib/unit_measurements/unit_groups/force.rb
|
129
131
|
- lib/unit_measurements/unit_groups/length.rb
|
@@ -138,6 +140,8 @@ files:
|
|
138
140
|
- lib/unit_measurements/unit_groups/voltage.rb
|
139
141
|
- lib/unit_measurements/unit_groups/volume.rb
|
140
142
|
- lib/unit_measurements/unit_groups/weight.rb
|
143
|
+
- lib/unit_measurements/unit_methods.rb
|
144
|
+
- lib/unit_measurements/unit_system.rb
|
141
145
|
- lib/unit_measurements/version.rb
|
142
146
|
- unit_measurements.gemspec
|
143
147
|
- units.md
|