Class: Selenium::WebDriver::Safari::Extension

Inherits:
Object
  • Object
show all
Defined in:
lib/selenium/webdriver/safari/extension.rb

Constant Summary collapse

PLIST =
"  <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n  <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n  <plist version=\"1.0\">\n  <dict>\n    <key>Available Updates</key>\n    <dict>\n      <key>Last Update Check Time</key>\n      <real>370125644.75941497</real>\n      <key>Updates List</key>\n      <array/>\n    </dict>\n    <key>Installed Extensions</key>\n    <array>\n      <dict>\n        <key>Added Non-Default Toolbar Items</key>\n        <array/>\n        <key>Archive File Name</key>\n        <string>WebDriver.safariextz</string>\n        <key>Bundle Directory Name</key>\n        <string>WebDriver.safariextension</string>\n        <key>Enabled</key>\n        <true/>\n        <key>Hidden Bars</key>\n        <array/>\n        <key>Removed Default Toolbar Items</key>\n        <array/>\n      </dict>\n    </array>\n    <key>Version</key>\n    <integer>1</integer>\n  </dict>\n  </plist>\n"

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Extension

Returns a new instance of Extension.



41
42
43
44
# File 'lib/selenium/webdriver/safari/extension.rb', line 41

def initialize(opts = {})
  @custom_data_dir = opts[:custom_data_dir]
  @installed       = false
end

Instance Method Details

#backup_directoryObject



84
85
86
# File 'lib/selenium/webdriver/safari/extension.rb', line 84

def backup_directory
  Pathname.new("#{install_directory.to_s}.bak")
end

#extension_destinationObject



80
81
82
# File 'lib/selenium/webdriver/safari/extension.rb', line 80

def extension_destination
  install_directory.join('WebDriver.safariextz')
end

#extension_sourceObject



76
77
78
# File 'lib/selenium/webdriver/safari/extension.rb', line 76

def extension_source
  Safari.resource_path.join('SafariDriver.safariextz')
end

#installObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/selenium/webdriver/safari/extension.rb', line 46

def install
  return if @installed

  if install_directory.exist?
    FileUtils.mv install_directory.to_s, backup_directory.to_s
  end

  install_directory.mkpath

  extension_destination.rmtree if extension_destination.exist?
  FileUtils.cp extension_source.to_s, extension_destination.to_s

  plist_destination.open('w') { |io| io << PLIST }

  at_exit { uninstall }
  @installed = true
end

#install_directoryObject



92
93
94
95
96
97
98
99
100
101
102
# File 'lib/selenium/webdriver/safari/extension.rb', line 92

def install_directory
  @install_directory ||= (
    data_dir = Pathname.new(@custom_data_dir || safari_data_dir)

    unless data_dir.exist? && data_dir.directory?
      raise Errno::ENOENT, "Safari data directory not found at #{data_dir.to_s}"
    end

    data_dir.join('Extensions')
  )
end

#plist_destinationObject



88
89
90
# File 'lib/selenium/webdriver/safari/extension.rb', line 88

def plist_destination
  install_directory.join('Extensions.plist')
end

#safari_data_dirObject



104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/selenium/webdriver/safari/extension.rb', line 104

def safari_data_dir
  current = Platform.os

  case current
  when :macosx
    Pathname.new(Platform.home).join('Library/Safari')
  when :windows
    Pathname.new(ENV['APPDATA']).join('Apple Computer/Safari')
  else
    raise Error::WebDriverError, "unsupported platform: #{current}"
  end
end

#uninstallObject



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/selenium/webdriver/safari/extension.rb', line 64

def uninstall
  return unless @installed

  install_directory.rmtree if install_directory.exist?

  if backup_directory.exist?
    FileUtils.mv backup_directory.to_s, install_directory.to_s
  end
ensure
  @installed = false
end