module Ptf::Commands::Task::Edit
Public Class Methods
edit(id)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 95 def edit(id) unless Ptf::FileSystem.id_exist? (id) return "The task #{id} does not exist" end metadata_file = Ptf::FileSystem.find_file id if metadata_file.nil? return "The task #{id} has been closed. Reopen it with ptf task reopen ###." end # Get hash from file metadata = Ptf::MetadataFile.create_from_file(metadata_file) data_file_name = metadata.hash data_file = File.join(Ptf::FileSystem.data_dir, data_file_name) # Create a copy in tmp foldere tmp_file_path = File.join(Ptf::FileSystem.tmp_dir, data_file_name) FileUtils.copy data_file, tmp_file_path edit_succeeded = system("vim #{data_file}") if !edit_succeeded # Move tmp file back, then remove it FileUtils.copy tmp_file_path, data_file FileUtils.remove_file tmp_file_path return "Vim edit failed. Aborting changes." end if verify_file(data_file, metadata) FileUtils.remove_file tmp_file_path return "Edit successful!" else FileUtils.copy tmp_file_path, data_file FileUtils.remove_file tmp_file_path return "File verification failed. Aborting changes." end end
verify_due(line, metadata)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 54 def verify_due(line, metadata) due_line_regex = /^#Due: ?(\d\d\d\d[01]\d[0-3]\d[0-2]\d[0-5]\d[0-5]\d)?$/ base, date = due_line_regex.match(line).to_a if !base.nil? && date.nil? metadata.set_due_date nil return [true, metadata] end begin datetime = Ptf::Date.str_to_datetime date rescue return [false, metadata] end metadata.set_due_date datetime [!datetime.nil?, metadata] end
verify_estimate(line, metadata)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 74 def verify_estimate(line, metadata) estimate_line_regex = /^#Estimate: ?(\d+)?$/ base, estimate = estimate_line_regex.match(line).to_a if !base.nil? && estimate.nil? metadata.set_estimate nil return [true, metadata] elsif base.nil? return [false, metadata] end estimate = estimate.to_i if estimate != 0 metadata.set_estimate estimate return [true, metadata] else return [false, metadata] end end
verify_file(file, metadata)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 7 def verify_file(file, metadata) title_line, due_date_line, estimate_line = File.foreach(file).first(3) did_succeed, updated_metadata = verify_title_line title_line, metadata return false unless did_succeed did_succeed, updated_metadata = verify_due due_date_line, updated_metadata return false unless did_succeed did_succeed, updated_metadata = verify_estimate estimate_line, updated_metadata return false unless did_succeed updated_metadata.write_to_file did_succeed end
verify_group(str, metadata)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 32 def verify_group(str, metadata) return false unless !str.nil? && str.is_a?(String) Ptf::Group.group_exist?(str) && metadata.group.abbreviation == str end
verify_id(str, metadata)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 38 def verify_id(str, metadata) return false unless !str.nil? && str.is_a?(String) str.to_i == metadata.id end
verify_title(str, metadata)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 44 def verify_title(str, metadata) return false unless !str.nil? && str.is_a?(String) if str != metadata.title metadata.set_title str end [true, metadata] end
verify_title_line(line, metadata)
click to toggle source
# File lib/ptf/commands/task/edit.rb, line 23 def verify_title_line(line, metadata) title_line_regex = /^#([A-Z]+)--(\d+)\s([ a-zA-Z0-9]+)$/ _, group, id, title = title_line_regex.match(line).to_a is_title_valid, updated_metadata = verify_title title, metadata [(verify_group group, metadata) && (verify_id id, metadata) && is_title_valid, updated_metadata] end