"LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id"}
cattr_accessor :storage_path
- @@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{RAILS_ROOT}/files"
+ @@storage_path = Redmine::Configuration['attachments_storage_path'] || "#{Rails.root}/files"
def validate
if self.filesize > Setting.attachment_max_size.to_i.kilobytes
def enabled_module_names
enabled_modules.collect(&:name)
end
-
+
+ # Enable a specific module
+ #
+ # Examples:
+ # project.enable_module!(:issue_tracking)
+ # project.enable_module!("issue_tracking")
+ def enable_module!(name)
+ enabled_modules << EnabledModule.new(:name => name.to_s) unless module_enabled?(name)
+ end
+
+ # Disable a module if it exists
+ #
+ # Examples:
+ # project.disable_module!(:issue_tracking)
+ # project.disable_module!("issue_tracking")
+ # project.disable_module!(project.enabled_modules.first)
+ def disable_module!(target)
+ target = enabled_modules.detect{|mod| target.to_s == mod.name} unless enabled_modules.include?(target)
+ target.destroy unless target.blank?
+ end
+
safe_attributes 'name',
'description',
'homepage',
TIS-620)
cattr_accessor :available_settings
- @@available_settings = YAML::load(File.open("#{RAILS_ROOT}/config/settings.yml"))
+ @@available_settings = YAML::load(File.open("#{Rails.root}/config/settings.yml"))
Redmine::Plugin.all.each do |plugin|
next unless plugin.settings
@@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true}
end
def destination_root
- File.join(RAILS_ROOT, plugin_path)
+ File.join(Rails.root, plugin_path)
end
def manifest
end
def destination_root
- File.join(RAILS_ROOT, plugin_path)
+ File.join(Rails.root, plugin_path)
end
def manifest
def month_name(month)
::I18n.t('date.month_names')[month]
end
-
+
def valid_languages
- @@valid_languages ||= Dir.glob(File.join(RAILS_ROOT, 'config', 'locales', '*.yml')).collect {|f| File.basename(f).split('.').first}.collect(&:to_sym)
+ @@valid_languages ||= Dir.glob(File.join(Rails.root, 'config', 'locales', '*.yml')).collect {|f| File.basename(f).split('.').first}.collect(&:to_sym)
end
-
+
def find_language(lang)
@@languages_lookup = valid_languages.inject({}) {|k, v| k[v.to_s.downcase] = v; k }
@@languages_lookup[lang.to_s.downcase]
-# redMine - project management software
-# Copyright (C) 2006-2007 Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011 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.
p.name(id.to_s.humanize) if p.name.nil?
# Adds plugin locales if any
# YAML translation files should be found under <plugin>/config/locales/
- ::I18n.load_path += Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', id.to_s, 'config', 'locales', '*.yml'))
+ ::I18n.load_path += Dir.glob(File.join(Rails.root, 'vendor', 'plugins', id.to_s, 'config', 'locales', '*.yml'))
registered_plugins[id] = p
end
end
if Rails.env == 'development'
# Capture stderr when running in dev environment
- cmd = "#{cmd} 2>>#{RAILS_ROOT}/log/scm.stderr.log"
+ cmd = "#{cmd} 2>>#{Rails.root}/log/scm.stderr.log"
end
begin
if RUBY_VERSION < '1.9'
def self.revision
revision = nil
- entries_path = "#{RAILS_ROOT}/.svn/entries"
+ entries_path = "#{Rails.root}/.svn/entries"
if File.readable?(entries_path)
begin
f = File.open(entries_path, 'r')
# Redmine - project management software
-# Copyright (C) 2006-2009 Jean-Philippe Lang
+# Copyright (C) 2006-2011 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.
module MyPage
module Block
def self.additional_blocks
- @@additional_blocks ||= Dir.glob("#{RAILS_ROOT}/vendor/plugins/*/app/views/my/blocks/_*.{rhtml,erb}").inject({}) do |h,file|
+ @@additional_blocks ||= Dir.glob("#{Rails.root}/vendor/plugins/*/app/views/my/blocks/_*.{rhtml,erb}").inject({}) do |h,file|
name = File.basename(file).split('.').first.gsub(/^_/, '')
h[name] = name.to_sym
h
ActiveRecord::Base.establish_connection\r
(ActiveRecord::Base.connection.tables - skip_tables).each do |table_name|\r
i = "000"\r
- File.open("#{RAILS_ROOT}/#{table_name}.yml", 'w' ) do |file|\r
+ File.open("#{Rails.root}/#{table_name}.yml", 'w' ) do |file|\r
data = ActiveRecord::Base.connection.select_all(sql % table_name)\r
file.write data.inject({}) { |hash, record|\r
# cast extracted values\r
}.to_yaml\r
end\r
end\r
-end\r
+end
+
desc 'Generates a configuration file for cookie store sessions.'
file 'config/initializers/session_store.rb' do
- path = File.join(RAILS_ROOT, 'config', 'initializers', 'session_store.rb')
+ path = File.join(Rails.root, 'config', 'initializers', 'session_store.rb')
secret = ActiveSupport::SecureRandom.hex(40)
File.open(path, 'w') do |f|
f.write <<"EOF"
---
repositories_001:
project_id: 1
- url: file:///<%= RAILS_ROOT.gsub(%r{config\/\.\.}, '') %>/tmp/test/subversion_repository
+ url: file:///<%= Rails.root %>/tmp/test/subversion_repository
id: 10
- root_url: file:///<%= RAILS_ROOT.gsub(%r{config\/\.\.}, '') %>/tmp/test/subversion_repository
+ root_url: file:///<%= Rails.root %>/tmp/test/subversion_repository
password: ""
login: ""
type: Subversion
# check that all language files are valid
def test_localization
- lang_files_count = Dir["#{RAILS_ROOT}/config/locales/*.yml"].size
+ lang_files_count = Dir["#{Rails.root}/config/locales/*.yml"].size
assert_equal lang_files_count, valid_languages.size
valid_languages.each do |lang|
assert set_language_if_valid(lang)
@controller = AttachmentsController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
- Attachment.storage_path = "#{RAILS_ROOT}/test/fixtures/files"
+ Attachment.storage_path = "#{Rails.root}/test/fixtures/files"
User.current = nil
end
# Use a temporary directory for attachment related tests
def set_tmp_attachments_directory
- Dir.mkdir "#{RAILS_ROOT}/tmp/test" unless File.directory?("#{RAILS_ROOT}/tmp/test")
- Dir.mkdir "#{RAILS_ROOT}/tmp/test/attachments" unless File.directory?("#{RAILS_ROOT}/tmp/test/attachments")
- Attachment.storage_path = "#{RAILS_ROOT}/tmp/test/attachments"
+ Dir.mkdir "#{Rails.root}/tmp/test" unless File.directory?("#{Rails.root}/tmp/test")
+ unless File.directory?("#{Rails.root}/tmp/test/attachments")
+ Dir.mkdir "#{Rails.root}/tmp/test/attachments"
+ end
+ Attachment.storage_path = "#{Rails.root}/tmp/test/attachments"
end
-
+
def with_settings(options, &block)
saved_settings = options.keys.inject({}) {|h, k| h[k] = Setting[k].dup; h}
options.each {|k, v| Setting[k] = v}
-# redMine - project management software
-# Copyright (C) 2006-2008 Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011 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 Redmine::Hook::ManagerTest < ActiveSupport::TestCase
fixtures :issues
-
+
# Some hooks that are manually registered in these tests
class TestHook < Redmine::Hook::ViewListener; end
-
+
class TestHook1 < TestHook
def view_layouts_base_html_head(context)
'Test hook 1 listener.'
'Test hook 2 listener.'
end
end
-
+
class TestHook3 < TestHook
def view_layouts_base_html_head(context)
"Context keys: #{context.keys.collect(&:to_s).sort.join(', ')}."
end
end
-
+
class TestLinkToHook < TestHook
def view_layouts_base_html_head(context)
link_to('Issues', :controller => 'issues')
class TestHookHelperController < ActionController::Base
include Redmine::Hook::Helper
end
-
+
class TestHookHelperView < ActionView::Base
include Redmine::Hook::Helper
end
-
+
Redmine::Hook.clear_listeners
-
+
def setup
@hook_module = Redmine::Hook
end
-
+
def teardown
@hook_module.clear_listeners
end
-
+
def test_clear_listeners
assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
@hook_module.add_listener(TestHook1)
@hook_module.add_listener(TestHook2)
assert_equal 2, @hook_module.hook_listeners(:view_layouts_base_html_head).size
-
+
@hook_module.clear_listeners
assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
end
-
+
def test_add_listener
assert_equal 0, @hook_module.hook_listeners(:view_layouts_base_html_head).size
@hook_module.add_listener(TestHook1)
assert_equal 1, @hook_module.hook_listeners(:view_layouts_base_html_head).size
end
-
+
def test_call_hook
@hook_module.add_listener(TestHook1)
assert_equal ['Test hook 1 listener.'], hook_helper.call_hook(:view_layouts_base_html_head)
end
-
+
def test_call_hook_with_context
@hook_module.add_listener(TestHook3)
assert_equal ['Context keys: bar, controller, foo, project, request.'],
hook_helper.call_hook(:view_layouts_base_html_head, :foo => 1, :bar => 'a')
end
-
+
def test_call_hook_with_multiple_listeners
@hook_module.add_listener(TestHook1)
@hook_module.add_listener(TestHook2)
assert_equal ['Test hook 1 listener.', 'Test hook 2 listener.'], hook_helper.call_hook(:view_layouts_base_html_head)
end
-
+
# Context: Redmine::Hook::Helper.call_hook default_url
def test_call_hook_default_url_options
@hook_module.add_listener(TestLinkToHook)
@hook_module.add_listener(TestHook3)
assert_match /project/i, hook_helper.call_hook(:view_layouts_base_html_head)[0]
end
-
+
def test_call_hook_from_controller_with_controller_added_to_context
@hook_module.add_listener(TestHook3)
assert_match /controller/i, hook_helper.call_hook(:view_layouts_base_html_head)[0]
end
-
+
def test_call_hook_from_controller_with_request_added_to_context
@hook_module.add_listener(TestHook3)
assert_match /request/i, hook_helper.call_hook(:view_layouts_base_html_head)[0]
end
-
+
def test_call_hook_from_view_with_project_added_to_context
@hook_module.add_listener(TestHook3)
assert_match /project/i, view_hook_helper.call_hook(:view_layouts_base_html_head)
end
-
+
def test_call_hook_from_view_with_controller_added_to_context
@hook_module.add_listener(TestHook3)
assert_match /controller/i, view_hook_helper.call_hook(:view_layouts_base_html_head)
end
-
+
def test_call_hook_from_view_with_request_added_to_context
@hook_module.add_listener(TestHook3)
assert_match /request/i, view_hook_helper.call_hook(:view_layouts_base_html_head)
def test_call_hook_should_not_change_the_default_url_for_email_notifications
issue = Issue.find(1)
-
+
ActionMailer::Base.deliveries.clear
Mailer.deliver_issue_add(issue)
mail = ActionMailer::Base.deliveries.last
-
+
@hook_module.add_listener(TestLinkToHook)
hook_helper.call_hook(:view_layouts_base_html_head)
-
+
ActionMailer::Base.deliveries.clear
Mailer.deliver_issue_add(issue)
mail2 = ActionMailer::Base.deliveries.last
-
+
assert_equal mail.body, mail2.body
end
-
+
def hook_helper
@hook_helper ||= TestHookHelperController.new
end
def view_hook_helper
- @view_hook_helper ||= TestHookHelperView.new(RAILS_ROOT + '/app/views')
+ @view_hook_helper ||= TestHookHelperView.new(Rails.root.to_s + '/app/views')
end
end
end
end
+ context "enabled_modules" do
+ setup do
+ @project = Project.find(1)
+ end
+
+ should "define module by names and preserve ids" do
+ # Remove one module
+ modules = @project.enabled_modules.slice(0..-2)
+ assert modules.any?
+ assert_difference 'EnabledModule.count', -1 do
+ @project.enabled_module_names = modules.collect(&:name)
+ end
+ @project.reload
+ # Ids should be preserved
+ assert_equal @project.enabled_module_ids.sort, modules.collect(&:id).sort
+ end
+
+ should "enable a module" do
+ @project.enabled_module_names = []
+ @project.reload
+ assert_equal [], @project.enabled_module_names
+ #with string
+ @project.enable_module!("issue_tracking")
+ assert_equal ["issue_tracking"], @project.enabled_module_names
+ #with symbol
+ @project.enable_module!(:gantt)
+ assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
+ #don't add a module twice
+ @project.enable_module!("issue_tracking")
+ assert_equal ["issue_tracking", "gantt"], @project.enabled_module_names
+ end
+
+ should "disable a module" do
+ #with string
+ assert @project.enabled_module_names.include?("issue_tracking")
+ @project.disable_module!("issue_tracking")
+ assert ! @project.reload.enabled_module_names.include?("issue_tracking")
+ #with symbol
+ assert @project.enabled_module_names.include?("gantt")
+ @project.disable_module!(:gantt)
+ assert ! @project.reload.enabled_module_names.include?("gantt")
+ #with EnabledModule object
+ first_module = @project.enabled_modules.first
+ @project.disable_module!(first_module)
+ assert ! @project.reload.enabled_module_names.include?(first_module.name)
+ end
+ end
+
def test_enabled_module_names_should_not_recreate_enabled_modules
project = Project.find(1)
# Remove one module