Patch by Minoru Maeda (@maeda-m). git-svn-id: https://svn.redmine.org/redmine/trunk@22619 e93f8b46-1217-0410-a6f0-8f06a7374b81pull/145/merge
# TODO: Need to check the impact on plugins. Disable for now. | # TODO: Need to check the impact on plugins. Disable for now. | ||||
- 'lib/redmine/preparation.rb' | - 'lib/redmine/preparation.rb' | ||||
Rails/ApplicationRecord: | |||||
Exclude: | |||||
- 'db/migrate/0*.rb' | |||||
Rails/BulkChangeTable: | Rails/BulkChangeTable: | ||||
Exclude: | Exclude: | ||||
- 'db/migrate/20120714122200_add_workflows_rule_fields.rb' | - 'db/migrate/20120714122200_add_workflows_rule_fields.rb' |
- 'app/models/mail_handler.rb' | - 'app/models/mail_handler.rb' | ||||
- 'app/models/mailer.rb' | - 'app/models/mailer.rb' | ||||
# This cop supports unsafe autocorrection (--autocorrect-all). | |||||
Rails/ApplicationRecord: | |||||
Enabled: false | |||||
# This cop supports safe autocorrection (--autocorrect). | # This cop supports safe autocorrection (--autocorrect). | ||||
# Configuration parameters: Include. | # Configuration parameters: Include. | ||||
# Include: **/test/**/* | # Include: **/test/**/* |
nil | nil | ||||
end | end | ||||
return unless klass && Class === klass # rubocop:disable Style/CaseEquality | return unless klass && Class === klass # rubocop:disable Style/CaseEquality | ||||
return unless klass < ActiveRecord::Base | |||||
return unless klass < ApplicationRecord | |||||
return unless klass < Redmine::Acts::Watchable::InstanceMethods | return unless klass < Redmine::Acts::Watchable::InstanceMethods | ||||
scope = klass.where(:id => Array.wrap(params[:object_id])) | scope = klass.where(:id => Array.wrap(params[:object_id])) |
# frozen_string_literal: true | |||||
# Redmine - project management software | |||||
# Copyright (C) 2006-2023 Jean-Philippe Lang | |||||
# | |||||
# 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. | |||||
class ApplicationRecord < ActiveRecord::Base | |||||
self.abstract_class = true | |||||
# Translate attribute names for validation errors display | |||||
def self.human_attribute_name(attr, options = {}) | |||||
prepared_attr = attr.to_s.sub(/_id$/, '').sub(/^.+\./, '') | |||||
class_prefix = name.underscore.tr('/', '_') | |||||
redmine_default = [ | |||||
:"field_#{class_prefix}_#{prepared_attr}", | |||||
:"field_#{prepared_attr}" | |||||
] | |||||
options[:default] = redmine_default + Array(options[:default]) | |||||
super | |||||
end | |||||
end |
require "fileutils" | require "fileutils" | ||||
require "zip" | require "zip" | ||||
class Attachment < ActiveRecord::Base | |||||
class Attachment < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :container, :polymorphic => true | belongs_to :container, :polymorphic => true | ||||
belongs_to :author, :class_name => "User" | belongs_to :author, :class_name => "User" |
class AuthSourceException < StandardError; end | class AuthSourceException < StandardError; end | ||||
class AuthSourceTimeoutException < AuthSourceException; end | class AuthSourceTimeoutException < AuthSourceException; end | ||||
class AuthSource < ActiveRecord::Base | |||||
class AuthSource < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
include Redmine::SubclassFactory | include Redmine::SubclassFactory | ||||
include Redmine::Ciphering | include Redmine::Ciphering |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Board < ActiveRecord::Base | |||||
class Board < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :project | belongs_to :project | ||||
has_many :messages, lambda {order("#{Message.table_name}.created_on DESC")}, :dependent => :destroy | has_many :messages, lambda {order("#{Message.table_name}.created_on DESC")}, :dependent => :destroy |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Change < ActiveRecord::Base | |||||
class Change < ApplicationRecord | |||||
belongs_to :changeset | belongs_to :changeset | ||||
validates_presence_of :changeset_id, :action, :path | validates_presence_of :changeset_id, :action, :path |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Changeset < ActiveRecord::Base | |||||
class Changeset < ApplicationRecord | |||||
belongs_to :repository | belongs_to :repository | ||||
belongs_to :user | belongs_to :user | ||||
has_many :filechanges, :class_name => 'Change', :dependent => :delete_all | has_many :filechanges, :class_name => 'Change', :dependent => :delete_all |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Comment < ActiveRecord::Base | |||||
class Comment < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :commented, :polymorphic => true, :counter_cache => true | belongs_to :commented, :polymorphic => true, :counter_cache => true | ||||
belongs_to :author, :class_name => 'User' | belongs_to :author, :class_name => 'User' |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class CustomField < ActiveRecord::Base | |||||
class CustomField < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
include Redmine::SubclassFactory | include Redmine::SubclassFactory | ||||
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class CustomFieldEnumeration < ActiveRecord::Base | |||||
class CustomFieldEnumeration < ApplicationRecord | |||||
belongs_to :custom_field | belongs_to :custom_field | ||||
validates_presence_of :name, :position, :custom_field_id | validates_presence_of :name, :position, :custom_field_id |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class CustomValue < ActiveRecord::Base | |||||
class CustomValue < ApplicationRecord | |||||
belongs_to :custom_field | belongs_to :custom_field | ||||
belongs_to :customized, :polymorphic => true | belongs_to :customized, :polymorphic => true | ||||
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Document < ActiveRecord::Base | |||||
class Document < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :project | belongs_to :project | ||||
belongs_to :category, :class_name => "DocumentCategory" | belongs_to :category, :class_name => "DocumentCategory" |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class EmailAddress < ActiveRecord::Base | |||||
class EmailAddress < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :user | belongs_to :user |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class EnabledModule < ActiveRecord::Base | |||||
class EnabledModule < ApplicationRecord | |||||
belongs_to :project | belongs_to :project | ||||
acts_as_watchable | acts_as_watchable | ||||
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Enumeration < ActiveRecord::Base | |||||
class Enumeration < ApplicationRecord | |||||
include Redmine::SubclassFactory | include Redmine::SubclassFactory | ||||
default_scope lambda {order(:position)} | default_scope lambda {order(:position)} |
require 'csv' | require 'csv' | ||||
class Import < ActiveRecord::Base | |||||
class Import < ApplicationRecord | |||||
has_many :items, :class_name => 'ImportItem', :dependent => :delete_all | has_many :items, :class_name => 'ImportItem', :dependent => :delete_all | ||||
belongs_to :user | belongs_to :user | ||||
serialize :settings | serialize :settings |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class ImportItem < ActiveRecord::Base | |||||
class ImportItem < ApplicationRecord | |||||
belongs_to :import | belongs_to :import | ||||
validates_presence_of :import_id, :position | validates_presence_of :import_id, :position |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Issue < ActiveRecord::Base | |||||
class Issue < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
include Redmine::Utils::DateCalculation | include Redmine::Utils::DateCalculation | ||||
include Redmine::I18n | include Redmine::I18n |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class IssueCategory < ActiveRecord::Base | |||||
class IssueCategory < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :project | belongs_to :project | ||||
belongs_to :assigned_to, :class_name => 'Principal' | belongs_to :assigned_to, :class_name => 'Principal' |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class IssueRelation < ActiveRecord::Base | |||||
class IssueRelation < ApplicationRecord | |||||
# Class used to represent the relations of an issue | # Class used to represent the relations of an issue | ||||
class Relations < Array | class Relations < Array | ||||
include Redmine::I18n | include Redmine::I18n |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class IssueStatus < ActiveRecord::Base | |||||
class IssueStatus < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
before_destroy :check_integrity | before_destroy :check_integrity |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Journal < ActiveRecord::Base | |||||
class Journal < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :journalized, :polymorphic => true | belongs_to :journalized, :polymorphic => true |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class JournalDetail < ActiveRecord::Base | |||||
class JournalDetail < ApplicationRecord | |||||
belongs_to :journal | belongs_to :journal | ||||
def custom_field | def custom_field |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Member < ActiveRecord::Base | |||||
class Member < ApplicationRecord | |||||
belongs_to :user | belongs_to :user | ||||
belongs_to :principal, :foreign_key => 'user_id' | belongs_to :principal, :foreign_key => 'user_id' | ||||
has_many :member_roles, :dependent => :destroy | has_many :member_roles, :dependent => :destroy |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class MemberRole < ActiveRecord::Base | |||||
class MemberRole < ApplicationRecord | |||||
belongs_to :member | belongs_to :member | ||||
belongs_to :role | belongs_to :role | ||||
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Message < ActiveRecord::Base | |||||
class Message < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :board | belongs_to :board | ||||
belongs_to :author, :class_name => 'User' | belongs_to :author, :class_name => 'User' |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class News < ActiveRecord::Base | |||||
class News < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :project | belongs_to :project | ||||
belongs_to :author, :class_name => 'User' | belongs_to :author, :class_name => 'User' |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Principal < ActiveRecord::Base | |||||
class Principal < ApplicationRecord | |||||
self.table_name = "#{table_name_prefix}users#{table_name_suffix}" | self.table_name = "#{table_name_prefix}users#{table_name_suffix}" | ||||
# Account statuses | # Account statuses |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Project < ActiveRecord::Base | |||||
class Project < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
include Redmine::NestedSet::ProjectNestedSet | include Redmine::NestedSet::ProjectNestedSet | ||||
end | end | ||||
end | end | ||||
class Query < ActiveRecord::Base | |||||
class Query < ApplicationRecord | |||||
class StatementInvalid < ::ActiveRecord::StatementInvalid | class StatementInvalid < ::ActiveRecord::StatementInvalid | ||||
end | end | ||||
class ScmFetchError < StandardError; end | class ScmFetchError < StandardError; end | ||||
class Repository < ActiveRecord::Base | |||||
class Repository < ApplicationRecord | |||||
include Redmine::Ciphering | include Redmine::Ciphering | ||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Role < ActiveRecord::Base | |||||
class Role < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
# Custom coder for the permissions attribute that should be an | # Custom coder for the permissions attribute that should be an |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Setting < ActiveRecord::Base | |||||
class Setting < ApplicationRecord | |||||
PASSWORD_CHAR_CLASSES = { | PASSWORD_CHAR_CLASSES = { | ||||
'uppercase' => /[A-Z]/, | 'uppercase' => /[A-Z]/, | ||||
'lowercase' => /[a-z]/, | 'lowercase' => /[a-z]/, |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class TimeEntry < ActiveRecord::Base | |||||
class TimeEntry < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
# could have used polymorphic association | # could have used polymorphic association | ||||
# project association here allows easy loading of time entries at project level with one database trip | # project association here allows easy loading of time entries at project level with one database trip |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Token < ActiveRecord::Base | |||||
class Token < ApplicationRecord | |||||
belongs_to :user | belongs_to :user | ||||
validates_uniqueness_of :value, :case_sensitive => true | validates_uniqueness_of :value, :case_sensitive => true | ||||
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Tracker < ActiveRecord::Base | |||||
class Tracker < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
CORE_FIELDS_UNDISABLABLE = %w(project_id tracker_id subject is_private).freeze | CORE_FIELDS_UNDISABLABLE = %w(project_id tracker_id subject is_private).freeze |
require 'redmine/my_page' | require 'redmine/my_page' | ||||
class UserPreference < ActiveRecord::Base | |||||
class UserPreference < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :user | belongs_to :user |
end | end | ||||
end | end | ||||
class Version < ActiveRecord::Base | |||||
class Version < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
after_update :update_issues_from_sharing_change | after_update :update_issues_from_sharing_change |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Watcher < ActiveRecord::Base | |||||
class Watcher < ApplicationRecord | |||||
belongs_to :watchable, :polymorphic => true | belongs_to :watchable, :polymorphic => true | ||||
belongs_to :user, :class_name => 'Principal' | belongs_to :user, :class_name => 'Principal' | ||||
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class Wiki < ActiveRecord::Base | |||||
class Wiki < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :project | belongs_to :project | ||||
has_many :pages, lambda {order(Arel.sql('LOWER(title)').asc)}, :class_name => 'WikiPage', :dependent => :destroy | has_many :pages, lambda {order(Arel.sql('LOWER(title)').asc)}, :class_name => 'WikiPage', :dependent => :destroy |
require 'zlib' | require 'zlib' | ||||
class WikiContent < ActiveRecord::Base | |||||
class WikiContent < ApplicationRecord | |||||
self.locking_column = 'version' | self.locking_column = 'version' | ||||
belongs_to :page, :class_name => 'WikiPage' | belongs_to :page, :class_name => 'WikiPage' | ||||
belongs_to :author, :class_name => 'User' | belongs_to :author, :class_name => 'User' |
require 'zlib' | require 'zlib' | ||||
class WikiContentVersion < ActiveRecord::Base | |||||
class WikiContentVersion < ApplicationRecord | |||||
belongs_to :page, :class_name => 'WikiPage' | belongs_to :page, :class_name => 'WikiPage' | ||||
belongs_to :author, :class_name => 'User' | belongs_to :author, :class_name => 'User' | ||||
require 'redmine/string_array_diff/diff' | require 'redmine/string_array_diff/diff' | ||||
class WikiPage < ActiveRecord::Base | |||||
class WikiPage < ApplicationRecord | |||||
include Redmine::SafeAttributes | include Redmine::SafeAttributes | ||||
belongs_to :wiki | belongs_to :wiki |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class WikiRedirect < ActiveRecord::Base | |||||
class WikiRedirect < ApplicationRecord | |||||
belongs_to :wiki | belongs_to :wiki | ||||
validates_presence_of :wiki_id, :title, :redirects_to | validates_presence_of :wiki_id, :title, :redirects_to |
# along with this program; if not, write to the Free Software | # along with this program; if not, write to the Free Software | ||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
class WorkflowRule < ActiveRecord::Base | |||||
class WorkflowRule < ApplicationRecord | |||||
self.table_name = "#{table_name_prefix}workflows#{table_name_suffix}" | self.table_name = "#{table_name_prefix}workflows#{table_name_suffix}" | ||||
belongs_to :role | belongs_to :role |
# frozen_string_literal: true | # frozen_string_literal: true | ||||
module ActiveRecord | module ActiveRecord | ||||
class Base | |||||
# Translate attribute names for validation errors display | |||||
def self.human_attribute_name(attr, options = {}) | |||||
prepared_attr = attr.to_s.delete_suffix('_id').sub(/^.+\./, '') | |||||
class_prefix = name.underscore.tr('/', '_') | |||||
redmine_default = [ | |||||
:"field_#{class_prefix}_#{prepared_attr}", | |||||
:"field_#{prepared_attr}" | |||||
] | |||||
options[:default] = redmine_default + Array(options[:default]) | |||||
super | |||||
end | |||||
end | |||||
# Undefines private Kernel#open method to allow using `open` scopes in models. | # Undefines private Kernel#open method to allow using `open` scopes in models. | ||||
# See Defect #11545 (http://www.redmine.org/issues/11545) for details. | # See Defect #11545 (http://www.redmine.org/issues/11545) for details. |
class Meeting < ActiveRecord::Base | |||||
class Meeting < ApplicationRecord | |||||
belongs_to :project | belongs_to :project | ||||
acts_as_event :title => Proc.new {|o| "#{o.scheduled_on} Meeting"}, | acts_as_event :title => Proc.new {|o| "#{o.scheduled_on} Meeting"}, |
end | end | ||||
def parent_class_name | def parent_class_name | ||||
options[:parent] || "ActiveRecord::Base" | |||||
options[:parent] || "ApplicationRecord" | |||||
end | end | ||||
end | end |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
require_relative 'lib/acts_as_activity_provider' | require_relative 'lib/acts_as_activity_provider' | ||||
ActiveRecord::Base.send(:include, Redmine::Acts::ActivityProvider) | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send(:include, Redmine::Acts::ActivityProvider) | |||||
end |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
require_relative 'lib/acts_as_attachable' | require_relative 'lib/acts_as_attachable' | ||||
ActiveRecord::Base.send(:include, Redmine::Acts::Attachable) | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send(:include, Redmine::Acts::Attachable) | |||||
end |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
require_relative 'lib/acts_as_customizable' | require_relative 'lib/acts_as_customizable' | ||||
ActiveRecord::Base.send(:include, Redmine::Acts::Customizable) | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send(:include, Redmine::Acts::Customizable) | |||||
end |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
require_relative 'lib/acts_as_event' | require_relative 'lib/acts_as_event' | ||||
ActiveRecord::Base.send(:include, Redmine::Acts::Event) | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send(:include, Redmine::Acts::Event) | |||||
end |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | ||||
require_relative 'lib/acts_as_searchable' | require_relative 'lib/acts_as_searchable' | ||||
ActiveRecord::Base.send(:include, Redmine::Acts::Searchable) | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send(:include, Redmine::Acts::Searchable) | |||||
end |
Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children | Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children | ||||
association. This requires that you have a foreign key column, which by default is called +parent_id+. | association. This requires that you have a foreign key column, which by default is called +parent_id+. | ||||
class Category < ActiveRecord::Base | |||||
class Category < ApplicationRecord | |||||
acts_as_tree :order => "name" | acts_as_tree :order => "name" | ||||
end | end | ||||
# frozen_string_literal: true | # frozen_string_literal: true | ||||
require_relative 'lib/active_record/acts/tree' | require_relative 'lib/active_record/acts/tree' | ||||
ActiveRecord::Base.send :include, ActiveRecord::Acts::Tree | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send :include, ActiveRecord::Acts::Tree | |||||
end |
# Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children | # Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children | ||||
# association. This requires that you have a foreign key column, which by default is called +parent_id+. | # association. This requires that you have a foreign key column, which by default is called +parent_id+. | ||||
# | # | ||||
# class Category < ActiveRecord::Base | |||||
# class Category < ApplicationRecord | |||||
# acts_as_tree :order => "name" | # acts_as_tree :order => "name" | ||||
# end | # end | ||||
# | # |
end | end | ||||
end | end | ||||
class Mixin < ActiveRecord::Base | |||||
class Mixin < ApplicationRecord | |||||
end | end | ||||
class TreeMixin < Mixin | class TreeMixin < Mixin |
# Include hook code here | # Include hook code here | ||||
require_relative 'lib/acts_as_watchable' | require_relative 'lib/acts_as_watchable' | ||||
ActiveRecord::Base.send(:include, Redmine::Acts::Watchable) | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send(:include, Redmine::Acts::Watchable) | |||||
end |
# frozen_string_literal: true | # frozen_string_literal: true | ||||
require_relative 'lib/gravatar' | require_relative 'lib/gravatar' | ||||
ActionView::Base.send :include, GravatarHelper::PublicMethods | |||||
Rails.application.reloader.to_prepare do | |||||
ApplicationRecord.send :include, GravatarHelper::PublicMethods | |||||
end |
module Redmine | module Redmine | ||||
module Preparation | module Preparation | ||||
def self.prepare | def self.prepare | ||||
ActiveRecord::Base.include Redmine::Acts::Positioned | |||||
ActiveRecord::Base.include Redmine::Acts::Mentionable | |||||
ActiveRecord::Base.include Redmine::I18n | |||||
ApplicationRecord.include Redmine::Acts::Positioned | |||||
ApplicationRecord.include Redmine::Acts::Mentionable | |||||
ApplicationRecord.include Redmine::I18n | |||||
Scm::Base.add "Subversion" | Scm::Base.add "Subversion" | ||||
Scm::Base.add "Mercurial" | Scm::Base.add "Mercurial" |
Setting.default_language = 'en' | Setting.default_language = 'en' | ||||
end | end | ||||
test "ActiveRecord::Base.human_attribute_name should transform name to field_name" do | |||||
assert_equal l('field_last_login_on'), ActiveRecord::Base.human_attribute_name('last_login_on') | |||||
test "ApplicationRecord.human_attribute_name should transform name to field_name" do | |||||
assert_equal l('field_last_login_on'), ApplicationRecord.human_attribute_name('last_login_on') | |||||
end | end | ||||
test "ActiveRecord::Base.human_attribute_name should cut extra _id suffix for better validation" do | |||||
assert_equal l('field_last_login_on'), ActiveRecord::Base.human_attribute_name('last_login_on_id') | |||||
test "ApplicationRecord.human_attribute_name should cut extra _id suffix for better validation" do | |||||
assert_equal l('field_last_login_on'), ApplicationRecord.human_attribute_name('last_login_on_id') | |||||
end | end | ||||
test "ActiveRecord::Base.human_attribute_name should default to humanized value if no translation has been found (useful for custom fields)" do | |||||
assert_equal 'Patch name', ActiveRecord::Base.human_attribute_name('Patch name') | |||||
test "ApplicationRecord.human_attribute_name should default to humanized value if no translation has been found (useful for custom fields)" do | |||||
assert_equal 'Patch name', ApplicationRecord.human_attribute_name('Patch name') | |||||
end | end | ||||
test 'ActionView::Helpers::FormHelper.date_field should add max=9999-12-31 to limit year value to 4 digits by default' do | test 'ActionView::Helpers::FormHelper.date_field should add max=9999-12-31 to limit year value to 4 digits by default' do |