Class: FindSubscriptions::CLI
- Inherits:
-
Object
- Object
- FindSubscriptions::CLI
- Defined in:
- lib/find_subscriptions/cli.rb
Overview
Command-line interface: parses options, loads CSVs, runs detectors, and reports subscriptions.
Constant Summary collapse
- SORT_PROCS =
{ 'count_asc' => ->(subs) { subs.sort_by { |sub| sub[:count] } }, 'count_desc' => ->(subs) { subs.sort_by { |sub| -sub[:count] } }, 'first_asc' => ->(subs) { subs.sort_by { |sub| sub[:since] } }, 'first_desc' => ->(subs) { subs.sort_by { |sub| sub[:since] }.reverse }, 'last_asc' => ->(subs) { subs.sort_by { |sub| sub[:until] } }, 'last_desc' => ->(subs) { subs.sort_by { |sub| sub[:until] }.reverse } }.freeze
- VALID_SORT_ORDERS =
SORT_PROCS.keys.freeze
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.run(argv) ⇒ Object
39 40 41 |
# File 'lib/find_subscriptions/cli.rb', line 39 def self.run(argv) new.run(argv) end |
Instance Method Details
#run(argv) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/find_subscriptions/cli.rb', line 43 def run(argv) , user_schemas = (argv) files = .fetch(:files) raise ArgumentError, 'No files provided' if files.empty? registry = build_registry(user_schemas) transactions = load_transactions(files, registry, [:schema]) transactions = filter_by_date_range(transactions, [:from_date], [:to_date]) payee_normalizer = PayeeNormalizer.from_yaml([:known_payees_path]) subscriptions = detect_subscriptions(transactions, payee_normalizer, ) reporter_for([:format]).print(subscriptions) end |