Composite Unit Measurements
A collection of specialized parsers designed for handling composite measurement strings.
Harshal V. Ladhe, M.Sc. Computer Science.
Introduction
The composite_unit_measurements
gem offers versatile parsers for efficiently parsing
composite measurement strings. Leveraging the power of the unit_measurements
gem,
it enables smooth handling of composite measurements in various units.
Minimum Requirements
- Ruby 3.2.2+ (Download Ruby)
Installation
To use composite_unit_measurements
in your Rails application, add the
following line to your Gemfile:
gem "composite_unit_measurements"
And then execute:
$ bundle install
Or otherwise simply install it yourself as:
$ gem install composite_unit_measurements
Usage
Each packaged parser includes the .parse
method to parse composite measurements.
You can use an appropriate parser to these measurements and the final result of
is returned in the leftmost unit of your measurement.
The result of each parser method returns an instance of measurement on which we can
perform any functionality offered by unit_measurements
.
This gem internally uses unit_measurements
to perform conversions and arithmetic operations. You can build supported composite measurements
using any unit alias.
Examples
Parsing length measurements:
CompositeUnitMeasurements::Length.parse("5 km 500 m") #=> 5.5 km
Parsing weight measurements:
CompositeUnitMeasurements::Weight.parse("4 kg 500 g") # 4.5 kg
Parsing time measurements:
CompositeUnitMeasurements::Time.parse("3 h 45 min") #=> 3.75 hr
Parsing volume measurements:
CompositeUnitMeasurements::Volume.parse("2 l 250 ml") #=> 2.25 l
Support for numeric types
Each parser can handle various numeric types, including scientific notation, rational numbers, and complex numbers.
CompositeUnitMeasurements::Length.parse("1+2i ft 12 in") #=> 2.0+2.0i ft
CompositeUnitMeasurements::Length.parse("1.5 ft 12e2 in") #=> 101.5 ft
CompositeUnitMeasurements::Length.parse("1 1/2 ft 1+2i in") #=> 1.5833333333333333+0.16666666666666669i ft
CompositeUnitMeasurements::Length.parse("2 ft 1+2i in") #=> 2.0833333333333335+0.16666666666666669i ft
CompositeUnitMeasurements::Length.parse("1e-2 ft 1+2i in") #=> 0.09333333333333334+0.16666666666666669i ft
Packaged parsers & supported composite measurements
The composite_unit_measurements
gem supports parsing various composite measurements, including:
1. CompositeUnitMeasurements::Length
- metre-centimetre (6 m 50 cm)
- kilometre-metre (5 km 500 m)
- foot-inch (5 ft 6 in)
2. CompositeUnitMeasurements::Weight
- kilogramme-gramme (4 kg 500 g)
- pound-ounce (8 lb 12 oz)
- stone-pound (2 st 6 lb)
3. CompositeUnitMeasurements::Time
- hour-minute (3 h 45 min)
- hour-minute-second-microsecond (12:60,3600:360000000)
4. CompositeUnitMeasurements::Volume
- litre-millilitre (2 l 250 ml)
Specifing parsers
By default, composite_unit_measurements
includes all packaged parsers automatically
when required in your application. However, you can opt to use specific parsers as
needed:
require "composite_unit_measurements/base"
require "composite_unit_measurements/length"
require "composite_unit_measurements/weight"
Contributing
Contributions to this project are welcomed! To contribute:
- Fork this repository
- Create a new branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am "Add some feature"
) - Push the changes to your branch (
git push origin my-new-feature
) - Create new Pull Request
License
Copyright 2023 Harshal V. LADHE, Released under the MIT License.