module Attio::Concerns::TimeFilterable::ClassMethods

def activity_metrics(period, **opts)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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)

Returns:
  • (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