Class: StandupMD::Cli

Inherits:
Object
  • Object
show all
Includes:
Helpers
Defined in:
lib/standup_md/cli.rb,
lib/standup_md/cli/helpers.rb

Overview

Class for handing the command-line interface.

Defined Under Namespace

Modules: Helpers

Constant Summary collapse

ZSH_COMPLETION_FILE =
::File.expand_path(
  ::File.join(__dir__, "..", "..", "completion", "zsh", "_standup")
).freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helpers

#print

Constructor Details

#initialize(options = [], load_config: true) ⇒ Cli

Constructor. Sets defaults.

Parameters:

  • options (Array) (defaults to: [])


118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/standup_md/cli.rb', line 118

def initialize(options = [], load_config: true)
  @config = self.class.config
  @preference_file_loaded = false
  @file_date_argument = false
  @zsh_completion_requested = false
  @options = options
  return if load_zsh_completion_request(options)

  load_preferences if load_config
  load_runtime_preferences(options)
  return if zsh_completion_requested?

  @file = find_file
  @file&.load
  @entry = @file.nil? ? nil : new_entry(@file)
end

Instance Attribute Details

#entryStandupMD::Entry (readonly)

The entry searched for, usually today.

Returns:



84
85
86
# File 'lib/standup_md/cli.rb', line 84

def entry
  @entry
end

#fileStandupMD::File (readonly)

The file loaded.

Returns:



96
97
98
# File 'lib/standup_md/cli.rb', line 96

def file
  @file
end

#optionsArray (readonly)

Arguments passed at runtime.

Returns:

  • (Array)

    ARGV



90
91
92
# File 'lib/standup_md/cli.rb', line 90

def options
  @options
end

Class Method Details

.configStandupMD::Config::Cli

Access to the class’s configuration.



20
21
22
# File 'lib/standup_md/cli.rb', line 20

def self.config
  @config ||= StandupMD.config.cli
end

.echo(msg) ⇒ nil

Prints output if verbose is true.

Returns:

  • (nil)


28
29
30
# File 'lib/standup_md/cli.rb', line 28

def self.echo(msg)
  puts msg if config.verbose
end

.execute(options = []) ⇒ Object

Creates an instance of StandupMD and runs what the user requested.



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/standup_md/cli.rb', line 64

def self.execute(options = [])
  new(options).tap do |exe|
    if exe.zsh_completion_requested?
      puts zsh_completion_instructions
      next
    end

    exe.write_file if exe.write?
    if config.print
      exe.print(exe.entry)
    elsif config.edit
      exe.edit
    end
  end
end

.zsh_completion_instructionsString

Prints zsh completion setup instructions.

Returns:

  • (String)


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/standup_md/cli.rb', line 36

def self.zsh_completion_instructions
  completion_dir = ::File.dirname(ZSH_COMPLETION_FILE)

  <<~INSTRUCTIONS
    Zsh completion file:
      #{ZSH_COMPLETION_FILE}

    To load it directly, add this before compinit runs:

      fpath=("#{completion_dir}" $fpath)
      autoload -Uz compinit
      compinit

    Or symlink it into your own completion directory:

      mkdir -p ~/.zsh/completions
      ln -sf "#{ZSH_COMPLETION_FILE}" ~/.zsh/completions/_standup

    Then make sure that directory is in fpath before compinit runs:

      fpath=(~/.zsh/completions $fpath)
      autoload -Uz compinit
      compinit
  INSTRUCTIONS
end

Instance Method Details

#echo(msg) ⇒ nil

Quick access to Cli.echo.

Returns:

  • (nil)


186
187
188
# File 'lib/standup_md/cli.rb', line 186

def echo(msg)
  self.class.echo(msg)
end

#editnil

Opens the file in an editor. Abandons the script.

Returns:

  • (nil)


160
161
162
163
# File 'lib/standup_md/cli.rb', line 160

def edit
  echo "Opening file in #{@config.editor}"
  exec("#{@config.editor} #{file.name}")
end

#file_date_argument?Boolean

Was a file date argument passed?

Returns:

  • (Boolean)


102
103
104
# File 'lib/standup_md/cli.rb', line 102

def file_date_argument?
  @file_date_argument
end

#load_preferencesnil

Load the preference file.

Returns:

  • (nil)


139
140
141
142
143
144
145
146
# File 'lib/standup_md/cli.rb', line 139

def load_preferences
  if ::File.exist?(@config.preference_file)
    ::StandupMD.load_config_file(@config.preference_file)
    @preference_file_loaded = true
  else
    echo "Preference file #{@config.preference_file} does not exist."
  end
end

#preference_file_loaded?boolean

Has the preference file been loaded?

Returns:

  • (boolean)


152
153
154
# File 'lib/standup_md/cli.rb', line 152

def preference_file_loaded?
  @preference_file_loaded
end

#write?Boolean

Should the file be written?

Returns:

  • (Boolean)


178
179
180
# File 'lib/standup_md/cli.rb', line 178

def write?
  !!(@config.write && !read_only? && entry)
end

#write_fileBoolean

Writes entries to the file.

Returns:

  • (Boolean)

    true if file was written



169
170
171
172
# File 'lib/standup_md/cli.rb', line 169

def write_file
  echo "Writing file #{file.name}"
  file.write
end

#zsh_completion_requested?Boolean

Was zsh completion output requested?

Returns:

  • (Boolean)


110
111
112
# File 'lib/standup_md/cli.rb', line 110

def zsh_completion_requested?
  @zsh_completion_requested
end