diff --git a/lib/open_project/patches/declarative_option.rb b/lib/open_project/patches/declarative_option.rb new file mode 100644 index 0000000000..e38d03654b --- /dev/null +++ b/lib/open_project/patches/declarative_option.rb @@ -0,0 +1,50 @@ +#-- copyright +# OpenProject is an open source project management software. +# Copyright (C) 2012-2020 the OpenProject GmbH +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See docs/COPYRIGHT.rdoc for more details. +#++ + +require 'representable' + +module OpenProject::Patches::DeclarativeOption + extend ActiveSupport::Concern + + included do + private + + # Override Declarative::Option to avoid ruby 2.7.1 warnings about using the last argument as keyword parameter. + def lambda_for_proc(value, options) + return ->(context, **args) { context.instance_exec(**args, &value) } if options[:instance_exec] + value + end + end +end + +unless Declarative::Option.included_modules.include?(OpenProject::Patches::DeclarativeOption) + if Gem.loaded_specs['declarative-option'].version > Gem::Version.create('0.1.0') + raise "Check whether the patch to Declarative::Option is still necessary" + end + Declarative::Option.send(:include, OpenProject::Patches::DeclarativeOption) +end