Class: Ace::Search::Molecules::TimeFilter
- Inherits:
-
Object
- Object
- Ace::Search::Molecules::TimeFilter
- 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
-
.filter(files, since: nil, before: nil) ⇒ Array<String>
Filter files by time criteria.
-
.parse_time(time_input) ⇒ Time
Parse time string or object.
Class Method Details
.filter(files, since: nil, before: nil) ⇒ Array<String>
Filter files by time criteria
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
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.}" nil end |