foreman-tasks 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,12 +1,12 @@
1
1
  module ForemanTasks
2
2
  class Lock < ActiveRecord::Base
3
3
 
4
- LINK_LOCK_NAME = :link_resource
4
+ LINK_LOCK_NAME = :link_resource
5
5
  OWNER_LOCK_NAME = :task_owner
6
6
 
7
7
  # not really intedet to be created in database, but it's used for
8
8
  # explicitly stating that the all the locks for resource should be used
9
- ALL_LOCK_NAME = :all
9
+ ALL_LOCK_NAME = :all
10
10
 
11
11
  RESERVED_LOCK_NAMES = [LINK_LOCK_NAME, OWNER_LOCK_NAME, ALL_LOCK_NAME]
12
12
 
@@ -31,25 +31,25 @@ module ForemanTasks
31
31
 
32
32
  validate do
33
33
  unless available?
34
- raise LockConflict.new(self, coliding_locks)
34
+ raise LockConflict.new(self, colliding_locks)
35
35
  end
36
36
  end
37
37
 
38
38
  # returns true if it's possible to aquire this kind of lock
39
39
  def available?
40
- return true unless coliding_locks.any?
40
+ not colliding_locks.any?
41
41
  end
42
42
 
43
- # returns a scope of the locks coliding with this one
44
- def coliding_locks
45
- coliding_locks_scope = Lock.active.where('foreman_tasks_locks.task_id != ?', task_id)
46
- coliding_locks_scope = coliding_locks_scope.where(name: name,
47
- resource_id: resource_id,
48
- resource_type: resource_type)
43
+ # returns a scope of the locks colliding with this one
44
+ def colliding_locks
45
+ colliding_locks_scope = Lock.active.where(Lock.arel_table[:task_id].not_eq(task_id))
46
+ colliding_locks_scope = colliding_locks_scope.where(name: name,
47
+ resource_id: resource_id,
48
+ resource_type: resource_type)
49
49
  unless self.exclusive?
50
- coliding_locks_scope = coliding_locks_scope.where(:exclusive => true)
50
+ colliding_locks_scope = colliding_locks_scope.where(:exclusive => true)
51
51
  end
52
- return coliding_locks_scope
52
+ return colliding_locks_scope
53
53
  end
54
54
 
55
55
  class << self
@@ -63,7 +63,7 @@ module ForemanTasks
63
63
  end
64
64
 
65
65
  def exclusive?(resource)
66
- build_exclusive_locks(resource).all?(:available?)
66
+ build_exclusive_locks(resource).all?(&:available?)
67
67
  end
68
68
 
69
69
 
@@ -82,10 +82,19 @@ module ForemanTasks
82
82
  build_locks(resource, lock_names, uuid).each(&:save!)
83
83
  end
84
84
 
85
- def lock?(resource, uuid, *lock_names)
85
+ def lockable?(resource, uuid, *lock_names)
86
86
  build_locks(resource, lock_names, uuid).all?(&:available?)
87
87
  end
88
88
 
89
+ def locked?(resource, uuid, *lock_names)
90
+ not lockable?(resource, uuid, *lock_names)
91
+ end
92
+
93
+ def colliding_locks(resource, uuid, *lock_names)
94
+ build_locks(resource, lock_names, uuid).
95
+ inject([]) { |collisions, lock| collisions.concat lock.colliding_locks.to_a }
96
+ end
97
+
89
98
  # Assigns the resource to the task to easily track the task in context of
90
99
  # the resource. This doesn't prevent other actions to lock the resource
91
100
  # and should be used only for actions that tolerate other actions to be
@@ -111,7 +120,7 @@ module ForemanTasks
111
120
  def all_lock_names(resource, include_links = false)
112
121
  lock_names = []
113
122
  if resource.class.respond_to?(:available_locks) &&
114
- resource.class.available_locks.any?
123
+ resource.class.available_locks.any?
115
124
  lock_names.concat(resource.class.available_locks)
116
125
  else
117
126
  raise "The resource #{resource.class.name} doesn't define any available lock"
@@ -0,0 +1,17 @@
1
+ class Setting::ForemanTasks < Setting
2
+
3
+ def self.load_defaults
4
+ # Check the table exists
5
+ return unless super
6
+
7
+ self.transaction do
8
+ [
9
+ self.set('dynflow_enable_console', N_("Enable the dynflow console (/foreman_tasks/dynflow) for debugging"), false),
10
+ ].each { |s| self.create! s.update(:category => "Setting::ForemanTasks")}
11
+ end
12
+
13
+ true
14
+
15
+ end
16
+
17
+ end
@@ -1,3 +1,18 @@
1
+ <script>
2
+ $(document).ready(function () {
3
+ var reload = function () {
4
+ $.ajax({
5
+ url: "",
6
+ context: document.body,
7
+ success: function (s, x) {
8
+ $(this).html(s);
9
+ }
10
+ });
11
+ };
12
+ setTimeout(reload, 5000);
13
+ });
14
+ </script>
15
+
1
16
  <div class="task-details">
2
17
  <%= form_for @task, :url => "#" do %>
3
18
  <div>
@@ -81,8 +81,9 @@ module ForemanTasks
81
81
  def web_console
82
82
  ::Dynflow::WebConsole.setup do
83
83
  before do
84
- # TODO: propper authentication
85
- User.current = User.first
84
+ if !Setting[:dynflow_enable_console]
85
+ redirect('dashboard')
86
+ end
86
87
  end
87
88
 
88
89
  set(:world) { ForemanTasks.dynflow.world }
@@ -2,6 +2,10 @@ module ForemanTasks
2
2
  class Engine < ::Rails::Engine
3
3
  engine_name "foreman_tasks"
4
4
 
5
+ initializer 'foreman_tasks.load_default_settings', :before => :load_config_initializers do
6
+ require_dependency File.expand_path('../../../app/models/setting/foreman_tasks.rb', __FILE__) if (Setting.table_exists? rescue(false))
7
+ end
8
+
5
9
  initializer 'foreman_tasks.register_plugin', :after => :finisher_hook do |app|
6
10
  Foreman::Plugin.register :"foreman-tasks" do
7
11
  requires_foreman '> 1.3'
@@ -1,3 +1,3 @@
1
1
  module ForemanTasks
2
- VERSION = "0.5.2"
2
+ VERSION = "0.5.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-04-04 00:00:00.000000000 Z
12
+ date: 2014-04-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -149,6 +149,7 @@ files:
149
149
  - app/models/foreman_tasks/task/dynflow_task.rb
150
150
  - app/models/foreman_tasks/lock.rb
151
151
  - app/models/foreman_tasks/task.rb
152
+ - app/models/setting/foreman_tasks.rb
152
153
  - bin/dynflow-executor
153
154
  - bin/foreman-tasks
154
155
  - config/routes.rb