unit_measurements 1.6.0 → 2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: daf31532333a9d280d948318fe94079cfb5a8d341f6756a5c64b42843142c80f
4
- data.tar.gz: 88a85aed303c4c5209330bdcf14b1ee5696e40b0e815b6b570a60ac6fd4b6db5
3
+ metadata.gz: 8601bdbb7fb37856840869d267729adefddbf714ab6696376d6165252f9531f3
4
+ data.tar.gz: 33c504c31db58c752ecb4b587112ae2df4b0af6c0e1efd957af1202e635e3622
5
5
  SHA512:
6
- metadata.gz: 60febdff329999f4aeedb36fbb8aa70eccf1ab8feecc34c4318daca4949b2df16034a285ce8ac5bee2c99e59f991fe52f456154dba5ae1c945bdf6e732f2ed55
7
- data.tar.gz: 8152670ce01518dac56686ccc17f51e5c3b898f6ec90710d9a5ebb66089fa234351a70a0a91a9b9e1adf02cfb0966df3490b02f625aa639239c63440d515e960
6
+ metadata.gz: 119bd53409c40aac1242b0721e3737e65231a2e243e1e0151ede230b5b2f76358679a63a0b9fc66c8ec8bf5fda9b9395a8539c8ad2f6fd08933edc8717ffaa6d
7
+ data.tar.gz: 3a5ed9b00ec6e5abee27bc8fd653e5c8c069ad18c5c5cac2c4dbcba519f1c72cbd574243f8c5e955fb4a896a737434b376395b2b4a46e114e40b473292fe04b8
data/CHANGELOG.md CHANGED
@@ -1,6 +1,24 @@
1
+ ## [2.1.0](https://github.com/shivam091/unit_measurements/compare/v1.7.0...v2.1.0) - 2023-08-21
2
+
3
+ ### What's new
4
+
5
+ - Added unit group for `time` units.
6
+ - Added unit group for `amount of substance` units.
7
+
8
+ ----------
9
+
10
+ ## [1.7.0](https://github.com/shivam091/unit_measurements/compare/v1.6.0...v1.7.0) - 2023-08-20
11
+
12
+ ### What's new
13
+
14
+ - Added support to convert the measurements to other numeric types viz.,
15
+ `Integer`, `BigDecimal`, `Rational`, `Complex`, and `Float`.
16
+
17
+ ----------
18
+
1
19
  ## [1.6.0](https://github.com/shivam091/unit_measurements/compare/v1.5.1...v1.6.0) - 2023-08-19
2
20
 
3
- ## What's new
21
+ ### What's new
4
22
 
5
23
  - Added support to perform mathematical operations on the measurements.
6
24
 
@@ -67,10 +85,10 @@
67
85
 
68
86
  ----------
69
87
 
70
- ## [0.1.0] - 2023-09-13
88
+ ## 0.1.0 - 2023-09-13
71
89
 
72
90
  ### Initial release
73
91
 
74
92
  -----------
75
93
 
76
- ## [Unreleased]
94
+ ### Unreleased
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- unit_measurements (1.6.0)
4
+ unit_measurements (2.1.0)
5
5
  activesupport (~> 7.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -369,6 +369,24 @@ UnitMeasurements::Length.new(17.625, :m).ceil
369
369
  #=> 18 m
370
370
  ```
371
371
 
372
+ ### Conversions
373
+
374
+ You can convert measurement quantity directly to other numeric types viz.
375
+ `Integer`, `BigDecimal`, `Rational`, `Complex`, and `Float`.
376
+
377
+ ```ruby
378
+ UnitMeasurements::Weight.new(2.25567, :kg).to_i
379
+ #=> 2 kg
380
+ UnitMeasurements::Weight.new(2.25567, :kg).to_f
381
+ #=> 2.25567 kg
382
+ UnitMeasurements::Weight.new(2.25567, :kg).to_r
383
+ #=> 225567/100000 kg
384
+ UnitMeasurements::Weight.new(2.25567, :kg).to_d
385
+ #=> 2.25567 kg
386
+ UnitMeasurements::Weight.new(2.25567, :kg).to_c
387
+ #=> 2.25567+0i kg
388
+ ```
389
+
372
390
  ## Units
373
391
 
374
392
  The **`UnitMeasurements::Unit`** class is used to represent the units for a measurement.
@@ -27,6 +27,7 @@ require "unit_measurements/unit"
27
27
  require "unit_measurements/unit_group"
28
28
  require "unit_measurements/arithmetic"
29
29
  require "unit_measurements/comparison"
30
+ require "unit_measurements/conversion"
30
31
  require "unit_measurements/math"
31
32
  require "unit_measurements/normalizer"
32
33
  require "unit_measurements/parser"
@@ -0,0 +1,62 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ module UnitMeasurements
6
+ module Conversion
7
+ # Converts quantity of the measurement to +Integer+.
8
+ #
9
+ # @example
10
+ # UnitMeasurements::Weight.new(2.25567, :kg).to_i
11
+ # => 2 kg
12
+ #
13
+ # @return [Measurement]
14
+ def to_i
15
+ self.class.new(quantity.to_i, unit)
16
+ end
17
+
18
+ # Converts quantity of the measurement to +Float+.
19
+ #
20
+ # @example
21
+ # UnitMeasurements::Weight.new(2.25567, :kg).to_f
22
+ # => 2.25567 kg
23
+ #
24
+ # @return [Measurement]
25
+ def to_f
26
+ self.class.new(quantity.to_f, unit)
27
+ end
28
+
29
+ # Converts quantity of the measurement to +Rational+.
30
+ #
31
+ # @example
32
+ # UnitMeasurements::Weight.new(2.25567, :kg).to_r
33
+ # => 225567/100000 kg
34
+ #
35
+ # @return [Measurement]
36
+ def to_r
37
+ self.class.new(quantity.to_r, unit)
38
+ end
39
+
40
+ # Converts quantity of the measurement to +Complex+.
41
+ #
42
+ # @example
43
+ # UnitMeasurements::Weight.new(2.25567, :kg).to_c
44
+ # => 2.25567+0i kg
45
+ #
46
+ # @return [Measurement]
47
+ def to_c
48
+ self.class.new(quantity.to_c, unit)
49
+ end
50
+
51
+ # Converts quantity of the measurement to +BigDecimal+.
52
+ #
53
+ # @example
54
+ # UnitMeasurements::Weight.new(2.25567, :kg).to_d
55
+ # => 2.25567 kg
56
+ #
57
+ # @return [Measurement]
58
+ def to_d
59
+ self.class.new(quantity.to_d, unit)
60
+ end
61
+ end
62
+ end
@@ -6,6 +6,7 @@ module UnitMeasurements
6
6
  class Measurement
7
7
  include Arithmetic
8
8
  include Comparison
9
+ include Conversion
9
10
  include Formatter
10
11
  include Math
11
12
 
@@ -2,5 +2,7 @@
2
2
  # -*- frozen_string_literal: true -*-
3
3
  # -*- warn_indent: true -*-
4
4
 
5
+ require_relative "amount_of_substance"
5
6
  require_relative "length"
7
+ require_relative "time"
6
8
  require_relative "weight"
@@ -0,0 +1,9 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::AmountOfSubstance = UnitMeasurements.build do
6
+ si_unit :mol, aliases: [:mole, :moles]
7
+
8
+ unit :NA, value: "1.6605389210322e-24 mol", aliases: [:"avogadro constant"]
9
+ end
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ # -*- frozen_string_literal: true -*-
3
+ # -*- warn_indent: true -*-
4
+
5
+ UnitMeasurements::Time = UnitMeasurements.build do
6
+ si_unit :s, aliases: [:sec, :second, :seconds]
7
+
8
+ unit :h, value: "60 min", aliases: [:hr, :hour, :hours]
9
+ unit :d, value: "24 h", aliases: [:day, :days]
10
+ unit :wk, value: "7 d", aliases: [:week, :weeks]
11
+ unit :fn, value: "2 wk", aliases: [:"4tnite", :fortnight, :fortnights]
12
+ unit :mo, value: "30.4167 d", aliases: [:month, :months]
13
+ unit :yr, value: "365 d", aliases: [:y, :year, :years]
14
+ unit :min, value: "60 s", aliases: [:minute, :minutes]
15
+ unit :qtr, value: "3 mo", aliases: [:quarter, :quarters]
16
+ unit :dec, value: "10 y", aliases: [:decade, :decades]
17
+ unit :cent, value: "10 dec", aliases: [:century, :centuries]
18
+ end
@@ -3,5 +3,5 @@
3
3
  # -*- warn_indent: true -*-
4
4
 
5
5
  module UnitMeasurements
6
- VERSION = "1.6.0"
6
+ VERSION = "2.1.0"
7
7
  end
data/units.md CHANGED
@@ -30,3 +30,30 @@ These units are defined in `UnitMeasurements::Weight`.
30
30
  | **1** | **g\*** | **gram, grams, gramme, grammes** |
31
31
  | 2 | q | quintal, quintals |
32
32
  | 3 | t | tonne, tonnes, metric tonne, metric tonnes |
33
+
34
+ ## 3. Time
35
+
36
+ These units are defined in `UnitMeasurements::Time`.
37
+
38
+ | # | Name | Aliases |
39
+ |:--|:--|:--|
40
+ | **1** | **s\*** | **sec, second, seconds** |
41
+ | 2 | h | hr, hour, hours |
42
+ | 3 | d | day, days |
43
+ | 4 | wk | week, weeks |
44
+ | 5 | fn | 4tnite, fortnight, fortnights |
45
+ | 6 | mo | month, months |
46
+ | 7 | yr | y, year, years |
47
+ | 8 | min | minute, minutes |
48
+ | 9 | qtr | quarter, quarters |
49
+ | 10 | dec | decade, decades |
50
+ | 11 | cent | century, centuries |
51
+
52
+ ## 4. Amount of substance
53
+
54
+ These units are defined in `UnitMeasurements::AmountOfSubstance`.
55
+
56
+ | # | Symbol | Aliases |
57
+ |:--|:--|:--|
58
+ | **1** | **mol\*** | **mole, moles** |
59
+ | 2 | NA | avogadro constant |
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: 1.6.0
4
+ version: 2.1.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-19 00:00:00.000000000 Z
11
+ date: 2023-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -106,6 +106,7 @@ files:
106
106
  - lib/unit_measurements/arithmetic.rb
107
107
  - lib/unit_measurements/base.rb
108
108
  - lib/unit_measurements/comparison.rb
109
+ - lib/unit_measurements/conversion.rb
109
110
  - lib/unit_measurements/errors/parse_error.rb
110
111
  - lib/unit_measurements/errors/unit_already_defined_error.rb
111
112
  - lib/unit_measurements/errors/unit_error.rb
@@ -118,7 +119,9 @@ files:
118
119
  - lib/unit_measurements/unit_group.rb
119
120
  - lib/unit_measurements/unit_group_builder.rb
120
121
  - lib/unit_measurements/unit_groups/all.rb
122
+ - lib/unit_measurements/unit_groups/amount_of_substance.rb
121
123
  - lib/unit_measurements/unit_groups/length.rb
124
+ - lib/unit_measurements/unit_groups/time.rb
122
125
  - lib/unit_measurements/unit_groups/weight.rb
123
126
  - lib/unit_measurements/version.rb
124
127
  - unit_measurements.gemspec