class HaveSnippet::Client::Cli
Constants
- ACCESS_MODES
Public Class Methods
new()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 14 def initialize @opts = {} load end
run()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 10 def self.run new.run end
Public Instance Methods
config_paths()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 173 def config_paths [ '/etc/havesnippet-client', '/var/secrets/havesnippet-client', local_config_path, ] end
load()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 138 def load rename_config config_paths.each do |path| next unless File.exist?(path) cfg = YAML.load(File.read(path)) if cfg[:expiration_interval] cfg[:expiration] = Time.now.to_i + cfg[:expiration_interval] end @opts.update(cfg) end end
local_config_path()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 169 def local_config_path File.join(Dir.home, '.havesnippet-client') end
rename_config()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 181 def rename_config old = File.join(Dir.home, '.havesnippet') if File.exist?(old) && !File.exist?(local_config_path) File.rename(old, local_config_path) end end
run()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 19 def run usage = <<END Usage: #{$0} [options] [file] Options: END opt_parser = OptionParser.new do |opts| opts.banner = usage opts.on('-s', '--server URL', 'URL to the HaveSnippet server') do |v| @opts[:url] = v end opts.on('-k', '--api-key KEY', 'API key used to authenticate the user') do |v| @opts[:api_key] = v end opts.on('-f', '--filename NAME', 'File name, including the extension') do |v| @opts[:file_name] = v end opts.on('-l', '--language LANG', 'Language used to highlight the syntax') do |v| @opts[:language] = v end opts.on('-L', '--list-languages', 'List available languages') do @opts[:languages] = true end opts.on('-t', '--title TITLE', 'Title for the snippet') do |v| @opts[:title] = v end opts.on('-a', '--access MODE', ACCESS_MODES, "Accessibility (#{ACCESS_MODES.join(',')})") do |v| @opts[:accessibility] = translate_access(v) end opts.on('-e', '--expiration DATE', 'Date of expiration in ISO 8601') do |v| @expiration_delta = nil @opts[:expiration] = DateTime.iso8601(v).to_time.to_i end { hour: 60*60, day: 60*60*24, week: 60*60*24*7, month: 60*60*24*30, year: 60*60*24*30*12, }.each do |k, v| opts.on("--#{k}", "Expiration in one #{k}") do @opts[:expiration] = Time.now.to_i + v @expiration_delta = v end end opts.on('--forever', 'Disable expiration') do @opts[:expiration] = nil @expiration_delta = nil end opts.on('--clear', 'Clear any previously configured options') do @opts.clear end opts.on('--save', 'Save settings to config file') do @opts[:save] = true end opts.on('-h', '--help', 'Show this message and exit') do puts opts exit end end opt_parser.parse! @opts[:file_name] = File.basename(ARGV[0]) if ARGV[0] && !@opts[:file_name] c = HaveSnippet::Client::Client.new(@opts[:url], @opts[:api_key]) if @opts[:languages] c.languages.sort do |a, b| a[0] <=> b[0] end.each { |k, v| puts "#{k.ljust(16)} #{v}" } exit end if @opts[:save] save exit end @opts[:content] = (ARGV[0] ? File.open(ARGV[0]) : STDIN).read res = c.paste(@opts) if res.ok? puts res.url else if res.errors warn "Error occured:" res.errors.each do |k, v| warn "\t#{k}: #{v.join('; ')}" end else warn "Unknown error occured" end end end
save()
click to toggle source
# File lib/havesnippet-client/cli.rb, line 154 def save data = @opts.clone data.delete(:save) if @expiration_delta data[:expiration_interval] = @expiration_delta data.delete(:expiration) else data.delete(:expiration_interval) end File.open(local_config_path, 'w') { |f| f.write(YAML.dump(data)) } end
translate_access(v)
click to toggle source
# File lib/havesnippet-client/cli.rb, line 132 def translate_access(v) i = ACCESS_MODES.index(v) raise ArgumentError, "'#{v}' is not a valid access mode" unless i i end