Class: Fontist::CLI

Inherits:
Thor
  • Object
show all
Extended by:
ThorExt::Start
Includes:
ClassOptions
Defined in:
lib/fontist/cli.rb,
lib/fontist/cli/class_options.rb

Defined Under Namespace

Modules: ClassOptions

Constant Summary collapse

STATUS_SUCCESS =
0
STATUS_UNKNOWN_ERROR =
1
STATUS_NON_SUPPORTED_FONT_ERROR =
2
STATUS_MISSING_FONT_ERROR =
3
STATUS_LICENSING_ERROR =
4
STATUS_MANIFEST_COULD_NOT_BE_FOUND_ERROR =
5
STATUS_MANIFEST_COULD_NOT_BE_READ_ERROR =
6
STATUS_FONT_INDEX_CORRUPTED =
7
STATUS_REPO_NOT_FOUND =
8
STATUS_MAIN_REPO_NOT_FOUND =
9
STATUS_REPO_COULD_NOT_BE_UPDATED =
10
STATUS_MANUAL_FONT_ERROR =
11
STATUS_SIZE_LIMIT_ERROR =
12
STATUS_FORMULA_NOT_FOUND =
13
STATUS_FONTCONFIG_NOT_FOUND =
14
STATUS_FONTCONFIG_FILE_NOT_FOUND =
15
STATUS_FONTIST_VERSION_ERROR =
15
STATUS_INVALID_CONFIG_ATTRIBUTE =
16
ERROR_TO_STATUS =
{
  Fontist::Errors::UnsupportedFontError => [STATUS_NON_SUPPORTED_FONT_ERROR],
  Fontist::Errors::MissingFontError => [STATUS_MISSING_FONT_ERROR],
  Fontist::Errors::SizeLimitError => [
    STATUS_SIZE_LIMIT_ERROR,
    :append,
    "Please specify higher `--size-limit`, or use the `--newest` or " \
    "`--smallest` options.",
  ],
  Fontist::Errors::ManualFontError => [STATUS_MANUAL_FONT_ERROR],
  Fontist::Errors::LicensingError => [STATUS_LICENSING_ERROR],
  Fontist::Errors::ManifestCouldNotBeFoundError => [STATUS_MANIFEST_COULD_NOT_BE_FOUND_ERROR,
                                                    :overwrite,
                                                    "Manifest could not be found."],
  Fontist::Errors::ManifestCouldNotBeReadError => [STATUS_MANIFEST_COULD_NOT_BE_READ_ERROR,
                                                   :overwrite,
                                                   "Manifest could not be read."],
  Fontist::Errors::FontIndexCorrupted => [STATUS_FONT_INDEX_CORRUPTED],
  Fontist::Errors::RepoNotFoundError => [STATUS_REPO_NOT_FOUND],
  Fontist::Errors::MainRepoNotFoundError => [STATUS_MAIN_REPO_NOT_FOUND],
  Fontist::Errors::FormulaNotFoundError => [STATUS_FORMULA_NOT_FOUND],
  Fontist::Errors::FontconfigNotFoundError => [STATUS_FONTCONFIG_NOT_FOUND],
  Fontist::Errors::FontconfigFileNotFoundError =>
    [STATUS_FONTCONFIG_FILE_NOT_FOUND],
  Fontist::Errors::FontistVersionError => [STATUS_FONTIST_VERSION_ERROR],
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ThorExt::Start

extended, start

Methods included from ClassOptions

#handle_class_options, included, #log_level

Class Method Details

.exit_on_failure?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/fontist/cli.rb', line 62

def self.exit_on_failure?
  false
end

Instance Method Details

#create_formula(url) ⇒ Object



217
218
219
220
221
222
223
# File 'lib/fontist/cli.rb', line 217

def create_formula(url)
  handle_class_options(options)
  require "fontist/import/create_formula"
  name = Fontist::Import::CreateFormula.new(url, options).call
  Fontist.ui.say("#{name} formula has been successfully created")
  success
end

#install(font) ⇒ Object



121
122
123
124
125
126
127
128
# File 'lib/fontist/cli.rb', line 121

def install(font)
  handle_class_options(options)
  confirmation = options[:accept_all_licenses] ? "yes" : "no"
  Fontist::Font.install(font, options.merge(confirmation: confirmation))
  success
rescue Fontist::Errors::GeneralError => e
  handle_error(e)
end

#list(font = nil) ⇒ Object



157
158
159
160
161
162
163
164
# File 'lib/fontist/cli.rb', line 157

def list(font = nil)
  handle_class_options(options)
  formulas = Fontist::Font.list(font)
  print_list(formulas)
  success
rescue Fontist::Errors::GeneralError => e
  handle_error(e)
end

#manifest_install(manifest) ⇒ Object



195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/fontist/cli.rb', line 195

def manifest_install(manifest)
  handle_class_options(options)
  instance = Fontist::Manifest.from_file(manifest)
  paths = instance.install(
    confirmation: options[:accept_all_licenses] ? "yes" : "no",
    hide_licenses: options[:hide_licenses],
  )
  print_yaml(paths.to_hash)
  success
rescue Fontist::Errors::GeneralError => e
  handle_error(e)
end

#manifest_locations(manifest) ⇒ Object



179
180
181
182
183
184
185
186
# File 'lib/fontist/cli.rb', line 179

def manifest_locations(manifest)
  handle_class_options(options)
  paths = Fontist::Manifest.from_file(manifest, locations: true)
  print_yaml(paths.to_hash)
  success
rescue Fontist::Errors::GeneralError => e
  handle_error(e)
end

#rebuild_indexObject



232
233
234
235
236
237
# File 'lib/fontist/cli.rb', line 232

def rebuild_index
  handle_class_options(options)
  Fontist::Index.rebuild
  Fontist.ui.say("Formula index has been rebuilt.")
  STATUS_SUCCESS
end

#status(font = nil) ⇒ Object



143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/fontist/cli.rb', line 143

def status(font = nil)
  handle_class_options(options)
  paths = Fontist::Font.status(font)
  if paths.empty?
    return error("No font is installed.",
                 STATUS_MISSING_FONT_ERROR)
  end

  success
rescue Fontist::Errors::GeneralError => e
  handle_error(e)
end

#uninstall(font) ⇒ Object



131
132
133
134
135
136
137
138
139
# File 'lib/fontist/cli.rb', line 131

def uninstall(font)
  handle_class_options(options)
  fonts_paths = Fontist::Font.uninstall(font)
  Fontist.ui.success("These fonts are removed:")
  Fontist.ui.success(fonts_paths.join("\n"))
  success
rescue Fontist::Errors::GeneralError => e
  handle_error(e)
end

#updateObject



167
168
169
170
171
172
173
174
175
# File 'lib/fontist/cli.rb', line 167

def update
  handle_class_options(options)
  Formula.update_formulas_repo
  Fontist.ui.success("Formulas have been successfully updated.")
  success
rescue Fontist::Errors::RepoCouldNotBeUpdatedError => e
  Fontist.ui.error(e.message)
  STATUS_REPO_COULD_NOT_BE_UPDATED
end

#versionObject



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
# File 'lib/fontist/cli.rb', line 67

def version
  handle_class_options(options)
  Fontist.ui.say("fontist: #{Fontist::VERSION}")

  # Show formulas repository information if available
  if Dir.exist?(Fontist.formulas_repo_path)
    begin
      require "git"
      repo = Git.open(Fontist.formulas_repo_path)
      repo_url = repo.config["remote.origin.url"] || Fontist.formulas_repo_url
      branch = repo.current_branch
      # Use execute.first for git gem ~> 4.0 compatibility
      log_entry = repo.log(1).execute.first
      revision = log_entry.sha[0..6]
      updated = repo.gcommit(log_entry.sha).date.strftime("%Y-%m-%d")

      Fontist.ui.say("formulas:")
      Fontist.ui.say("  repo: #{repo_url}")
      Fontist.ui.say("  version: #{Fontist.formulas_version}")
      Fontist.ui.say("  branch: #{branch}")
      Fontist.ui.say("  commit: #{revision}")
      Fontist.ui.say("  updated: #{updated}")
    rescue StandardError => e
      Fontist.ui.debug("Could not read formulas repository info: #{e.message}")
    end
  end

  STATUS_SUCCESS
end