class LgtmHD::CLI
Constants
- CMD_RANDOM_SYNTAX
- CMD_TRANSFORM_SYNTAX
- OPTIONS_SYNTAX
Private Class Methods
destination_dir(dest_dir)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 186 def self.destination_dir(dest_dir) dest_dir ||= Dir.pwd File.expand_path(dest_dir) end
destination_file_prefix()
click to toggle source
# File lib/lgtm_hd/cli.rb, line 191 def self.destination_file_prefix LgtmHD::Configuration::OUTPUT_PREFIX + Time.now.strftime('%Y%m%d%H%M%S') end
extname(source_uri)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 181 def self.extname(source_uri) ext = File.extname(source_uri) ext.gsub(/\?.*/, '') end
source_uri(source_uri)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 177 def self.source_uri(source_uri) source_uri =~ URI::regexp ? source_uri : File.expand_path(source_uri) end
Public Instance Methods
help_the_noobie()
click to toggle source
# File lib/lgtm_hd/cli.rb, line 104 def help_the_noobie say_step "\nTo add LGTM text to image:" say_code_block CLI::CMD_TRANSFORM_SYNTAX say_step "\nTo fetch random LGTM.IN image:" say_code_block CLI::CMD_RANDOM_SYNTAX say_step "\nGlobal Options:" say_code_block CLI::OPTIONS_SYNTAX say_step "\nMore Help:" say_code_block "lgtm_hd --help" say_step "\nVisit #{LgtmHD::Configuration::MORE_HELP_URL} for development purpose or more examples\n" exit end
run()
click to toggle source
# File lib/lgtm_hd/cli.rb, line 16 def run program :name, LgtmHD::Configuration::PROGRAM_NAME program :version, LgtmHD::VERSION program :description, LgtmHD::Configuration::DESCRIPTION program :help_formatter, Commander::HelpFormatter::TerminalCompact default_command :transform global_option '-i', '--interactive', 'Turn on interactive Mode. In case you forgot all these super complexive args and options' do say "-- LGTM HD Interactive Mode --" end global_option '-d', '--dest DIR', String, 'Directory to export the LGTM image to. Default value is user\'s current working directory' global_option '-p', '--preview QUALITY', String, 'Quality of Image preview live on terminal at the end. Accepted values for QUALITY are [high, low, none]. Default value is high. Set to none for skipping' command :random do |c| c.syntax = CMD_RANDOM_SYNTAX c.summary = 'Fetch random images from LGTM.in' c.description = '' c.example 'Example', 'lgtm_hd random' c.action do |args, options| if options.interactive # Interactive mode! options.dest ||= ask('Destination Directory (Enter to skip): ') options.preview ||= ask('Image Preview Quality? [high|low|none] (Enter to skip)') end dest_dir = CLI.destination_dir(options.dest) dest_file_prefix = CLI.destination_file_prefix check_uris(dest_dir) say_step "Fetching from lgtm.in" dest_uri,image_markdown = LgtmDotIn.fetch_random_image(dest_dir,dest_file_prefix) do |url, markdown| say_step "Loading image at #{url}" end say_ok "Exported image to #{dest_uri}" show_preview dest_uri, options.preview copy_file_to_clipboard(dest_uri) say "\nOr you can copy the markdown format below provided by lgtm.in" say_code_block "#{image_markdown}" say "\nIf the image does not have LGTM texts on it, run the cmd below" say_code_block "lgtm_hd #{dest_uri}" end end command :transform do |c| c.syntax = CMD_TRANSFORM_SYNTAX c.summary = 'Generate LGTM text on top of image URL or local image File' c.description = 'The command \e[3mtransform\e[0m is the default command hence you can skip typing it instead' c.example 'Example', 'lgtm_hd http://domain.com/image.png' c.action do |args, options| # ARGS validation! if args.length >= 1 source_uri = args[0] elsif options.interactive # Interactive mode! source_uri ||= ask('Source Image (URL or Path/to/file): ') options.dest ||= ask('Destination Directory (Enter to skip): ') options.preview ||= ask('Image Preview Quality [high|low|none] (Enter to skip): ') else # Since this is the default command so we will provide a little extra care for first-time user help_the_noobie end # Validate the inputs source_uri = CLI.source_uri(source_uri) dest_dir = CLI.destination_dir(options.dest) check_uris(dest_dir, source_uri) dest_file = File.join(dest_dir, CLI.destination_file_prefix + CLI.extname(source_uri)) # Do stuff with our LGTM meme say_step "Reading and inspecting source at #{source_uri}" meme_generator = MemeGenerator.new(input_image_uri:source_uri, output_image_uri:dest_file) say_step "Transforming Image" meme_generator.draw # Export and play around with the clipboard say_step "Exporting to file" meme_generator.export do |output| say_ok "Exported LGTM image to #{output}." show_preview output, options.preview copy_file_to_clipboard output end # end of meme_generator.export block end # end of action end # end of command transform run! end
show_preview(image_path, quality)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 117 def show_preview(image_path, quality) quality ||= 'high' quality.downcase! if quality.eql? "none" then return end quality = 'high' unless quality.eql? 'low' say_step "\nImage Preview" CatpixMini::print_image image_path, { :limit_y => 1.0, :resolution => quality, :center_x => false, :center_y => true } end
Private Instance Methods
check_uris(dest_dir, source_uri = nil)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 165 def check_uris(dest_dir, source_uri = nil) begin raise ArgumentError, "Destination path for exporting image is invalid" unless File.exist?(dest_dir) && File.directory?(dest_dir) if !!source_uri raise ArgumentError, "Source image is neither proper URL nor FILE" unless source_uri =~ URI::regexp || File.exist?(source_uri) end rescue ArgumentError => e say_error e.message exit end end
copy_file_to_clipboard(output_file)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 134 def copy_file_to_clipboard(output_file) if OS.mac? then applescript "set the clipboard to (read (POSIX file \"#{output_file}\") as GIF picture)" say_ok "Copied file to OS's clipboard for direct pasting to Github comments or Slack" # Apple Script Command reference # Sample: `osascript -e 'set the clipboard to (read (POSIX file "#{output}") as JPEG picture)'` # # Currently Github allow pasting image directly to comment box. # However it does not support pure text content produced by pbcopy so we have to use direct Applescript # No Universal solution as for now. # # Apple Script reference: http://www.macosxautomation.com/applescript/imageevents/08.html else Clipboard.copy(output_file) say_ok "Copied file's path to OS's clipboard" end end
say_code_block(*args)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 159 def say_code_block(*args) args.each do |arg| say $terminal.color("#{arg}", :black, :on_white) end end
say_step(*args)
click to toggle source
# File lib/lgtm_hd/cli.rb, line 153 def say_step(*args) args.each do |arg| say $terminal.color(arg, :magenta) end end