class Desktop::OSX

Attributes

cached_image_path[R]
desktop_image_path[R]
skip_database[R]
skip_reload[R]

Public Class Methods

chmod_command() click to toggle source
# File lib/desktop/osx/osx.rb, line 20
def self.chmod_command
  self.new.chmod_command
end
chown_command() click to toggle source
# File lib/desktop/osx/osx.rb, line 16
def self.chown_command
  self.new.chown_command
end
desktop_image=(image) click to toggle source
# File lib/desktop/osx/osx.rb, line 8
def self.desktop_image=(image)
  self.new.desktop_image = image
end
new(options = nil) click to toggle source
# File lib/desktop/osx/osx.rb, line 24
def initialize(options = nil)
  options ||= {}
  @skip_reload = options[:skip_reload]
  @skip_database = options[:skip_database]
  @desktop_image_path = \
    options[:desktop_image_path] || default_desktop_image_path
  @cached_image_path = \
    options[:cached_image_path] || default_cached_image_path
end
update_desktop_image_permissions() click to toggle source
# File lib/desktop/osx/osx.rb, line 12
def self.update_desktop_image_permissions
  self.new.update_desktop_image_permissions
end

Public Instance Methods

chmod_command() click to toggle source
# File lib/desktop/osx/osx.rb, line 56
def chmod_command
  [' -h ', ' '].map do |option|
    "sudo chmod#{option}664 #{desktop_image_path}"
  end.join(" && ")
end
chown_command() click to toggle source
# File lib/desktop/osx/osx.rb, line 50
def chown_command
  [' -h ', ' '].map do |option|
    "sudo chown#{option}$('whoami'):staff #{desktop_image_path}"
  end.join(" && ")
end
desktop_image=(image) click to toggle source
# File lib/desktop/osx/osx.rb, line 34
def desktop_image=(image)
  write_default_desktop image
  clear_custom_desktop_image unless skip_database
  touch_desktop_image
  remove_cached_image
  reload_desktop unless skip_reload
rescue Errno::EACCES => e
  raise DesktopImagePermissionsError.new(e)
rescue Errno::ENOENT => e
  raise DesktopImageMissingError.new(e)
end
update_desktop_image_permissions() click to toggle source
# File lib/desktop/osx/osx.rb, line 46
def update_desktop_image_permissions
  system(chown_command) && system(chmod_command)
end

Private Instance Methods

clear_custom_desktop_image() click to toggle source
# File lib/desktop/osx/osx.rb, line 75
def clear_custom_desktop_image
  db = Database.new
  db.clear_desktop_image
  db.close
end
default_cached_image_path() click to toggle source
# File lib/desktop/osx/osx.rb, line 95
def default_cached_image_path
  '/Library/Caches/com.apple.desktop.admin.png'
end
default_desktop_image_path() click to toggle source
# File lib/desktop/osx/osx.rb, line 99
def default_desktop_image_path
  '/System/Library/CoreServices/DefaultDesktop.jpg'
end
reload_desktop() click to toggle source
# File lib/desktop/osx/osx.rb, line 91
def reload_desktop
  system 'killall Dock'
end
remove_cached_image() click to toggle source
# File lib/desktop/osx/osx.rb, line 87
def remove_cached_image
  system "rm #{cached_image_path} 2>/dev/null"
end
touch_desktop_image() click to toggle source
# File lib/desktop/osx/osx.rb, line 81
def touch_desktop_image
  unless system("touch -h #{desktop_image_path} 2>/dev/null")
    raise Errno::EACCES
  end
end
write_default_desktop(image) click to toggle source
# File lib/desktop/osx/osx.rb, line 69
def write_default_desktop(image)
  File.open(desktop_image_path, 'w') do |desktop|
    desktop.write image.data
  end
end