class Pry::Command::Gist
def clipboard_content(content)
def clipboard_content(content) ::Gist.copy(content) output.puts "Copied content to clipboard!" end
def comment_expression_result_for_gist(result)
def comment_expression_result_for_gist(result) content = "" result.lines.each_with_index do |line, index| if index == 0 content << "# => #{line}" else content << "# #{line}" end end content end
def gist_content(content, filename)
def gist_content(content, filename) response = ::Gist.gist(content, filename: filename || "pry_gist.rb", public: !!opts[:p]) if response url = response['html_url'] message = "Gist created at URL #{url}" begin ::Gist.copy(url) message << ", which is now in the clipboard." rescue ::Gist::ClipboardError end output.puts message end end
def input_content
def input_content content = "" CodeCollector.input_expression_ranges.each do |range| input_expressions = _pry_.input_ring[range] || [] Array(input_expressions).each_with_index do |code, index| corrected_index = index + range.first if code && code != "" content << code if code !~ /;\Z/ content << "#{comment_expression_result_for_gist(_pry_.config.gist.inspecter.call(_pry_.output_ring[corrected_index]))}" end end end end content end
def options(opt)
def options(opt) CodeCollector.inject_options(opt) opt.on :login, "Authenticate the gist gem with GitHub" opt.on :p, :public, "Create a public gist (default: false)", default: false opt.on :clip, "Copy the selected content to clipboard instead, do NOT gist it", default: false end
def process
def process return ::Gist.login! if opts.present?(:login) cc = CodeCollector.new(args, opts, _pry_) if cc.content =~ /\A\s*\z/ raise CommandError, "Found no code to gist." end if opts.present?(:clip) clipboard_content(cc.content) else # we're overriding the default behavior of the 'in' option (as # defined on CodeCollector) with our local behaviour. content = opts.present?(:in) ? input_content : cc.content gist_content content, cc.file end end
def setup
def setup require 'gist' end