Class: Ace::Search::Molecules::TimeFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/search/molecules/time_filter.rb

Overview

Filters files by modification time This is a molecule - composed operation for time-based filtering

Class Method Summary collapse

Class Method Details

.filter(files, since: nil, before: nil) ⇒ Array<String>

Filter files by time criteria

Parameters:

  • files (Array<String>)

    List of file paths

  • since (Time, String, nil) (defaults to: nil)

    Only files modified after this time

  • before (Time, String, nil) (defaults to: nil)

    Only files modified before this time

Returns:

  • (Array<String>)

    Filtered list of files



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ace/search/molecules/time_filter.rb', line 14

def self.filter(files, since: nil, before: nil)
  return files if since.nil? && before.nil?

  since_time = parse_time(since) if since
  before_time = parse_time(before) if before

  files.select do |file|
    next false unless File.exist?(file)

    mtime = File.mtime(file)

    passes_since = since_time.nil? || mtime >= since_time
    passes_before = before_time.nil? || mtime <= before_time

    passes_since && passes_before
  end
end

.parse_time(time_input) ⇒ Time

Parse time string or object

Parameters:

  • time_input (Time, String)

    Time to parse

Returns:

  • (Time)

    Parsed time object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/ace/search/molecules/time_filter.rb', line 35

def self.parse_time(time_input)
  return time_input if time_input.is_a?(Time)

  # Support common time formats
  case time_input
  when /^(\d+)d$/
    # Days ago: "7d" = 7 days ago
    Time.now - ($1.to_i * 24 * 60 * 60)
  when /^(\d+)h$/
    # Hours ago: "24h" = 24 hours ago
    Time.now - ($1.to_i * 60 * 60)
  when /^(\d+)m$/
    # Minutes ago: "30m" = 30 minutes ago
    Time.now - ($1.to_i * 60)
  else
    # Try to parse as ISO 8601 or standard format
    Time.parse(time_input)
  end
rescue ArgumentError => e
  warn "Failed to parse time '#{time_input}': #{e.message}"
  nil
end