Index: app/helpers/custom_fields_helper.rb =================================================================== --- app/helpers/custom_fields_helper.rb (revision 17628) +++ app/helpers/custom_fields_helper.rb (working copy) @@ -180,4 +180,48 @@ end form.select :edit_tag_style, select_options, :label => :label_display end + + def render_api_issue_custom_field(field, api) + api.custom_field do + api.id field.id + api.name field.name + api.customized_type field.class.customized_class.name.underscore if field.class.customized_class + api.field_format field.field_format + api.regexp field.regexp + api.min_length field.min_length + api.max_length field.max_length + api.is_required field.is_required? + api.is_filter field.is_filter? + api.searchable field.searchable + api.multiple field.multiple? + api.default_value field.default_value + api.visible field.visible? + + values = field.possible_values_options + if values.present? + api.array :possible_values do + values.each do |label, value| + api.possible_value do + api.value value || label + api.label label + end + end + end + end + + if field.is_a?(IssueCustomField) + api.array :trackers do + field.trackers.each do |tracker| + api.tracker :id => tracker.id, :name => tracker.name + end + end + api.array :roles do + field.roles.each do |role| + api.role :id => role.id, :name => role.name + end + end + end + end + end + end Index: app/views/custom_fields/index.api.rsb =================================================================== --- app/views/custom_fields/index.api.rsb (revision 17628) +++ app/views/custom_fields/index.api.rsb (working copy) @@ -1,44 +1,5 @@ api.array :custom_fields do @custom_fields.each do |field| - api.custom_field do - api.id field.id - api.name field.name - api.customized_type field.class.customized_class.name.underscore if field.class.customized_class - api.field_format field.field_format - api.regexp field.regexp - api.min_length field.min_length - api.max_length field.max_length - api.is_required field.is_required? - api.is_filter field.is_filter? - api.searchable field.searchable - api.multiple field.multiple? - api.default_value field.default_value - api.visible field.visible? - - values = field.possible_values_options - if values.present? - api.array :possible_values do - values.each do |label, value| - api.possible_value do - api.value value || label - api.label label - end - end - end - end - - if field.is_a?(IssueCustomField) - api.array :trackers do - field.trackers.each do |tracker| - api.tracker :id => tracker.id, :name => tracker.name - end - end - api.array :roles do - field.roles.each do |role| - api.role :id => role.id, :name => role.name - end - end - end - end + render_api_issue_custom_field field, api end end Index: app/views/projects/show.api.rsb =================================================================== --- app/views/projects/show.api.rsb (revision 17628) +++ app/views/projects/show.api.rsb (working copy) @@ -11,6 +11,14 @@ render_api_custom_values @project.visible_custom_field_values, api render_api_includes(@project, api) + api.array :issue_custom_fields do + @project.all_issue_custom_fields.each do |field| + if field.visible_by? @project + render_api_issue_custom_field field, api + end + end + end if include_in_api_response?('issue_custom_fields') + api.created_on @project.created_on api.updated_on @project.updated_on end Index: test/integration/api_test/projects_test.rb =================================================================== --- test/integration/api_test/projects_test.rb (revision 17628) +++ test/integration/api_test/projects_test.rb (working copy) @@ -138,6 +138,26 @@ assert_select 'enabled_modules[type=array] enabled_module[name=issue_tracking]' end + test "GET /projects/:id.xml with include=issue_custom_fields should return issue custom fields" do + get '/projects/1.xml?include=issue_custom_fields' + assert_response :success + assert_equal 'application/xml', @response.content_type + + assert_select 'issue_custom_fields' do + assert_select 'custom_field' do + assert_select 'name', :text => 'Database' + assert_select 'id', :text => '2' + assert_select 'customized_type', :text => 'issue' + assert_select 'possible_values[type=array]' do + assert_select 'possible_value>value', :text => 'PostgreSQL' + assert_select 'possible_value>label', :text => 'PostgreSQL' + end + assert_select 'trackers[type=array]' + assert_select 'roles[type=array]' + end + end + end + test "POST /projects.xml with valid parameters should create the project" do with_settings :default_projects_modules => ['issue_tracking', 'repository'] do assert_difference('Project.count') do