kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
11 years ago
|
#-- copyright
|
||
|
# OpenProject is a project management system.
|
||
|
#
|
||
|
# Copyright (C) 2012-2013 the OpenProject Team
|
||
|
#
|
||
|
# This program is free software; you can redistribute it and/or
|
||
|
# modify it under the terms of the GNU General Public License version 3.
|
||
|
#
|
||
|
# See doc/COPYRIGHT.rdoc for more details.
|
||
|
#++
|
||
|
|
||
|
require 'yaml'
|
||
|
|
||
|
require_relative 'utils'
|
||
|
|
||
|
module Migration
|
||
|
module Utils
|
||
|
TimelineWithHistoricalComparison = Struct.new(:id, :from_date, :to_date)
|
||
|
|
||
|
OPTIONS_COLUMN = 'options'
|
||
|
HISTORICAL_DATE_FROM = 'compare_to_historical_one'
|
||
|
HISTORICAL_DATE_TO = 'compare_to_historical_two'
|
||
|
|
||
|
def timelines_with_historical_comparisons
|
||
|
timelines = select_all <<-SQL
|
||
|
SELECT id, options
|
||
|
FROM timelines
|
||
|
WHERE options LIKE '%comparison: historical%'
|
||
|
SQL
|
||
|
|
||
|
timelines.each_with_object([]) do |r, l|
|
||
|
options = YAML.load(r[OPTIONS_COLUMN])
|
||
|
from_date = options[HISTORICAL_DATE_FROM]
|
||
|
to_date = options[HISTORICAL_DATE_TO]
|
||
|
|
||
|
l << TimelineWithHistoricalComparison.new(r['id'], from_date, to_date)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def update_options(callback)
|
||
|
Proc.new do |row|
|
||
|
timelines_opts = YAML.load(row[OPTIONS_COLUMN])
|
||
|
|
||
|
migrated_options = callback.call(timelines_opts.clone) unless callback.nil?
|
||
|
|
||
|
row[OPTIONS_COLUMN] = YAML.dump(HashWithIndifferentAccess.new(migrated_options))
|
||
|
|
||
|
UpdateResult.new(row, true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def rename_columns(timelines_opts, options)
|
||
|
return timelines_opts unless timelines_opts.has_key? 'columns'
|
||
|
|
||
|
columns = timelines_opts['columns']
|
||
|
|
||
|
columns.map! do |c|
|
||
|
options.has_key?(c) ? options[c] : c
|
||
|
end
|
||
|
|
||
|
timelines_opts['columns'] = columns.uniq
|
||
|
|
||
|
timelines_opts
|
||
|
end
|
||
|
end
|
||
|
end
|