Commit Graph

93 Commits

Author SHA1 Message Date
Jeremiah Russell
df9d2b6c8a 🔧 fix: address clippy warnings after refactoring
- Change &PathBuf to &Path parameter in plan_credential_file_operation
- Use inline format string in log message
- Both formatting and linting now clean
2025-10-21 14:48:31 +01:00
Jeremiah Russell
aaa4ebcbde ♻️ refactor: reduce cognitive complexity of plan_operations and execute_operation
## Refactoring Changes

### plan_operations function:
- Split monolithic function into focused single-purpose methods
- Extract plan_config_directory, plan_credential_file_operation, etc.
- Add check_file_conflicts helper to eliminate repetitive error checking
- Fix should_backup logic (was always returning true)

### execute_operation function:
- Replace large match statement with focused execution methods
- Extract execute_create_directory, execute_copy_file, etc.
- Add handle_existing_file helper for backup/interactive logic
- Add prompt_for_overwrite and apply_permissions_if_needed helpers

## Benefits:
- Each function now has single responsibility
- Eliminated code duplication in conflict checking and interactive prompts
- Reduced cyclomatic complexity from ~15 to 2-3 per function
- Improved testability and maintainability
- All tests continue to pass
2025-10-21 14:48:31 +01:00
Jeremiah Russell
5bcfc8fd29 🐛 fix: allow init command to run without existing config file
- Move init command handling before config loading in CLI dispatcher
- Prevents init from failing when no configuration exists yet
- Fixes CircleCI test failures where init was trying to load ~/.cull-gmail/cull-gmail.toml
- All integration tests now pass in CI environment
2025-10-21 14:48:31 +01:00
Jeremiah Russell
b33458cf3e 🎨 style: apply rustfmt formatting to test assertions 2025-10-21 14:48:31 +01:00
Jeremiah Russell
3dcd229ee9 🐛 fix: replace hardcoded paths in tests with temp directories for CI compatibility 2025-10-21 14:48:31 +01:00
Jeremiah Russell
8f79081b4f 🔧 fix: address clippy warnings and improve code formatting 2025-10-21 14:48:31 +01:00
Jeremiah Russell
2cfd16c8ac 🧪 test(init): unit tests for planning and file IO 2025-10-21 14:48:31 +01:00
Jeremiah Russell
0a047dd547 🏗️ feat(init): implement plan and apply operations
- Add comprehensive Operation enum for file/directory operations
- Implement path resolution with h:, c:, r: prefix support
- Create default config and rules file templates
- Add interactive prompts for credential file setup
- Support dry-run mode with detailed operation preview
- Include progress bar for operation execution
- Implement secure file permissions (0600 for credentials, 0700 for tokens)
- Add timestamped backup functionality for existing files
- Support force overwrite and interactive conflict resolution
2025-10-21 14:48:31 +01:00
Jeremiah Russell
fd70ef9511 feat(cli): scaffold InitCli subcommand and clap wiring 2025-10-21 14:48:31 +01:00
Jeremiah Russell
171f441f1d 🔧 fix: Resolve clippy warnings and formatting issues
- Remove unnecessary borrowing where values can be used directly
- Use variables directly in format strings for better readability
- Apply consistent code formatting per rustfmt standards
- All clippy warnings resolved with -D warnings flag
- Code now follows Rust idioms and best practices
2025-10-21 07:47:55 +01:00
Jeremiah Russell
2bee42d7ba 🔐 feat: Add token export/import for ephemeral environments
- Add token CLI subcommand with export/import operations
- Enable OAuth2 token persistence across clean environments
- Support for containers, CI/CD, and ephemeral compute workflows
- Compress tokens with gzip and encode as base64 for env vars
- Automatic token restoration from CULL_GMAIL_TOKEN_CACHE
- Secure file permissions (600) on restored tokens
- Add comprehensive error handling for token operations
- Update dependencies: base64, flate2, serde_json

This feature enables cull-gmail to run in ephemeral environments
like Docker containers and CI/CD pipelines without re-authentication
by exporting tokens once and restoring them via environment variables.
2025-10-21 07:47:55 +01:00
Jeremiah Russell
3979379795 🎨 style(cli): apply rustfmt formatting standards to CLI modules
- Apply cargo fmt to ensure consistent code formatting across CLI modules
- Fix trailing whitespace in documentation comments
- Optimize comment formatting and indentation
- All clippy checks pass with no warnings
- Documentation generates cleanly with strict nightly flags
- All tests continue to pass after formatting changes
2025-10-20 22:27:38 +01:00
Jeremiah Russell
97947033ce 📝 docs(cli): add comprehensive documentation for rules module
- Add extensive module-level documentation explaining rule-based message management
- Document complete rule configuration and execution workflow
- Include comprehensive TOML configuration examples with retention periods
- Add detailed safety features and error handling documentation
- Document subcommand architecture and delegation patterns
- Include practical usage examples for configuration and execution
- Add comprehensive method documentation with operation flows and side effects
- Document automatic configuration fallback and validation systems
2025-10-20 22:27:38 +01:00
Jeremiah Russell
3a2f2ad31b 📝 docs(cli): add comprehensive documentation for labels and messages modules
- Add extensive module-level documentation for labels_cli with usage examples
- Document complete messages_cli module with Gmail query syntax guide
- Add comprehensive struct and method documentation with safety considerations
- Include detailed parameter explanations and error handling guidance
- Document action types with safety levels and reversibility information
- Add practical usage patterns and safety recommendations
- Include extensive examples of Gmail query syntax and filtering options
2025-10-20 22:27:38 +01:00
Jeremiah Russell
a35b5f9248 📝 docs(cli): add comprehensive module documentation and function docs
- Add extensive module-level documentation explaining CLI architecture
- Document all CLI structs with detailed field explanations and usage examples
- Add comprehensive function documentation covering all main workflow functions
- Include safety considerations, error handling, and configuration guidance
- Fix configuration parameter name: credentials -> credential_file
- Document logging levels, exit codes, and environment variable overrides
- Add detailed explanations of rule processing workflow and safety features
2025-10-20 22:27:38 +01:00
Jeremiah Russell
8f908df8f3 refactor(rules): apply idiomatic patterns and resolve clippy warnings
- Change add_rule parameter from Option<&String> to Option<&str> for better ergonomics
- Use iterator methods (flat_map, any) instead of manual loops and collections
- Collapse nested if conditions using let-else patterns
- Use format string interpolation instead of separate arguments
- Avoid unnecessary String allocations in label comparisons
- Update CLI code to use as_deref() for Option<String> to Option<&str> conversion
- Update all documentation examples and tests to match new API
- All functionality preserved; API is more idiomatic and efficient
2025-10-19 08:52:23 +01:00
Jeremiah Russell
5c2124ead4 🐛 fix(cli): correct error mapping in add_cli
- fix error mapping for message age creation
- use direct error propagation instead of config error mapping
2025-10-19 07:54:12 +01:00
Jeremiah Russell
dd16da8740 🐛 fix(rules): handle message age creation error
- handle the error when creating MessageAge and return a ConfigError::Message
2025-10-19 07:54:12 +01:00
Jeremiah Russell
754e5229ae ♻️ refactor(cli): extract action execution into a function
- move action execution logic into `execute_action` function
- improve code readability and reduce duplication
2025-10-16 17:28:55 +01:00
Jeremiah Russell
9116e7c406 ♻️ refactor(cli): rename get_config to get_rules
- rename function to better reflect its purpose
2025-10-16 17:28:55 +01:00
Jeremiah Russell
f1e873009b ♻️ refactor(cli): extract rule execution to separate function
- move rule execution logic to run_rules function
- this improves code organization and testability
2025-10-16 17:28:55 +01:00
Jeremiah Russell
0136d7da09 feat(cli): add default subcommand for rule execution
- Add a default subcommand that executes rules based on configuration.
- Load rules and configuration to determine execution behavior.
- Implement dry run functionality to prevent unintended actions.
2025-10-16 17:28:55 +01:00
Jeremiah Russell
44b98d0657 feat(cli): load configurations from toml file
- load configurations from `cull-gmail.toml`
- set default value for rules in config
2025-10-16 11:21:40 +01:00
Jeremiah Russell
66b7c820d7 ♻️ refactor(cli): use ClientConfig struct for gmail client
- use ClientConfig struct instead of credential string
- load config from file and env vars
- simplify config loading and client creation
2025-10-16 11:21:40 +01:00
Jeremiah Russell
c53ad65368 feat(cli): add config file support
- load configuration from a file
- use config crate for config loading
- allow overriding config with environment variables
- set default credential path
- fix error handling for config loading
2025-10-15 16:08:38 +01:00
Jeremiah Russell
2fa7cd21ab ♻️ refactor(rules): remove credentials config
- remove unused credentials configuration
- remove credentials file setting/getting logic
- rename config file to rules.toml
2025-10-15 14:30:07 +01:00
Jeremiah Russell
5905a6fb54 ♻️ refactor(cli): remove config from run args
- remove config from run args to load inside functions
- load credential.json directly instead of config file
2025-10-15 14:03:08 +01:00
Jeremiah Russell
972f3bb264 ♻️ refactor(cli): remove redundant Rules import
- remove redundant `Rules` import from several files in `src/cli`
- this change simplifies the code by removing unnecessary imports
2025-10-15 12:39:20 +01:00
Jeremiah Russell
0bc71f5b75 ♻️ refactor: rename Config to Rules
- rename Config struct to Rules to better reflect its purpose
- update all references to Config to Rules
2025-10-15 12:39:20 +01:00
Jeremiah Russell
3beab7d82d ♻️ refactor(cli): restructure cli commands for better organization
- rename `label_cli.rs` to `labels_cli.rs`
- rename `message_cli.rs` to `messages_cli.rs`
- move config related commands to `rules config` subcommand
- introduce `rules run` subcommand
2025-10-15 11:00:14 +01:00
Jeremiah Russell
37d02bd0bf 🐛 fix(gmail): display message date and subject
- Refactor log_message_subjects to log_messages for clarity
- Simplify date and subject retrieval in log_messages
- Use MessageSummary's list_date_and_subject for logging
- Elide subject in MessageSummary for consistent display
2025-10-14 17:10:21 +01:00
Jeremiah Russell
f9e86bf8d9 ♻️ refactor(cli): rename run_cli to rules_cli
- rename run_cli files to rules_cli
- reflect changes in module imports and subcommand names
2025-10-14 17:10:21 +01:00
Jeremiah Russell
f7db97dd07 ♻️ refactor(cli): consolidate message handling and remove delete command
- 【Refactor】: Move `set_parameters` function from `Message` trait implementation for `DeleteCli` to `MessageCli` to avoid duplication.
- 【Feature】: Add `Delete` action to `MessageAction` enum to allow direct deletion of messages.
- 【Cleanup】: Remove `delete_cli.rs` and `message_trait.rs` as their functionalities are now integrated into `message_cli.rs`.
2025-10-14 17:10:21 +01:00
Jeremiah Russell
f3a1edaf1f ♻️ refactor(cli): refactor message handling and remove trash command
- 【Refactor】: Moved trash functionality into the message subcommand for better organization.
- 【Refactor】: Removed the separate `trash_cli` module.
- 【Feature】: Added a `Trash` action to the `MessageAction` enum.
- 【Refactor】: Modified `MessageCli::run` to handle the new `Trash` action.
2025-10-14 17:10:21 +01:00
Jeremiah Russell
1052eeb22e feat(cli): enhance cli subcommand ordering and grouping
- improve subcommand organization for better user experience
- implement display_order attribute for logical ordering of subcommands
- introduce next_help_heading for grouping subcommands under meaningful titles
2025-10-14 17:10:21 +01:00
Jeremiah Russell
02e58275e7 feat(cli): add message list subcommand
- add subcommand to list messages from gmail
- implement message listing functionality
- add ability to specify query and number of pages
2025-10-14 17:10:21 +01:00
Jeremiah Russell
1eefad2cff feat(cli): add configuration options for message listing
- Add max_results, pages, labels, and query options to message CLI
- Allow users to customize message retrieval with flags
2025-10-14 17:10:21 +01:00
Jeremiah Russell
b6a53461ce 🐛 fix(cli): correct label adding to use non-async function
- fix label adding to use non-async function
2025-10-14 07:41:39 +01:00
Jeremiah Russell
7b9be5f243 feat(cli): create message trait to share list parameters
- create message trait to share list parameters
- implement message trait for message and delete cli
2025-10-14 07:41:39 +01:00
Jeremiah Russell
e488cd25cf ♻️ refactor(cli): streamline message retrieval and parameter setting
- extract parameter setting logic into a separate function `set_parameters`
- consolidate label adding, query setting, and max results setting into `set_parameters`
- rename `run` to `get_messages` for clarity
- add methods for retrieving labels, query, and max_results
2025-10-14 07:41:39 +01:00
Jeremiah Russell
fe4a85f5e3 ♻️ refactor(cli): extract parameter setting logic
- move parameter setting into a separate function
- create getter functions for struct members
2025-10-14 07:41:39 +01:00
Jeremiah Russell
7e1d07b3ab feat(cli): add message trait for cli subcommands
- introduce a trait to handle message-related operations
- implement the trait for config, delete, label, message, run, and trash subcommands
2025-10-14 07:41:39 +01:00
Jeremiah Russell
ec5b7493c5 feat(cli): implement batch actions for trashing and deleting
- refactor `execute_action` to use `batch_trash` and `batch_delete`
- remove individual message trashing/deletion in favor of batch processing
- streamline action execution based on `self.execute` flag
2025-10-14 07:41:39 +01:00
Jeremiah Russell
011da42664 ♻️ refactor(cli): remove unused Delete import
- remove unused `Delete` import from `cull_gmail`
2025-10-14 07:41:39 +01:00
Jeremiah Russell
e02f0ee3d1 ♻️ refactor(cli): remove unused Delete, Trash trait
- Remove Delete and Trash traits from cull_gmail
- Use RuleProcessor instead of Delete and Trash traits
2025-10-14 07:41:39 +01:00
Jeremiah Russell
35235afc26 🐛 fix(cli): fix rule execution and client handling
- modify the `run` function to accept a mutable `GmailClient` reference
- set the rule and execute flag on the client before executing the action
- remove the `RuleProcessor` and directly use the `GmailClient` for actions
- this simplifies the code and ensures the client is properly configured for each rule
2025-10-14 07:41:39 +01:00
Jeremiah Russell
7c397c84d9 ♻️ refactor(cli): rename Processor to RuleProcessor
- rename `Processor` struct to `RuleProcessor` for better clarity
- update all references to reflect the change
2025-10-14 07:41:39 +01:00
Jeremiah Russell
5331551eea ♻️ refactor(cli): use mutable client for subcommands
- change `client` to mutable to allow modification in subcommands
- update subcommands to use the mutable `client`
2025-10-14 07:41:39 +01:00
Jeremiah Russell
c42f19d19a 🐛 fix(trash): fix trash command with new gmail client
- adapt trash command to use new gmail client methods
- remove unused `Trash` struct
2025-10-14 07:41:39 +01:00
Jeremiah Russell
bc2b4dab0f ♻️ refactor(message_cli): simplify message processing
- remove MessageList struct and move its functionality to GmailClient
- this reduces complexity and streamlines the message processing flow
2025-10-14 07:41:39 +01:00