sy 2.0.20 → 2.0.21
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/lib/sy.rb +20 -14
- data/lib/sy/imperial.rb +18 -16
- data/lib/sy/noinclude.rb +10 -0
- data/lib/sy/version.rb +1 -1
- data/test/noinclude_test.rb +44 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5166cc89ba9595945e3f0632fbe80bde86e63d8c
|
4
|
+
data.tar.gz: 6c3124ad680e80855f5ae38aa2baa69aa76b10d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 192290b7bffa579003cafc95691d62487dd8363a69c21db6b6e210a5d536566c0c58c583716930e2d9f513fa83a8069719fd7828ab0f653506a0656e97503b88
|
7
|
+
data.tar.gz: 1e8563d0e46326b3c4c953c302518bf74155ac29e6ad916890fe5690f8445964d21a920ee913781aaf44a5e4ae6e5727b15f7a43f268af77495ee3378f1202b1
|
data/lib/sy.rb
CHANGED
@@ -51,7 +51,11 @@ require_relative 'sy/matrix'
|
|
51
51
|
# be used. In this particular case, SY methods still can be invoked using
|
52
52
|
# abbreviations (5.s, 5.h, 5.min)
|
53
53
|
#
|
54
|
-
|
54
|
+
module SY
|
55
|
+
AUTOINCLUDE = true unless defined? ::SY::AUTOINCLUDE
|
56
|
+
end
|
57
|
+
|
58
|
+
Numeric.class_exec { include ::SY::ExpressibleInUnits } if SY::AUTOINCLUDE
|
55
59
|
|
56
60
|
# === Instead of introduction
|
57
61
|
#
|
@@ -80,7 +84,7 @@ module SY
|
|
80
84
|
|
81
85
|
# And let SY::MOLE be its standard unit, related to SY::Amount via Nᴀ:
|
82
86
|
puts "About to construct MOLE." if SY::DEBUG
|
83
|
-
MOLE = Unit.standard of: MoleAmount, short: "mol", amount: N
|
87
|
+
MOLE = Unit.standard of: MoleAmount, short: "mol", amount: Nᴀ * UNIT
|
84
88
|
puts SY::Unit.__instances__ if SY::DEBUG
|
85
89
|
puts "MOLE constructed. SY::Unit instances are" +
|
86
90
|
"#{SY::Unit.instance_names}" if SY::DEBUG
|
@@ -101,11 +105,13 @@ module SY
|
|
101
105
|
# Let SY::KILOGRAM be its standard unit:
|
102
106
|
KILOGRAM = Unit.standard of: Mass, short: "kg"
|
103
107
|
# Let SY::GRAM be another unit of SY::Mass, equal to 0.001.kg:
|
104
|
-
GRAM = Unit.of Mass, amount: 0.001
|
108
|
+
GRAM = Unit.of Mass, amount: 0.001 * KILOGRAM, short: "g"
|
105
109
|
# Let SY::TON be another...
|
106
|
-
TON = Unit.of Mass, amount: 1000
|
110
|
+
TON = Unit.of Mass, amount: 1000 * KILOGRAM, short: "t"
|
107
111
|
# And SY::DALTON another...
|
108
|
-
DALTON = Unit.of Mass,
|
112
|
+
DALTON = Unit.of Mass,
|
113
|
+
short: "Da",
|
114
|
+
amount: 1.66053892173e-27 * KILOGRAM
|
109
115
|
|
110
116
|
# === Basic dimension T
|
111
117
|
|
@@ -115,9 +121,9 @@ module SY
|
|
115
121
|
# Let SY::SECOND be its standard unit:
|
116
122
|
SECOND = Unit.standard of: Time, short: "s"
|
117
123
|
# Let SY::MINUTE be another unit:
|
118
|
-
MINUTE = Unit.of Time, short: "min", amount: 60
|
124
|
+
MINUTE = Unit.of Time, short: "min", amount: 60 * SECOND
|
119
125
|
# And SY::HOUR another:
|
120
|
-
HOUR = Unit.of Time, short: "h", amount: 60
|
126
|
+
HOUR = Unit.of Time, short: "h", amount: 60 * MINUTE
|
121
127
|
|
122
128
|
# === Basic dimension Q
|
123
129
|
|
@@ -136,14 +142,14 @@ module SY
|
|
136
142
|
KELVIN = Unit.standard of: Temperature, short: "K"
|
137
143
|
|
138
144
|
# Now let us define a useful constant:
|
139
|
-
TP_H₂O = TRIPLE_POINT_OF_WATER = 273.15
|
145
|
+
TP_H₂O = TRIPLE_POINT_OF_WATER = 273.15 * KELVIN
|
140
146
|
|
141
147
|
# Celsius temperature is a little bit peculiar in that it has offset of
|
142
148
|
# 273.15.K with respect to Kelvin temperature, and I am not sure whether
|
143
149
|
# at this moment SY is handling this right. But nevertheless:
|
144
150
|
CelsiusTemperature = Quantity.of :Θ, coerces_to: Temperature
|
145
151
|
|
146
|
-
CELSIUS_MEASURE = SY::Measure.simple_offset( TRIPLE_POINT_OF_WATER.
|
152
|
+
CELSIUS_MEASURE = SY::Measure.simple_offset( TRIPLE_POINT_OF_WATER.to_f )
|
147
153
|
|
148
154
|
# Degree celsius is SY::CELSIUS
|
149
155
|
CELSIUS = Unit.standard( of: CelsiusTemperature,
|
@@ -206,8 +212,8 @@ module SY
|
|
206
212
|
|
207
213
|
# HUMAN_BODY_TEMPERATURE = 37.°C.( KELVIN )
|
208
214
|
# STANDARD_TEMPERATURE = 25.°C.( KELVIN )
|
209
|
-
HUMAN_BODY_TEMPERATURE = TP_H₂O + 37
|
210
|
-
STANDARD_LABORATORY_TEMPERATURE = TP_H₂O + 25
|
215
|
+
HUMAN_BODY_TEMPERATURE = TP_H₂O + 37 * KELVIN
|
216
|
+
STANDARD_LABORATORY_TEMPERATURE = TP_H₂O + 25 * KELVIN
|
211
217
|
|
212
218
|
# === Dimensionless quantities
|
213
219
|
|
@@ -230,7 +236,7 @@ module SY
|
|
230
236
|
LitreVolume = Quantity.of Volume.dimension, coerces_to: Volume
|
231
237
|
|
232
238
|
# SY::LITRE is the standard unit of SY::LitreVolume:
|
233
|
-
LITRE = Unit.standard of: LitreVolume, short: "l", amount:
|
239
|
+
LITRE = Unit.standard of: LitreVolume, short: "l", amount: 0.001 * METRE ** 3
|
234
240
|
|
235
241
|
# At this point, there are certain things to note. Since standard units of
|
236
242
|
# SY::Area and SY::Volume have not been specified, they are assumed to be
|
@@ -280,7 +286,7 @@ module SY
|
|
280
286
|
# make SY::JOULE its standard unit:
|
281
287
|
JOULE = Unit.standard of: Energy, short: "J"
|
282
288
|
# SY::CALORIE means thermochemical calorie:
|
283
|
-
CALORIE = Unit.of Energy, short: "cal", amount: 4.184
|
289
|
+
CALORIE = Unit.of Energy, short: "cal", amount: 4.184 * JOULE
|
284
290
|
|
285
291
|
# SY::Power...
|
286
292
|
Power = ( Energy / Time ).standard!
|
@@ -321,5 +327,5 @@ module SY
|
|
321
327
|
Molecularity = Amount / LitreVolume
|
322
328
|
|
323
329
|
# Having defined Joules and Kelvins, we can spell out the Boltzmann constant:
|
324
|
-
Kʙ = BOLTZMANN_CONSTANT = 1.380648813e-23
|
330
|
+
Kʙ = BOLTZMANN_CONSTANT = 1.380648813e-23 * JOULE / KELVIN
|
325
331
|
end
|
data/lib/sy/imperial.rb
CHANGED
@@ -1,31 +1,33 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require_relative '../sy'
|
3
4
|
|
4
5
|
# Imperial units.
|
5
6
|
#
|
6
7
|
module SY
|
7
8
|
# === Length
|
8
|
-
INCH = Unit.of Length, amount: 25.4
|
9
|
-
|
10
|
-
|
9
|
+
INCH = Unit.of Length, amount: 25.4 * 0.001 * METRE
|
10
|
+
# short: 'in' would be ambiguous
|
11
|
+
FOOT = Unit.of Length, short: 'ft', amount: 12 * INCH
|
12
|
+
YARD = Unit.of Length, short: 'yd', amount: 3 * FOOT
|
11
13
|
# forget CHAIN and FURLONG
|
12
|
-
MILE = Unit.of Length, short: 'mi', amount: 5_280
|
13
|
-
FATHOM = Unit.of Length, short: 'ftm', amount: 1.853184
|
14
|
-
NAUTICAL_MILE = Unit.of Length, amount: 1000
|
14
|
+
MILE = Unit.of Length, short: 'mi', amount: 5_280 * FOOT
|
15
|
+
FATHOM = Unit.of Length, short: 'ftm', amount: 1.853184 * METRE
|
16
|
+
NAUTICAL_MILE = Unit.of Length, amount: 1000 * FATHOM
|
15
17
|
|
16
18
|
# === Area
|
17
|
-
ACRE = Unit.of Area, amount: ( 1.0 / 640 )
|
19
|
+
ACRE = Unit.of Area, amount: ( 1.0 / 640 ) * MILE ** 2
|
18
20
|
|
19
21
|
# === Volume
|
20
|
-
PINT = Unit.of Volume, amount: 568.26125.
|
22
|
+
PINT = Unit.of Volume, amount: 568.26125 * ( 0.01 * METRE ) ** 3
|
21
23
|
# FIXME: PINT = Unit.of Volume, amount: 568.26125.ml didn't work, it gave 1000 times more value
|
22
24
|
# something is wrong with the conversion mechanics
|
23
|
-
QUART = Unit.of Volume, amount: 2
|
24
|
-
GALLON = Unit.of Volume, short: 'gal', amount: 8
|
25
|
+
QUART = Unit.of Volume, amount: 2 * PINT
|
26
|
+
GALLON = Unit.of Volume, short: 'gal', amount: 8 * PINT
|
25
27
|
|
26
28
|
# === Mass
|
27
|
-
POUND = Unit.of Mass, short: 'lb', amount: 453.59237
|
28
|
-
OUNCE = Unit.of Mass, short: 'oz', amount: ( 1.0 / 16 )
|
29
|
-
STONE = Unit.of Mass, amount: 14
|
30
|
-
IMPERIAL_TON = Unit.of Mass, amount: 2240
|
29
|
+
POUND = Unit.of Mass, short: 'lb', amount: 453.59237 * GRAM
|
30
|
+
OUNCE = Unit.of Mass, short: 'oz', amount: ( 1.0 / 16 ) * POUND
|
31
|
+
STONE = Unit.of Mass, amount: 14 * POUND
|
32
|
+
IMPERIAL_TON = Unit.of Mass, amount: 2240 * POUND
|
31
33
|
end
|
data/lib/sy/noinclude.rb
ADDED
data/lib/sy/version.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
#! /usr/bin/ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
# **************************************************************************
|
5
|
+
# THIS IS SPEC-STYLE TEST FILE FOR SY PHYSICAL UNITS LIBRARY
|
6
|
+
# **************************************************************************
|
7
|
+
|
8
|
+
# The following will load Ruby spec-style library
|
9
|
+
require 'mathn'
|
10
|
+
require 'minitest/autorun'
|
11
|
+
|
12
|
+
|
13
|
+
# **************************************************************************
|
14
|
+
# THE SPECIFICATIONS START HERE
|
15
|
+
# **************************************************************************
|
16
|
+
|
17
|
+
describe "case of require 'sy/noinclude'" do
|
18
|
+
before do
|
19
|
+
# The following will load SY library
|
20
|
+
# require 'sy'
|
21
|
+
require './../lib/sy/noinclude'
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should show at least some signs of life" do
|
25
|
+
SY::Length.magnitude( 1 ).must_equal SY::METRE
|
26
|
+
SY::Length.magnitude( 2 ).must_equal SY::METRE * 2
|
27
|
+
SY::Volume.magnitude( 1 ).must_equal SY::METRE ** 3
|
28
|
+
# without caring for exhaustive test coverage...
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "require 'sy/noinclude'; require 'sy/imperial'" do
|
33
|
+
before do
|
34
|
+
# The following will load SY library
|
35
|
+
# require 'sy'
|
36
|
+
require './../lib/sy/noinclude'
|
37
|
+
require './../lib/sy/imperial'
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should show signs of life" do
|
41
|
+
SY::YARD.must_equal SY::FOOT * 3
|
42
|
+
SY::POUND.must_equal 16 * SY::OUNCE
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- boris
|
@@ -47,12 +47,14 @@ files:
|
|
47
47
|
- lib/sy/mapping.rb
|
48
48
|
- lib/sy/matrix.rb
|
49
49
|
- lib/sy/measure.rb
|
50
|
+
- lib/sy/noinclude.rb
|
50
51
|
- lib/sy/quantity.rb
|
51
52
|
- lib/sy/signed_magnitude.rb
|
52
53
|
- lib/sy/unit.rb
|
53
54
|
- lib/sy/version.rb
|
54
55
|
- lib/sy/wildcard_zero.rb
|
55
56
|
- sy.gemspec
|
57
|
+
- test/noinclude_test.rb
|
56
58
|
- test/sy_test.rb
|
57
59
|
homepage: ''
|
58
60
|
licenses: []
|
@@ -78,4 +80,5 @@ signing_key:
|
|
78
80
|
specification_version: 4
|
79
81
|
summary: Simple and concise way to express physical units.
|
80
82
|
test_files:
|
83
|
+
- test/noinclude_test.rb
|
81
84
|
- test/sy_test.rb
|