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}"