Module: Cdss::Utils
- Included in:
- AdminCalls, Analysis, Climate, GroundWater, Parsers::BaseParser, ReferenceTables, Structures, SurfaceWater, Telemetry, WaterRights
- Defined in:
- lib/cdss/utils.rb
Overview
Provides utility methods for handling dates, query parameters, and API pagination.
This module contains helper methods used across the CDSS API client for data formatting, safe type conversion, and managing paginated responses.
Instance Method Summary collapse
-
#batch_dates(start_date, end_date) ⇒ Array<Array<Date>>
Splits a date range into yearly chunks.
-
#build_query(params = {}, encode: false) ⇒ Hash
Builds a query hash for API requests.
-
#fetch_paginated_data(endpoint:, query:) {|Hash| ... } ⇒ Array
Fetches all pages of data from a paginated API endpoint.
-
#format_date(date, special_format: false) ⇒ String?
Formats a date for API requests.
-
#format_query_param(value) ⇒ String?
Formats a query parameter value for API requests.
-
#parse_timestamp(datetime_str) ⇒ DateTime?
Safely parses a timestamp string.
-
#safe_float(value) ⇒ Float?
Safely converts a value to a float.
-
#safe_integer(value) ⇒ Integer?
Safely converts a value to an integer.
Instance Method Details
#batch_dates(start_date, end_date) ⇒ Array<Array<Date>>
Splits a date range into yearly chunks.
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/cdss/utils.rb', line 17 def batch_dates(start_date, end_date) start_date ||= Date.new(1900, 1, 1) end_date ||= Date.today start_year = start_date.year end_year = end_date.year if start_year == end_year [[start_date, end_date]] else dates = [] # First year dates << [start_date, Date.new(start_year, 12, 31)] # Middle years ((start_year + 1)...end_year).each do |year| dates << [Date.new(year, 1, 1), Date.new(year, 12, 31)] end # Last year dates << [Date.new(end_year, 1, 1), end_date] dates end end |
#build_query(params = {}, encode: false) ⇒ Hash
Builds a query hash for API requests.
59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/cdss/utils.rb', line 59 def build_query(params = {}, encode: false) base_query = { format: "json" } params.each do |key, value| formatted_value = format_query_param(value) if formatted_value base_query[key] = encode ? URI.encode_www_form_component(formatted_value) : formatted_value end end base_query end |
#fetch_paginated_data(endpoint:, query:) {|Hash| ... } ⇒ Array
Fetches all pages of data from a paginated API endpoint.
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/cdss/utils.rb', line 133 def fetch_paginated_data(endpoint:, query:) page_size = 50_000 page_index = 1 results = [] loop do query = query.merge(pageSize: page_size, pageIndex: page_index) response = get(endpoint, query: query) data = handle_response(response) records = yield(data) break if records.empty? results.concat(records) break if records.size < page_size page_index += 1 end results end |
#format_date(date, special_format: false) ⇒ String?
Formats a date for API requests.
79 80 81 82 83 84 |
# File 'lib/cdss/utils.rb', line 79 def format_date(date, special_format: false) return nil unless date date = date.strftime("%m-%d-%Y") special_format ? date.gsub("-", "%2F") : date end |
#format_query_param(value) ⇒ String?
Formats a query parameter value for API requests.
44 45 46 47 48 49 |
# File 'lib/cdss/utils.rb', line 44 def format_query_param(value) return nil if value.nil? return value.join(",") if value.is_a?(Array) value.to_s end |
#parse_timestamp(datetime_str) ⇒ DateTime?
Safely parses a timestamp string.
92 93 94 95 96 |
# File 'lib/cdss/utils.rb', line 92 def (datetime_str) DateTime.parse(datetime_str) if datetime_str rescue ArgumentError nil end |
#safe_float(value) ⇒ Float?
Safely converts a value to a float.
104 105 106 107 108 |
# File 'lib/cdss/utils.rb', line 104 def safe_float(value) Float(value) rescue TypeError, ArgumentError nil end |
#safe_integer(value) ⇒ Integer?
Safely converts a value to an integer.
116 117 118 119 120 |
# File 'lib/cdss/utils.rb', line 116 def safe_integer(value) Integer(value) rescue TypeError, ArgumentError nil end |