diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 990dff9..16a0f1f 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -27,9 +27,7 @@ class ApplicationController < ActionController::Base end def installing_gems - Plugin::WORKING.find_all do |data| - data[:type] == :install && data[:state] == :running - end.map{|data| data[:plugin]} + Plugin.installing end def uninstalling_gem? @@ -37,9 +35,7 @@ class ApplicationController < ActionController::Base end def uninstalling_gems - Plugin::WORKING.find_all do |data| - data[:type] == :uninstall && data[:state] == :running - end.map{|data| data[:plugin]} + Plugin.uninstalling end private diff --git a/app/models/plugin.rb b/app/models/plugin.rb index 2a752a9..a27829e 100644 --- a/app/models/plugin.rb +++ b/app/models/plugin.rb @@ -100,6 +100,20 @@ class Plugin end end + def self.processing + WORKING.find_all do |data| + data[:state] == :running + end + end + + def self.installing + processing.find_all{|data| data[:type] == :install }.map{|data| data[:plugin] } + end + + def self.uninstalling + processing.find_all{|data| data[:type] == :uninstall }.map{|data| data[:plugin] } + end + def self.gemfile_path Rails.root + "Gemfile.plugins" end @@ -129,11 +143,21 @@ class Plugin end def gem_install + data = { plugin: self, state: :running, type: :install } + return if WORKING.grep(data).present? + WORKING.push(data) fluent_gem("install", gem_name, "-v", version) + ensure + WORKING.delete(data) end def gem_uninstall + data = { plugin: self, state: :running, type: :uninstall } + return if WORKING.grep(data).present? + WORKING.push(data) fluent_gem("uninstall", gem_name, "-x", "-a") + ensure + WORKING.delete(data) end def fluent_gem(*commands) diff --git a/app/workers/gem_installer.rb b/app/workers/gem_installer.rb index 826d0fa..3a9991d 100644 --- a/app/workers/gem_installer.rb +++ b/app/workers/gem_installer.rb @@ -5,16 +5,8 @@ class GemInstaller def perform(gem_name, version = nil) SuckerPunch.logger.info "install #{gem_name} #{version}" pl = Plugin.new(gem_name: gem_name, version: version) - data = { plugin: pl, type: :install, state: :running } - if Plugin::WORKING.grep(data).blank? - Plugin::WORKING.push(data) - begin - pl.uninstall! if pl.installed? - pl.install! - ensure - Plugin::WORKING.delete(data) - end - end + pl.uninstall! if pl.installed? + pl.install! SuckerPunch.logger.info "installed #{gem_name} #{version}" end end diff --git a/app/workers/gem_uninstaller.rb b/app/workers/gem_uninstaller.rb index d5d4f8d..c51d73c 100644 --- a/app/workers/gem_uninstaller.rb +++ b/app/workers/gem_uninstaller.rb @@ -5,15 +5,7 @@ class GemUninstaller def perform(gem_name) SuckerPunch.logger.info "uninstall #{gem_name}" pl = Plugin.new(gem_name: gem_name) - data = { plugin: pl, type: :uninstall, state: :running } - if Plugin::WORKING.grep(data).blank? - Plugin::WORKING.push(data) - begin - pl.uninstall! - ensure - Plugin::WORKING.delete(data) - end - end + pl.uninstall! SuckerPunch.logger.info "uninstalled #{gem_name}" end end