class Glima::Command::Relabel
Public Class Methods
new(source_name, dest_name, dry_run)
click to toggle source
# File lib/glima/command/relabel.rb, line 5 def initialize(source_name, dest_name, dry_run) all_labels = client.list_user_labels('me').labels.sort_by(&:name) if /\/$/ =~ dest_name move_to_dir = true dest_name = dest_name.sub(/\/$/, '') else move_to_dir = false end source_labels = all_labels.find_all {|x| File.fnmatch(source_name, x.name, File::FNM_PATHNAME)} dest_label = all_labels.find {|x| x.name == dest_name} if source_labels.empty? puts "Error: source #{source_name} not found" return nil end if dest_label && !move_to_dir puts "Error: dest #{dest_name} already exists" return nil end if !dest_label && move_to_dir puts "Error: dest #{dest_name} not found" return nil end source_labels.each do |source_label| dirtop = File.dirname(source_label.name) sub_labels = all_labels.find_all {|x| File.fnmatch(source_label.name + '/*', x.name)} ([source_label] + sub_labels).each do |label| src = label.name dst = dest_name + '/' + (label.name.sub(/^#{dirtop}\//, '')) if all_labels.find {|x| x.name == dst} puts "Error: relabel #{src} -> #{dst}: Destination already exists" next else puts "relabel #{src} -> #{dst}" end unless dry_run label_obj = Google::Apis::GmailV1::Label.new(id: label.id, name: dst) client.patch_user_label('me', label.id, label_obj) do |response, err| if response # puts dump_label(response) else puts "Error: #{err}" end end end end end end