Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions app/controllers/release_log_configurations_controller.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
class ReleaseLogConfigurationsController < ReleaseLogsBaseController
include ReleaseLogsHelper

unloadable

helper :release_logs
helper ReleaseLogsHelper

before_filter :authorize_global
before_filter :load_configuration, :only => [:edit, :update, :destroy]
before_filter :load_dependencies, :only => [:new, :edit]
before_action :authorize_global
before_action :load_configuration, :only => [:edit, :update, :destroy]
before_action :load_dependencies, :only => [:new, :edit]

def index
@release_log_configurations = ReleaseLogConfiguration.all
Expand Down
10 changes: 4 additions & 6 deletions app/controllers/release_log_previews_controller.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
class ReleaseLogPreviewsController < ReleaseLogsBaseController
include ReleaseLogsHelper

unloadable

helper :release_logs

before_filter :load_project
before_filter :authorize
before_filter :find_attachments
before_filter :load_release_log
before_action :load_project
before_action :authorize
before_action :find_attachments
before_action :load_release_log

layout false

Expand Down
7 changes: 4 additions & 3 deletions app/controllers/release_log_queues_controller.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
class ReleaseLogQueuesController < ReleaseLogsBaseController
unloadable

include ReleaseLogsHelper

before_filter :authorize_global
before_filter :load_release_log_queue, :only => [:edit, :update, :destroy]
helper ReleaseLogsHelper

before_action :authorize_global
before_action :load_release_log_queue, :only => [:edit, :update, :destroy]

def index
@release_log_queues = ReleaseLogQueue.all
Expand Down
8 changes: 5 additions & 3 deletions app/controllers/release_logs_base_controller.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
class ReleaseLogsBaseController < ApplicationController
include ApplicationHelper
unloadable

helper :application

before_filter :set_title
include ReleaseLogsHelper
helper ReleaseLogsHelper

before_action :set_title

protected

def set_title
html_title release_logs_label_for(:release_logs)
html_title helpers.release_logs_label_for(:release_logs)
end

end
37 changes: 28 additions & 9 deletions app/controllers/release_logs_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ class ReleaseLogsController < ReleaseLogsBaseController

DEFAULT_LIMIT = 10

unloadable

helper :attachments
helper :release_logs

before_filter :load_project
before_filter :authorize
before_filter :load_configuration
before_filter :load_release_log, :only => [:edit, :show, :update, :destroy, :clone, :send_notification]
helper ReleaseLogsHelper

before_action :load_project
before_action :authorize
before_action :load_configuration
before_action :load_release_log, :only => [:edit, :show, :update, :destroy, :clone, :send_notification]

def index
@limit = params[:limit] || DEFAULT_LIMIT
Expand Down Expand Up @@ -197,11 +197,30 @@ def release_log_params
end

def send_release_log_notification(type)
message = ReleaseLogMailer.send(:"release_log_#{type}_notification", @release_log)
message.deliver

@release_log_configuration = @release_log.project.release_log_configuration
@release_log_queue = @release_log_configuration.release_log_queue
recipient_addresses = @release_log_configuration.recipient_addresses
recipient_addresses << @release_log_queue.recipient_addresses if @release_log_queue.present?
recipient_addresses = recipient_addresses.flatten.uniq
logger.info "Recipient Addresses: #{recipient_addresses}"
for email in recipient_addresses
logger.info "looking for email_addresses with email: #{email.strip}"
found_emails = EmailAddress.where(["address = ?", email.strip])
for found_email in found_emails
logger.info "looking for users with with user_id: #{found_email.user_id}"
found_users = User.where(["id = ?", found_email.user_id])
message = ReleaseLogMailer.send(:"release_log_#{type}_notification", found_users.first, @release_log)
message.deliver_later
end
end
#message = ReleaseLogMailer.release_log_successful_release_notification(users.first, @release_log)

#ReleaseLogMailer.deliver_release_log_successful_release_notification(@release_log)

notification = @release_log.release_log_notifications.build(:notification_type => type, :sent_at => Time.now)
notification.release_log_queue_id = @project.release_log_configuration.release_log_queue.id if @project.queue_release_log_enabled?
notification.message_id = message.message_id
notification.message_id = message.message_id
notification.title = @release_log.title
notification.save!
true
Expand Down
5 changes: 2 additions & 3 deletions app/controllers/release_logs_home_controller.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
class ReleaseLogsHomeController < ReleaseLogsBaseController
include ReleaseLogsHelper

unloadable
helper ReleaseLogsHelper

DEFAULT_LIMIT = 10

helper :release_logs

before_filter :authorize_global
before_action :authorize_global

def index
@release_logs = ReleaseLog.latest
Expand Down
18 changes: 8 additions & 10 deletions app/models/release_log.rb
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
class ReleaseLog < ActiveRecord::Base
include Redmine::I18n

unloadable

DRAFT_STATUS = 'draft'
PUBLISHED_STATUS = 'published'
RELEASED_STATUS = 'released'
CANCELLED_STATUS = 'cancelled'
ROLLED_BACK_STATUS = 'rolled_back'
PENDING_RELEASE_STATUS = 'pending_release'

has_many :release_log_entries, :dependent => :destroy, :inverse_of => :release_log, :validate => true
has_many :release_log_notifications, :dependent => :destroy, :inverse_of => :release_log
has_many :release_log_entries, :dependent => :destroy, :validate => true
has_many :release_log_notifications, :dependent => :destroy

belongs_to :project, :inverse_of => :release_logs
belongs_to :project
belongs_to :user
belongs_to :publisher, :class_name => 'User', :foreign_key => 'published_by'
belongs_to :canceller, :class_name => 'User', :foreign_key => 'cancelled_by'
belongs_to :rollbacker, :class_name => 'User', :foreign_key => 'rolled_back_by'
belongs_to :release_log_queue, :inverse_of => :release_logs
belongs_to :release_log_queue

accepts_nested_attributes_for :release_log_entries, :allow_destroy => true

Expand All @@ -29,7 +27,7 @@ class ReleaseLog < ActiveRecord::Base

### Scopes ###
scope :for_project, lambda { |project| where(:project_id => project.id) }
scope :latest, lambda { order('COALESCE(release_logs.released_at, release_logs.created_at) desc') }
scope :latest, lambda { order('release_logs.created_at desc') }

### Query scopes ###
scope :with_text, lambda { |text| joins(:release_log_entries => [ :issue ]).where('release_logs.title like :text or release_logs.description like :text or issues.subject like :text or issues.description like :text or release_log_entries.note like :text', :text => text) }
Expand Down Expand Up @@ -82,10 +80,10 @@ class ReleaseLog < ActiveRecord::Base
}

validates :title, :presence => true, :length => { :maximum => 255 }
validates :released_at, :presence => { :unless => 'release_upon_publish' }
validates :released_at, :presence => { :unless => lambda { release_upon_publish } }
validates :release_log_entries, :association_count => { :minimum => 1 }
validates :rollback_reason, :presence => { :if => 'rolled_back_at.present?' }
validates :cancellation_reason, :presence => { :if => 'cancelled_at.present?' }
validates :rollback_reason, :presence => { :if => lambda { rolled_back_at.present? } }
validates :cancellation_reason, :presence => { :if => lambda { cancelled_at.present? } }
validate :unique_issues

def created_on
Expand Down
6 changes: 2 additions & 4 deletions app/models/release_log_configuration.rb
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
class ReleaseLogConfiguration < ActiveRecord::Base
include Redmine::I18n

unloadable

belongs_to :project, :inverse_of => :release_log_configuration
belongs_to :project
belongs_to :release_log_queue

scope :enabled, lambda { where(:enabled => true) }
scope :for_project, lambda { |project_id| where(:project_id => project_id) }

validates :project_id, :presence => true, :uniqueness => true
validates :email_notification_recipients, :presence => { :unless => 'release_log_queue_id.present?' }, :multiple_email_addresses => true
validates :email_notification_recipients, :presence => { :unless => lambda { release_log_queue_id.present? } }, :multiple_email_addresses => true

def enabled?
enabled
Expand Down
6 changes: 2 additions & 4 deletions app/models/release_log_entry.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
class ReleaseLogEntry < ActiveRecord::Base
include Redmine::I18n

unloadable

belongs_to :issue
belongs_to :release_log, :inverse_of => :release_log_entries
belongs_to :release_log_entry_category, :inverse_of => :release_log_entries
belongs_to :release_log
belongs_to :release_log_entry_category

validates :note, :presence => true
validate :valid_configuration
Expand Down
2 changes: 0 additions & 2 deletions app/models/release_log_entry_category.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
class ReleaseLogEntryCategory < ActiveRecord::Base
include Redmine::I18n

unloadable

has_many :release_log_entries, :inverse_of => :release_log_entry_category, :dependent => :nullify
belongs_to :release_log_queue, :inverse_of => :release_log_entry_categories

Expand Down
2 changes: 0 additions & 2 deletions app/models/release_log_notification.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
class ReleaseLogNotification < ActiveRecord::Base
include Redmine::I18n

unloadable

TYPE_PUBLISH = 'publish'
TYPE_SUCCESSFUL_RELEASE = 'successful_release'
TYPE_ROLLBACK = 'rollback'
Expand Down
4 changes: 1 addition & 3 deletions app/models/release_log_queue.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
class ReleaseLogQueue < ActiveRecord::Base
include Redmine::I18n

unloadable

DATE_INTERPOLATIONS = {
:year => lambda { |date| date.strftime('%Y') },
:year_short => lambda { |date| date.strftime('%y') },
Expand All @@ -25,7 +23,7 @@ class ReleaseLogQueue < ActiveRecord::Base

accepts_nested_attributes_for :release_log_entry_categories, :allow_destroy => true

validates :release_log_entry_categories, :association_count => { :minimum => 1, :unless => 'group_by_issue_type' }
validates :release_log_entry_categories, :association_count => { :minimum => 1, :unless => lambda { group_by_issue_type } }

validates :name,
:presence => true,
Expand Down
13 changes: 5 additions & 8 deletions init.rb
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
require 'monkey/patcher'
require_relative 'lib/monkey/patcher'
require_relative 'app/helpers/release_logs_helper'

ActionDispatch::Callbacks.to_prepare do
ReleaseLogs::Patcher.register_patches
end
Monkey::Patcher.register_patches

Redmine::Plugin.register :release_logs do
name 'Release Logs plugin'
author 'Lazarus Lazaridis'
description 'Redmine plugin for managing project releases'
version '1.0.0'
version '1.0.1'
url 'https://github.com/iridakos/release_logs'
author_url 'http://www.arubystory.com'
requires_redmine :version_or_higher => '2.5.2'
requires_redmine :version_or_higher => '5.1.1'

permission :manage_release_log_configurations, :release_log_configurations => [:index, :new, :create, :edit, :update, :destroy]
permission :manage_release_log_queues, :release_log_queues => [:index, :new, :create, :edit, :update, :destroy]
Expand Down Expand Up @@ -40,5 +39,3 @@
end
end

require 'hooks/release_logs_hook_listener'
require 'release_logs/searches/release_log_query'
9 changes: 5 additions & 4 deletions lib/monkey/patcher.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
module ReleaseLogs
module Monkey
class Patcher
def self.register_patches
Project.class_eval do
has_one :release_log_configuration, :inverse_of => :project, :dependent => :destroy
has_many :release_logs, :inverse_of => :project, :dependent => :destroy
has_one :release_log_configuration, :dependent => :destroy
has_many :release_logs, :dependent => :destroy

def release_log_enabled?
release_log_configuration.present? && release_log_configuration.enabled?
Expand All @@ -15,13 +15,14 @@ def queue_release_log_enabled?
end

User.class_eval do
has_many :release_logs, :inverse_of => :user, :dependent => :destroy
has_many :release_logs, :dependent => :destroy
end

IssuesController.class_eval do
include ReleaseLogsHelper

helper :release_logs
helper ReleaseLogsHelper
end

ApplicationHelper.class_eval do
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
module RedmineViewCustomize
class ReleaseLogsHookListener < Redmine::Hook::ViewListener
def view_layouts_base_html_head(context)
stylesheet_link_tag 'release-logs', :plugin => 'release_logs'
end

render_on :view_issues_show_description_bottom, :partial => 'hooks/issue_hook'
end
end
21 changes: 11 additions & 10 deletions lib/release_log_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ class ReleaseLogMailer < Mailer

helper :release_logs

def prepare_mail(release_log)
def prepare_mail(user, release_log)
@release_log = release_log

@release_log_configuration = release_log.project.release_log_configuration
Expand All @@ -28,34 +28,35 @@ def prepare_mail(release_log)
recipient_addresses << @release_log_queue.recipient_addresses if @release_log_queue.present?
recipient_addresses = recipient_addresses.flatten.uniq

mail(:to => recipient_addresses,

mail(:to => user,
:subject => "#{release_log.title} - #{I18n.translate(:release_logs_release_notifications)}") do |format|
format.html {
render :text => template
}
end
end

def release_log_publish_notification(release_log)
prepare_mail(release_log) do
def release_log_publish_notification(user, release_log)
prepare_mail(user, release_log) do
render_to_string(:template => 'release_log_mailer/release_log_publish_notification')
end
end

def release_log_rollback_notification(release_log)
prepare_mail(release_log) do
def release_log_rollback_notification(user, release_log)
prepare_mail(user, release_log) do
render_to_string(:template => 'release_log_mailer/release_log_rollback_notification')
end
end

def release_log_cancel_notification(release_log)
prepare_mail(release_log) do
def release_log_cancel_notification(user, release_log)
prepare_mail(user, release_log) do
render_to_string(:template => 'release_log_mailer/release_log_cancel_notification')
end
end

def release_log_successful_release_notification(release_log)
prepare_mail(release_log) do
def release_log_successful_release_notification(user, release_log)
prepare_mail(user, release_log) do
render_to_string(:template => 'release_log_mailer/release_log_successful_release_notification')
end
end
Expand Down
Loading