module Filechooser
require 'pathname'
require 'highline'
Constants
- NO_CHOICE
- STARTFOLDER
Public Class Methods
dirchooser(startfolder=STARTFOLDER)
click to toggle source
# File lib/filechooser/api.rb, line 5 def dirchooser(startfolder=STARTFOLDER) # return the directory chosen by the user p0 = Pathname.new(startfolder) while true case get_answer(p0) when /[cC]/ then return p0.to_s when /[xX]/ then return '' when /[lL]/ then Dir.chdir(p0) do system("ls -d */ ") # list directories only end when /[dD]/ then Highline.cli.say("Subdirectories of '#{p0}':".style(":info")) uvz=choose_uvz(p0) if uvz=='' Highline.cli.say("No subdirectories found.".style(":warning")) else uvz=File.expand_path(uvz,p0) uvz=Pathname.new(uvz) p0=uvz end when /[nN]/ then name=Highline.cli.ask("Name of new directory? ".style(":ask_line")) if name.verboten? Highline.cli.say("Name contains deprecated characters. Aborted.".style(":warning")) else begin Dir.chdir(p0) do if File.directory?(name) Highline.cli.say("Directory already exists.".style(":warning")) else Dir.mkdir(name) end end uvz=File.expand_path(name,p0) uvz=Pathname.new(uvz) p0=uvz rescue Highline.cli.say("Error: Could not create directory.".style(":warning")) end end when /[uU]/ then p0=p0.parent end end end
filechooser(startfolder=STARTFOLDER)
click to toggle source
# File lib/filechooser/api.rb, line 49 def filechooser(startfolder=STARTFOLDER) # return the file chosen by the user p0 = Pathname.new(startfolder) while true case get_answer(p0) when /[cC]/ then Highline.cli.say("Files of #{p0}:".style(":info")) datei=choose_datei(p0) if datei=='' Highline.cli.say("No files found.".style(":warning")) elsif datei==NO_CHOICE # Do nothing else datei=File.expand_path(datei,p0) datei=Pathname.new(datei) return datei.to_s end when /[xX]/ then return '' when /[lL]/ then system("ls -p '#{p0}'") # List directories with a trailing forward-slash when /[dD]/ then Highline.cli.say("Subdirectories of '#{p0}':".style(":info")) uvz=choose_uvz(p0) if uvz=='' Highline.cli.say("No subdirectories found.".style(":warning")) else uvz=File.expand_path(uvz,p0) uvz=Pathname.new(uvz) p0=uvz end when /[nN]/ then name=Highline.cli.ask("Name of new file? ".style(":ask_line")) if name.verboten? Highline.cli.say("Name contains deprecated characters. Aborted.".style(":warning")) else begin Dir.chdir(p0) do if File.file?(name) Highline.cli.say("File already exists.".style(":warning")) else if permission_given("Create and choose file '#{name}'") File.open(name,"a") datei=File.expand_path(name,p0) datei=Pathname.new(datei) return datei end end end rescue Highline.cli.say("Error: Could not create file.".style(":warning")) end end when /[uU]/ then p0=p0.parent end end end
Private Class Methods
choose_datei(vz)
click to toggle source
# File lib/filechooser/api.rb, line 123 def choose_datei(vz) # returns chosen file of vz a=dateien(vz) return '' if a==[] a << NO_CHOICE Highline.cli.choose do |menu| menu.prompt = "Your Choice? " a.each {|s| menu.choice(s) { return s } } end end
choose_uvz(vz)
click to toggle source
# File lib/filechooser/api.rb, line 114 def choose_uvz(vz) # returns chosen subdirectory of vz a=unterverzeichnisse(vz) return '' if a==[] Highline.cli.choose do |menu| menu.prompt = "Your Choice? " a.each {|s| menu.choice(s) { return s } } end end
dateien(vz)
click to toggle source
# File lib/filechooser/api.rb, line 145 def dateien(vz) # Array with all regular files of vz, no hidden ones rf=[] begin Dir.chdir(vz) do Dir['*'].each { |sd| rf << sd if File.file?(sd)} end rescue Highline.cli.say("Error: Could not enter directory.".style(":warning")) end return rf.sort end
get_answer(p0)
click to toggle source
# File lib/filechooser/api.rb, line 104 def get_answer(p0) Highline.cli.say("Current Directory: #{p0}".style(":info")) sd=unterverzeichnisse(p0).length # p0.children.select(&:directory?).length would count hidden folders too f=dateien(p0).length Highline.cli.say("(#{sd} directories, #{f} files)".style(":info")) choices= "(L)ist (C)hoose (D)own (U)p (N)ew E(x)it ? " answer = Highline.cli.ask(choices.style(":ask_line")) {|q| q.character = true} end
permission_given(wofuer)
click to toggle source
# File lib/filechooser/api.rb, line 158 def permission_given(wofuer) # true = yes = permission given (Highline.cli.ask("#{wofuer}? (Yn) ".style(":ask_line")) do |q| q.character = true end).downcase=='y' end
unterverzeichnisse(vz)
click to toggle source
# File lib/filechooser/api.rb, line 133 def unterverzeichnisse(vz) # Array with all direct subdirectories of vz, no hidden ones uvz=[] begin Dir.chdir(vz) do Dir['*/'].each { |sd| uvz << sd.chop} # sd comes with / at the end end rescue Highline.cli.say("Error: Could not enter directory.".style(":warning")) end return uvz.sort end