module AbsApi
Constants
- ACCEPT
- BASE_URL
- DATAFLOW
- FREQ
- MEASURE
Public Instance Methods
Source
# File lib/abs_api.rb, line 28 def fetch_population(row, fetch: nil) region = region_code_for(row) return nil if region[:code].empty? url = population_url(region_code: region[:code], region_type: region[:type]) payload = if fetch JSON.parse(fetch.call(url)) else RabbotHttp.fetch_json(url, headers: { "Accept" => ACCEPT }) end parse_latest_observation(payload) rescue StandardError nil end
Source
# File lib/abs_api.rb, line 60 def first_observation_value(observations) return nil unless observations.is_a?(Hash) && observations.any? _key, values = observations.first value = Array(values).first return nil if value.nil? value.to_i end
Source
# File lib/abs_api.rb, line 43 def parse_latest_observation(payload) return nil unless payload.is_a?(Hash) data_sets = payload.dig("data", "dataSets") || payload["dataSets"] return nil if data_sets.nil? || data_sets.empty? data_set = data_sets[0] value = first_observation_value(data_set["observations"]) return value if value series = data_set["series"] return nil unless series.is_a?(Hash) && series.any? _series_key, entry = series.first first_observation_value(entry["observations"]) end
Source
# File lib/abs_api.rb, line 15 def population_url(region_code:, region_type: "GCCSA") key = "#{MEASURE}.#{region_type}.#{region_code}.#{FREQ}" "#{BASE_URL}/#{DATAFLOW}/#{key}?format=jsondata&detail=dataonly&lastNObservations=1" end
Source
# File lib/abs_api.rb, line 20 def region_code_for(row) code = row["region_code"].to_s.strip code = row["sa4_code"].to_s.strip if code.empty? type = row["region_type"].to_s.strip type = "GCCSA" if type.empty? { code: code, type: type } end