Class: Chronicle::ETL::CLI::Main

Inherits:
CLIBase
  • Object
show all
Defined in:
lib/chronicle/etl/cli/main.rb

Overview

Main entrypoint for CLI app

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.exit_on_failure?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/chronicle/etl/cli/main.rb', line 44

def self.exit_on_failure?
  true
end

.start(given_args = ARGV, config = {}) ⇒ Object

Entrypoint for the CLI



34
35
36
37
38
39
40
41
42
# File 'lib/chronicle/etl/cli/main.rb', line 34

def self.start(given_args = ARGV, config = {})
  # take a subcommand:command and splits them so Thor knows how to hand off to the subcommand class
  if given_args.any? && given_args[0].include?(':')
    commands = given_args.shift.split(':')
    given_args = given_args.unshift(commands).flatten
  end

  super(given_args, config)
end

Instance Method Details

#help(meth = nil, _subcommand = false) ⇒ Object

Displays help options for chronicle-etl



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/chronicle/etl/cli/main.rb', line 55

def help(meth = nil, _subcommand = false)
  if meth && !respond_to?(meth)
    klass, task = ::Thor::Util.find_class_and_task_by_namespace("#{meth}:#{meth}")
    klass.start(['-h', task].compact, shell:)
  else
    shell.say 'ABOUT:'.bold
    shell.say "  #{'chronicle-etl'.italic} is a toolkit for extracting and working with your digital"
    shell.say '  history. 📜'
    shell.say
    shell.say "  A job #{'extracts'.underline} personal data from a source, #{'transforms'.underline} it (Chronicle"
    shell.say "  Schema or preserves raw data), and then #{'loads'.underline} it to a destination. Use"
    shell.say '  built-in extractors (json, csv, stdin) and loaders (csv, json, table,'
    shell.say '  rest) or use plugins to connect to third-party services.'
    shell.say
    shell.say '  Plugins: https://github.com/chronicle-app/chronicle-etl#currently-available'
    shell.say
    shell.say 'USAGE:'.bold
    shell.say '  # Basic job usage:'.italic.light_black
    shell.say '  $ chronicle-etl --extractor NAME --transformer NAME --loader NAME'
    shell.say
    shell.say '  # Read test.csv and display it to stdout as a table:'.italic.light_black
    shell.say '  $ chronicle-etl --extractor csv --input data.csv --loader table'
    shell.say
    shell.say '  # Show available plugins:'.italic.light_black
    shell.say '  $ chronicle-etl plugins:list'
    shell.say
    shell.say '  # Save an access token as a secret and use it in a job:'.italic.light_black
    shell.say '  $ chronicle-etl secrets:set pinboard access_token username:foo123'
    shell.say '  $ chronicle-etl secrets:list'
    shell.say '  $ chronicle-etl -e pinboard --since 1mo'
    shell.say
    shell.say '  # Show full job options:'.italic.light_black
    shell.say '  $ chronicle-etl jobs help run'
    shell.say
    shell.say 'FULL DOCUMENTATION:'.bold
    shell.say '  https://github.com/chronicle-app/chronicle-etl'.blue
    shell.say

    list = []
    ::Thor::Util.thor_classes_in(Chronicle::ETL::CLI).each do |thor_class|
      list += thor_class.printable_tasks(false)
    end
    list.sort! { |a, b| a[0] <=> b[0] }
    list.unshift ['help', '# This help menu']

    shell.say
    shell.say 'ALL COMMANDS:'.bold
    shell.print_table(list, indent: 2, truncate: true)
    shell.say
    shell.say 'VERSION:'.bold
    shell.say "  #{Chronicle::ETL::VERSION}"
    shell.say
    shell.say '  Display current version:'.italic.light_black
    shell.say '  $ chronicle-etl --version'
  end
end

#versionObject



50
51
52
# File 'lib/chronicle/etl/cli/main.rb', line 50

def version
  shell.say "chronicle-etl #{Chronicle::ETL::VERSION}"
end