lib/tldr/cli/commands.rb in tldr-cli-0.2.0 vs lib/tldr/cli/commands.rb in tldr-cli-0.3.0
- old
+ new
@@ -13,10 +13,13 @@
ENV.fetch('TLDR_URL_BASE', 'https://raw.githubusercontent.com/tldr-pages/tldr/main/pages')
URL_SUFFIX =
ENV.fetch('TLDR_URL_SUFFIX', '.md')
+ LOCAL_BASE =
+ ENV.fetch('TLDR_LOCAL_BASE', "#{Dir.home}/.config/tldr/pages")
+
usage do
program 'tldr'
banner "usage: #{program} [-v] [OPTION]... SEARCH"
end
@@ -80,10 +83,19 @@
default 'common'
permit %w[linux osx sunos windows common]
desc 'select platform, supported are linux / osx / sunos / windows / common'
end
+ option :source do
+ optional
+ short '-s'
+ long '--source=string'
+ default 'local'
+ permit %w[local remote]
+ desc 'select page source to be local or remote (default: local)'
+ end
+
argument :query do
arity zero_or_more
end
def run
@@ -94,15 +106,21 @@
elsif params[:help]
print help
elsif params[:version]
version
elsif params[:query]
- query, lang, platform =
- params.to_h.values_at(:query, :lang, :platform)
+ query, lang, platform, source =
+ params.to_h.values_at(:query, :lang, :platform, :source)
page_path = "/#{platform}/#{query}"
+ if source == 'local' && local_page?(local_path(page_path, lang: lang))
+ content = File.read(local_path(page_path, lang: lang))
+ render_markdown(content)
+ return
+ end
+
response = Faraday.get(remote_path(page_path, lang: lang))
return not_found unless response.success?
render_markdown(response.body)
else
@@ -127,9 +145,18 @@
def not_found
puts <<~MESSAGE
This page doesn't exist yet!
Submit new pages here: https://github.com/tldr-pages/tldr
MESSAGE
+ end
+
+ def local_page?(page_path)
+ File.exist?(page_path)
+ end
+
+ def local_path(fragment, lang: 'en', relative: false)
+ lang = lang == 'en' ? '' : ".#{lang}"
+ "#{relative ? '' : LOCAL_BASE}#{lang}#{fragment}#{URL_SUFFIX}"
end
def remote_path(fragment, lang: 'en', relative: false)
lang = lang == 'en' ? '' : ".#{lang}"
"#{relative ? '' : URL_BASE}#{lang}#{fragment}#{URL_SUFFIX}"