class PostDB::CLI::Aliases
Constants
- SOURCE_REGEX
Public Instance Methods
add(source = nil, destination = nil)
click to toggle source
# File lib/postdb/cli/aliases.rb, line 45 def add(source = nil, destination = nil) unless source source = prompt.ask("Source:") do |q| q.required(true) q.validate(SOURCE_REGEX) end end unless destination destination = prompt.ask("Destination:") do |q| q.required(true) q.validate(:email) end end source = source.downcase destination = destination.downcase if source == destination exit_with_error("The alias '#{source} -> #{destination}' is managed automatically by PostDB.") end if PostDB::Alias.where(source: source, destination: destination).count > 0 exit_with_warning("The alias '#{source} -> #{destination}' has already been added.") end domain_name = source.split('@')[1] unless domain = PostDB::Domain.where(name: domain_name).first exit_with_error("The domain '#{domain_name}' is not available.") end PostDB::Alias.create(domain: domain, source: source, destination: destination) prompt.ok("The alias '#{source} -> #{destination}' has been added.") end
list(domain = nil)
click to toggle source
# File lib/postdb/cli/aliases.rb, line 11 def list(domain = nil) domains = PostDB::Domain.where(**(domain ? { name: domain } : {})) if domains.empty? if domain exit_with_warning("The domain '#{domain}' could not be found.") else exit_with_warning("There don't appear to be any domains on this system.") end end domains = domains.to_a domains.sort! { |a, b| a.name <=> b.name } domains.each_with_index do |domain, index| aliases = domain.forwarding_aliases.sort { |a, b| a.source <=> b.source } if aliases.empty? puts TTY::Table.new( header: [domain.name].pad(' '), rows: [['No Aliases'].pad(' ')] ).render(:ascii) else puts TTY::Table.new( header: [" " + domain.name + " \n Source: ", "\n Destination: "], rows: aliases.map { |a| [a.source, a.destination].pad(' ') } ).render(:ascii, multiline: true) end new_line unless (index + 1) == domains.count end end
remove(source = nil, destination = nil)
click to toggle source
# File lib/postdb/cli/aliases.rb, line 84 def remove(source = nil, destination = nil) unless source && destination aliases = PostDB::Alias.all.select { |a| a.source != a.destination } if aliases.empty? exit_with_warning("There don't appear to be any aliases on this system.") end a = prompt.select("Alias:", aliases.map { |a| ["#{a.source} -> #{a.destination}", a] }.to_h) source = a.source destination = a.destination end source = source.downcase destination = destination.downcase if source == destination exit_with_error("The alias '#{source} -> #{destination}' is managed automatically by PostDB.") end aliases = PostDB::Alias.where(source: source, destination: destination) if aliases.empty? exit_with_warning("The alias '#{source} -> #{destination}' could not be found.") end unless options[:force] confirm_action!("Remove the alias '#{source} -> #{destination}'?", "'#{source} -> #{destination}' left untouched.") end aliases.each(&:destroy) prompt.ok("The alias '#{source} -> #{destination}' has been removed.") end