class Firebrew::Firefox::Extension::Manager
Attributes
profile[R]
Public Class Methods
new(params={})
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 15 def initialize(params={}) @profile = params[:profile] end
Public Instance Methods
all()
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 19 def all profile_extensions = self.fetch['addons'].find_all do |extension| extension['location'] == 'app-profile' end profile_extensions.map do |extension| Extension.new({ name: extension['defaultLocale']['name'], guid: extension['id'], version: extension['version'], uri: extension['descriptor'], }, self) end end
find(name)
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 34 def find(name) self.all.find{|ext| ext.name == name } end
find!(name)
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 38 def find!(name) result = self.find(name) raise Firebrew::ExtensionNotFoundError, "Extension not found: #{name}" if result.nil? result end
install(extension, is_displaying_progress = false)
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 44 def install(extension, is_displaying_progress = false) dir = File.join(self.profile.path, 'extensions') FileUtils.mkdir_p dir xpi_path = '%s.xpi' % File.join(dir, extension.guid) File.open(xpi_path,'wb') do |out| uri = [extension.uri].flatten.first pout = is_displaying_progress ? $stdout : nil Firebrew::Downloader.new(uri, out, output: pout).exec end xpi = Zip::File.open(File.open(xpi_path,'rb')) install_manifests = xpi.find_entry('install.rdf') install_manifests = install_manifests.get_input_stream.read install_manifests = REXML::Document.new(install_manifests) is_unpacking = REXML::XPath.match(install_manifests, '/RDF/Description/em:unpack/text()').first is_unpacking = is_unpacking.nil? ? false : is_unpacking.value.strip == 'true' if is_unpacking then extension.uri = xpi_path.pathmap('%X') FileUtils.mkdir_p(extension.uri) xpi.each do |entry| next if entry.ftype == :directory content = entry.get_input_stream.read Dir.chdir(extension.uri) do FileUtils.mkdir_p File.dirname(entry.name) File.write(entry.name, content) end end xpi.close FileUtils.rm_rf(xpi_path) else extension.uri = xpi_path xpi.close end self.add(extension) self.push end
uninstall(extension)
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 86 def uninstall(extension) FileUtils.rm_r extension.uri self.remove(extension) self.push end
Protected Instance Methods
add(extension)
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 112 def add(extension) self.fetch['addons'].push( 'id'=> extension.guid, 'location'=> 'app-profile', 'version'=> extension.version, 'descriptor'=> extension.uri, 'defaultLocale'=> { 'name'=> extension.name } ) end
data_path()
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 94 def data_path path = File.join(self.profile.path, 'extensions.json') unless File.exists?(path) then File.write(path, %({"schemaVersion": 16, "addons": []})) end path end
fetch()
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 102 def fetch return @data unless @data.nil? @data = JSON.load(File.read(self.data_path)) end
push()
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 107 def push json = JSON::pretty_generate(self.fetch, allow_nan: true, max_nesting: false) File.write(self.data_path, json) end
remove(extension)
click to toggle source
# File lib/firebrew/firefox/extension.rb, line 124 def remove(extension) self.fetch['addons'].delete_if{|v| v['id'] == extension.guid} end