anthro 0.1.0 → 0.2.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/anthro/version.rb +1 -1
  3. data/lib/anthro.rb +31 -23
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c6dcc0a9bff23720cbd5ed5ee499dcf37b52acdec10c0dc6bb38fba5920305a
4
- data.tar.gz: e4c3898141293a2370840263c6c615e7bcf74abd0ad3d0cd5bf06c1c4e2eb330
3
+ metadata.gz: 762d2bc203133fef9c9fd96c0af510122bf193862bd85fd009e2783352520e73
4
+ data.tar.gz: 0b18cd05851ebb52b303d8b5498c116479d2699112b8ecb006d8d191b87aa768
5
5
  SHA512:
6
- metadata.gz: 0614c63f8f64c81df5496e3e4a5439a2f0fc3ff3966b6db4942fb0053cc68bb73626a50cfb3a36db81eb62ef76ffdfdf95d65fe89ed651b5a3c61d94673b1d79
7
- data.tar.gz: c73f15f0fb7f11ba54e04609a7a8a3e9c1828a3ba7b475692c652803b158ab62478bedb57085b913542db485367b8fef4aec87daa00195d90d6c99336821e914
6
+ metadata.gz: 50d791a589b7255d5f15d7cb44e497366fb3a8a2db80451deabeaedc6c7160d02a11ee9845ac0401b3d1c1291bd3bf5f4504722658778982c464a97bb36d1390
7
+ data.tar.gz: 469979ab44b9ad7c2aa7352693caddd0e19037ca8658cf97e2dfcd39ff70dca4ccc579b93ea9c94d22318dbcb2662c23ded2e7a7dc7658e19641174988d68760
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Anthro
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/anthro.rb CHANGED
@@ -5,41 +5,49 @@ require_relative "anthro/version"
5
5
  require_relative "anthro/data"
6
6
 
7
7
  module Anthro
8
+ @reference_data_mutex = Mutex.new
9
+ @reference_data = nil
10
+
11
+ def self.reference_data
12
+ return @reference_data if @reference_data
13
+
14
+ @reference_data_mutex.synchronize do
15
+ @reference_data ||= DATA.transform_values do |sources|
16
+ { m: {}, f: {} }.tap do |sex_data|
17
+ sources.each do |source, entries|
18
+ entries.each do |sex, month, l, m, s|
19
+ sex_key = sex == 1 ? :m : :f
20
+ sex_data[sex_key][month.to_f] = { l: l, m: m, s: s }.freeze
21
+ end
22
+ end
23
+ sex_data[:m].freeze
24
+ sex_data[:f].freeze
25
+ end.freeze
26
+ end.freeze
27
+ end
28
+ end
29
+
30
+ def self.clear_reference_data_cache!
31
+ @reference_data_mutex.synchronize do
32
+ @reference_data = nil
33
+ end
34
+ end
35
+
36
+ private_class_method :clear_reference_data_cache!
37
+
8
38
  class Calculator
9
39
  VALID_MEASUREMENTS = DATA.keys.freeze
10
40
  VALID_SEXES = %w[male female m f].freeze
11
41
  AGE_RANGE_MONTHS = (0..240)
12
42
  DAYS_PER_MONTH = 30.4375
13
43
 
14
- def self.load_reference_data
15
- @reference_data ||= begin
16
- data = {}
17
-
18
- Anthro::DATA.keys.each do |measurement|
19
- data[measurement] = { m: {}, f: {} }
20
- Anthro::DATA[measurement].keys.each do |source|
21
- Anthro::DATA[measurement][source].each do |sex, month, l, m, s|
22
- sex = sex == 1 ? :m : :f
23
- data[measurement][sex][month.to_f] = {
24
- l: l,
25
- m: m,
26
- s: s
27
- }
28
- end
29
- end
30
- end
31
-
32
- data
33
- end
34
- end
35
-
36
44
  attr_reader :z_score, :percentile
37
45
 
38
46
  def initialize(measurement_type:, sex:, value:, age_months: nil, age_days: nil)
39
47
  @measurement_type = measurement_type.to_sym
40
48
  @sex = sex[0].downcase
41
49
  @value = value.to_f
42
- @reference_data = self.class.load_reference_data
50
+ @reference_data = Anthro.reference_data # Use module-level cached data
43
51
 
44
52
  raise ArgumentError, "Specify either age_months or age_days, not both" if age_months && age_days
45
53
  raise ArgumentError, "Either age_months or age_days must be provided" unless age_months || age_days
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anthro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joon Lee
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-30 00:00:00.000000000 Z
10
+ date: 2025-03-31 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bigdecimal