Module: ChangeManager::Manager

Included in:
LocalManager
Defined in:
app/services/change_manager/manager.rb

Instance Method Summary collapse

Instance Method Details

#cancel_inverse_changes_in(similar_changes) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'app/services/change_manager/manager.rb', line 27

def cancel_inverse_changes_in(similar_changes)
	similar_changes.each do |change|
		similar_changes.each do |next_change|
			if change.inverse_of?(next_change)
				change.cancel
				next_change.cancel
				similar_changes.delete_if { |change| change.cancelled? }
			end
		end
	end
	similar_changes
end

#group_similar_changes(owner, target) ⇒ Object



23
24
25
# File 'app/services/change_manager/manager.rb', line 23

def group_similar_changes(owner, target)
	similar_changes = Change.where(owner: owner, target: target, cancelled: false, notified: nil)
end

#notify_target_of(changes) ⇒ Object



40
41
42
43
44
45
46
47
# File 'app/services/change_manager/manager.rb', line 40

def notify_target_of(changes)
	mailer = ChangeManager::NotificationMailer
	if mailer.send_email(mailer.construct_email(changes))
		changes.each { |change| change.notify }
		return true
	end
	false
end

#process_change(change_id) ⇒ Object



8
9
10
11
12
13
14
15
# File 'app/services/change_manager/manager.rb', line 8

def process_change(change_id)
	change = Change.find change_id
	unless change.cancelled?
		verified_changes = process_changes_similar_to change
		notify_target_of verified_changes unless verified_changes.empty?
		true
	end
end

#process_changes_similar_to(change) ⇒ Object



17
18
19
20
21
# File 'app/services/change_manager/manager.rb', line 17

def process_changes_similar_to(change)
	similar_changes = group_similar_changes(change.owner, change.target)
	cancel_inverse_changes_in similar_changes if similar_changes.length > 1
	similar_changes
end

#queue_change(owner, change_type, context, target) ⇒ Object



3
4
5
6
# File 'app/services/change_manager/manager.rb', line 3

def queue_change(owner, change_type, context, target)
	change_id = Change.new_change(owner, change_type, context, target)
	Resque.enqueue_in(15.minutes, ChangeManager::BeginChange, change_id)
end