Module: Mailmate Private

Defined in:
lib/mailmate.rb,
lib/mailmate.rb,
lib/mailmate/ast.rb,
lib/mailmate/lexer.rb,
lib/mailmate/config.rb,
lib/mailmate/parser.rb,
lib/mailmate/message.rb,
lib/mailmate/mid_url.rb,
lib/mailmate/version.rb,
lib/mailmate/cli/send.rb,
lib/mailmate/identity.rb,
lib/mailmate/evaluator.rb,
lib/mailmate/operators.rb,
lib/mailmate/attributes.rb,
lib/mailmate/cli/modify.rb,
lib/mailmate/cli/search.rb,
lib/mailmate/eml_lookup.rb,
lib/mailmate/cli/message.rb,
lib/mailmate/cli/discover.rb,
lib/mailmate/index_reader.rb,
lib/mailmate/var_resolver.rb,
lib/mailmate/header_reader.rb,
lib/mailmate/mailbox_graph.rb,
lib/mailmate/platform_error.rb,
lib/mailmate/source_resolver.rb,
lib/mailmate/duplicate_scanner.rb,
lib/mailmate/filter_classifier.rb,
lib/mailmate/applescript_driver.rb

Overview

This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.

FilterClassifier — walks an AST and answers questions about what’s required to evaluate it. Used by ‘mailmate-search` to pick the cheapest `.eml` loading tier per query:

:index   — every path is index-backed; never open the .eml at all.
:header  — every path resolves from headers (or index); read header block only.
:full    — at least one path needs body content; full Mail.read.

Also extracts ASCII string literals from top-level AND-chained header-path comparisons so the raw-bytes pre-filter can short-circuit without parsing.

Defined Under Namespace

Modules: AST, Attributes, CLI, DuplicateScanner, EmlLookup, FilterClassifier, HeaderReader, Identity, Lexer, MidUrl, Operators Classes: AppleScriptDriver, Config, Evaluator, IndexReader, MailboxGraph, Message, Parser, PlatformError, SourceResolver, VarResolver

Constant Summary collapse

VERSION =
"0.1.0"

Class Method Summary collapse

Class Method Details

.compile_filter(str) ⇒ Object



53
54
55
# File 'lib/mailmate.rb', line 53

def self.compile_filter(str)
  Parser.parse(Lexer.lex(str))
end

.configObject

Convenience: ‘Mailmate.config.imap_root` etc.



131
132
133
# File 'lib/mailmate/config.rb', line 131

def self.config
  Config.instance
end

.localize(time) ⇒ Object

Convert a Time to the configured display zone. If ‘display_timezone` is set in config, use it as the offset (e.g. “-07:00”). Otherwise fall back to the system local zone (which honors macOS’s DST rules, so Mountain users get MDT in summer and MST in winter).



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/mailmate.rb', line 61

def self.localize(time)
  return nil unless time
  t = time.respond_to?(:to_time) ? time.to_time : time
  zone = config.display_timezone
  if zone && !zone.empty?
    t.getlocal(zone)
  else
    t.getlocal
  end
rescue StandardError
  time
end