utilize Rails callbacks to trap issues created/saved via mail (refs #5)

This commit is contained in:
Thanos Kyritsis
2016-02-27 20:03:29 +02:00
parent b3e8f3a6e4
commit e001232b23
3 changed files with 45 additions and 3 deletions

View File

@@ -8,7 +8,7 @@ Redmine::Plugin.register :redmine_mattermost do
url 'https://github.com/altsol/redmine_mattermost'
author_url 'http://altsol.gr'
description 'Mattermost chat integration'
version '0.2'
version '0.3'
requires_redmine :version_or_higher => '2.0.0'
@@ -22,3 +22,10 @@ Redmine::Plugin.register :redmine_mattermost do
},
:partial => 'settings/mattermost_settings'
end
ActionDispatch::Callbacks.to_prepare do
require_dependency 'issue'
unless Issue.included_modules.include? RedmineMattermost::IssuePatch
Issue.send(:include, RedmineMattermost::IssuePatch)
end
end

View File

@@ -0,0 +1,35 @@
module RedmineMattermost
module IssuePatch
def self.included(base) # :nodoc:
base.extend(ClassMethods)
base.send(:include, InstanceMethods)
base.class_eval do
unloadable # Send unloadable so it will not be unloaded in development
after_create :create_from_issue
after_save :save_from_issue
end
end
module ClassMethods
end
module InstanceMethods
def create_from_issue
self.reload
@create_already_fired = true
Redmine::Hook.call_hook(:redmine_mattermost_issues_new_after_save, { :issue => self})
return true
end
def save_from_issue
self.reload
if not @create_already_fired
Redmine::Hook.call_hook(:redmine_mattermost_issues_edit_after_save, { :issue => self, :journal => self.current_journal})
end
return true
end
end
end
end

View File

@@ -1,7 +1,7 @@
require 'httpclient'
class MattermostListener < Redmine::Hook::Listener
def controller_issues_new_after_save(context={})
def redmine_mattermost_issues_new_after_save(context={})
issue = context[:issue]
channel = channel_for_project issue.project
@@ -37,7 +37,7 @@ class MattermostListener < Redmine::Hook::Listener
speak msg, channel, attachment, url
end
def controller_issues_edit_after_save(context={})
def redmine_mattermost_issues_edit_after_save(context={})
issue = context[:issue]
journal = context[:journal]