end
def create
- @repository = Repository.factory(params[:repository_scm], params[:repository])
+ attrs = pickup_extra_info
+ @repository = Repository.factory(params[:repository_scm], attrs[:attrs])
+ if attrs[:attrs_extra].keys.any?
+ @repository.merge_extra_info(attrs[:attrs_extra])
+ end
@repository.project = @project
if request.post? && @repository.save
redirect_to settings_project_path(@project, :tab => 'repositories')
end
def update
- @repository.attributes = params[:repository]
+ attrs = pickup_extra_info
+ @repository.attributes = attrs[:attrs]
+ if attrs[:attrs_extra].keys.any?
+ @repository.merge_extra_info(attrs[:attrs_extra])
+ end
@repository.project = @project
if request.put? && @repository.save
redirect_to settings_project_path(@project, :tab => 'repositories')
end
end
+ def pickup_extra_info
+ p = {}
+ p_extra = {}
+ params[:repository].each do |k, v|
+ if k =~ /^extra_/
+ p_extra[k] = v
+ else
+ p[k] = v
+ end
+ end
+ {:attrs => p, :attrs_extra => p_extra}
+ end
+ private :pickup_extra_info
+
def committers
@committers = @repository.committers
@users = @project.users
super(attr_name, *args)
end
- alias :attributes_without_extra_info= :attributes=
- def attributes=(new_attributes)
- return if new_attributes.nil?
- attributes = new_attributes.dup
- attributes.stringify_keys!
-
- p = {}
- p_extra = {}
- attributes.each do |k, v|
- if k =~ /^extra_/
- p_extra[k] = v
- else
- p[k] = v
- end
- end
-
- send :attributes_without_extra_info=, p
- if p_extra.keys.any?
- merge_extra_info(p_extra)
- end
- end
-
# Removes leading and trailing whitespace
def url=(arg)
write_attribute(:url, arg ? arg.to_s.strip : nil)
Setting.default_language = 'en'
end
+ def test_create_and_update
+ @request.session[:user_id] = 1
+ assert_difference 'Repository.count' do
+ post :create, :project_id => 'subproject1',
+ :repository_scm => 'Git',
+ :repository => {
+ :url => '/test',
+ :is_default => '0',
+ :identifier => 'test-create',
+ :extra_report_last_commit => '1',
+ }
+ end
+ assert_response 302
+ repository = Repository.first(:order => 'id DESC')
+ assert_kind_of Repository::Git, repository
+ assert_equal '/test', repository.url
+ assert_equal true, repository.extra_report_last_commit
+
+ put :update, :id => repository.id,
+ :repository => {
+ :extra_report_last_commit => '0',
+ :identifier => 'test-update',
+ }
+ assert_response 302
+ repo2 = Repository.find(repository.id)
+ assert_equal 'test-update', repo2.identifier
+ assert_equal false, repo2.extra_report_last_commit
+ end
+
if File.directory?(REPOSITORY_PATH)
def test_get_new
@request.session[:user_id] = 1