From 9f33898f7aa9c2269aef8aad6cbd9075ab2efd3e Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Thu, 12 Feb 2015 09:19:55 -0800 Subject: [PATCH] All services can have templates. --- app/controllers/admin/services_controller.rb | 14 +++++++------- app/models/project.rb | 7 +------ app/models/service.rb | 5 +++++ app/views/admin/services/_form.html.haml | 14 +++++++++++++- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/app/controllers/admin/services_controller.rb b/app/controllers/admin/services_controller.rb index 5697e1a5492..554a7d83d9f 100644 --- a/app/controllers/admin/services_controller.rb +++ b/app/controllers/admin/services_controller.rb @@ -26,18 +26,14 @@ class Admin::ServicesController < Admin::ApplicationController def services_templates templates = [] - allowed_templates.each do |service| - service_template = service.constantize + Service.available_services_names.each do |service| + service_template = service.concat("_service").camelize.constantize templates << service_template.where(template: true).first_or_create end templates end - def allowed_templates - %w( JiraService RedmineService CustomIssueTrackerService ) - end - def service @service ||= Service.where(id: params[:id], template: true).first end @@ -45,7 +41,11 @@ class Admin::ServicesController < Admin::ApplicationController def application_services_params params.permit(:id, service: [ - :title, :project_url, :description, :issues_url, :new_issue_url + :title, :token, :type, :active, :api_key, :subdomain, + :room, :recipients, :project_url, :webhook, + :user_key, :device, :priority, :sound, :bamboo_url, :username, :password, + :build_key, :server, :teamcity_url, :build_type, + :description, :issues_url, :new_issue_url, :restrict_to_branch ]) end end diff --git a/app/models/project.rb b/app/models/project.rb index f7cbbf3ace4..56e1aa29040 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -355,7 +355,7 @@ class Project < ActiveRecord::Base def build_missing_services services_templates = Service.where(template: true) - available_services_names.each do |service_name| + Service.available_services_names.each do |service_name| service = find_service(services, service_name) # If service is available but missing in db @@ -377,11 +377,6 @@ class Project < ActiveRecord::Base list.find { |service| service.to_param == name } end - def available_services_names - %w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla asana - emails_on_push gemnasium slack pushover buildbox bamboo teamcity jira redmine custom_issue_tracker) - end - def gitlab_ci? gitlab_ci_service && gitlab_ci_service.active end diff --git a/app/models/service.rb b/app/models/service.rb index 0099dbe65c0..f87d875c10a 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -98,6 +98,11 @@ class Service < ActiveRecord::Base self.category == :issue_tracker end + def self.available_services_names + %w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla asana + emails_on_push gemnasium slack pushover buildbox bamboo teamcity jira redmine custom_issue_tracker) + end + def self.create_from_template(project_id, template) service = template.dup service.template = false diff --git a/app/views/admin/services/_form.html.haml b/app/views/admin/services/_form.html.haml index d7490274489..d8242e37621 100644 --- a/app/views/admin/services/_form.html.haml +++ b/app/views/admin/services/_form.html.haml @@ -12,13 +12,25 @@ - @service.fields.each do |field| - name = field[:name] + - value = @service.send(name) unless field[:type] == 'password' - type = field[:type] - placeholder = field[:placeholder] + - choices = field[:choices] + - default_choice = field[:default_choice] .form-group = f.label name, class: "control-label" .col-sm-10 - = f.text_field name, class: "form-control", placeholder: placeholder + - if type == 'text' + = f.text_field name, class: "form-control", placeholder: placeholder + - elsif type == 'textarea' + = f.text_area name, rows: 5, class: "form-control", placeholder: placeholder + - elsif type == 'checkbox' + = f.check_box name + - elsif type == 'select' + = f.select name, options_for_select(choices, value ? value : default_choice), {}, { class: "form-control" } + - elsif type == 'password' + = f.password_field name, class: 'form-control' .form-actions = f.submit 'Save', class: 'btn btn-save'