module Attio::Concerns::TimeFilterable::ClassMethods
def activity_metrics(period, **opts)
-
(Hash)
- Metrics about records in the period
Parameters:
-
period
(Util::TimePeriod
) -- The time period
def activity_metrics(period, **opts) created = in_period(period, date_field: :created_at, **opts) updated = in_period(period, date_field: :updated_at, **opts) { period: period.label, created_count: created.size, updated_count: updated.size, total_activity: (created + updated).uniq.size } end
def created_in_month(year, month, **opts)
-
(Array)
- Records created in that month
Parameters:
-
month
(Integer
) -- The month (1-12) -
year
(Integer
) -- The year
def created_in_month(year, month, **opts) in_period(Util::TimePeriod.month(year, month), date_field: :created_at, **opts) end
def created_in_quarter(year, quarter, **opts)
-
(Array)
- Records created in that quarter
Parameters:
-
quarter
(Integer
) -- The quarter (1-4) -
year
(Integer
) -- The year
def created_in_quarter(year, quarter, **opts) in_period(Util::TimePeriod.quarter(year, quarter), date_field: :created_at, **opts) end
def created_in_year(year, **opts)
-
(Array)
- Records created in that year
Parameters:
-
year
(Integer
) -- The year
def created_in_year(year, **opts) in_period(Util::TimePeriod.year(year), date_field: :created_at, **opts) end
def created_this_month(**opts)
-
(Array)
- Records created in current month
def created_this_month(**opts) in_period(Util::TimePeriod.current_month, date_field: :created_at, **opts) end
def created_this_year(**opts)
-
(Array)
- Records created in current year
def created_this_year(**opts) in_period(Util::TimePeriod.current_year, date_field: :created_at, **opts) end
def created_year_to_date(**opts)
-
(Array)
- Records created YTD
def created_year_to_date(**opts) in_period(Util::TimePeriod.year_to_date, date_field: :created_at, **opts) end
def in_period(period, date_field: :created_at, **opts)
-
(Array)
- Records within the period
Parameters:
-
date_field
(Symbol
) -- The field to check (default: :created_at) -
period
(Util::TimePeriod
) -- The time period to filter by
def in_period(period, date_field: :created_at, **opts) all(**opts).select do |record| # Try accessor method first, then bracket notation date_value = if record.respond_to?(date_field) record.send(date_field) else record[date_field] end if date_value parsed_date = date_value.is_a?(String) ? Time.parse(date_value) : date_value period.includes?(parsed_date) else false end end end
def recently_created(days = 7, **opts)
-
(Array)
- Recently created records
Parameters:
-
days
(Integer
) -- Number of days to look back
def recently_created(days = 7, **opts) in_period(Util::TimePeriod.last_days(days), date_field: :created_at, **opts) end
def recently_updated(days = 7, **opts)
-
(Array)
- Recently updated records
Parameters:
-
days
(Integer
) -- Number of days to look back
def recently_updated(days = 7, **opts) in_period(Util::TimePeriod.last_days(days), date_field: :updated_at, **opts) end