class Api::ReviewsController < Api::ApiController
def index
+ convert_markdown=(params[:output]=='html')
reviews=select_authorized(:user, Review.search(params), :project)
respond_to do |format|
- format.json { render :json => jsonp(Review.reviews_to_json(reviews)) }
- format.xml {render :xml => Review.reviews_to_xml(reviews)}
+ format.json { render :json => jsonp(Review.reviews_to_json(reviews, convert_markdown)) }
+ format.xml {render :xml => Review.reviews_to_xml(reviews, convert_markdown)}
format.text { render :text => text_not_supported }
end
end
def rest_to_json(rule_failures)
include_review=(params['include_review']=='true')
- JSON(rule_failures.collect{|rule_failure| rule_failure.to_json(include_review)})
+ convert_markdown=(params[:output]=='html')
+ JSON(rule_failures.collect{|rule_failure| rule_failure.to_json(include_review, convert_markdown)})
end
def rest_to_xml(rule_failures)
include_review=(params['include_review']=='true')
+ convert_markdown=(params[:output]=='html')
xml = Builder::XmlMarkup.new(:indent => 0)
xml.instruct!
xml.violations do
rule_failures.each do |rule_failure|
- rule_failure.to_xml(xml, include_review)
+ rule_failure.to_xml(xml, include_review, convert_markdown)
end
end
end
Review.find(:all, :include => [ 'review_comments' ], :order => 'created_at DESC', :conditions => [conditions.join(' AND '), values], :limit => 200)
end
- def self.reviews_to_xml(reviews)
+ def self.reviews_to_xml(reviews, convert_markdown=false)
xml = Builder::XmlMarkup.new(:indent => 0)
xml.instruct!
xml.reviews do
reviews.each do |review|
- review.to_xml(xml)
+ review.to_xml(xml, convert_markdown)
end
end
end
- def to_xml(xml)
+ def to_xml(xml, convert_markdown=false)
xml.review do
xml.id(id.to_i)
xml.createdAt(Api::Utils.format_datetime(created_at))
xml.comment do
xml.author(comment.user.login)
xml.updatedAt(Api::Utils.format_datetime(comment.updated_at))
- xml.text(comment.html_text)
+ if convert_markdown
+ xml.text(comment.html_text)
+ else
+ xml.text(comment.review_text)
+ end
end
end
end
end
end
- def self.reviews_to_json(reviews)
- JSON(reviews.collect{|review| review.to_json()})
+ def self.reviews_to_json(reviews, convert_markdown=false)
+ JSON(reviews.collect{|review| review.to_json(convert_markdown)})
end
- def to_json
+ def to_json(convert_markdown=false)
json = {}
json['id'] = id.to_i
json['createdAt'] = Api::Utils.format_datetime(created_at)
comments << {
'author' => comment.user.login,
'updatedAt' => Api::Utils.format_datetime(comment.updated_at),
- 'text' => comment.html_text
+ 'text' => convert_markdown ? comment.html_text : comment.review_text
}
end
json['comments'] = comments
end
end
- def to_json(include_review=false)
+ def to_json(include_review=false, convert_markdown=false)
json = {}
json['message'] = message
json['line'] = line if line && line>=1
:qualifier => snapshot.project.qualifier,
:language => snapshot.project.language
}
- json['review'] = review.to_json if include_review && review
+ json['review'] = review.to_json(convert_markdown) if include_review && review
json
end
- def to_xml(xml=Builder::XmlMarkup.new(:indent => 0), include_review=false)
+ def to_xml(xml=Builder::XmlMarkup.new(:indent => 0), include_review=false, convert_markdown=false)
xml.violation do
xml.message(message)
xml.line(line) if line && line>=1
xml.qualifier(snapshot.project.qualifier)
xml.language(snapshot.project.language)
end
- review.to_xml(xml) if include_review && review
+ review.to_xml(xml, convert_markdown) if include_review && review
end
end
private String[] resourceKeysOrIds;
private String[] authorLoginsOrIds;
private String[] assigneeLoginsOrIds;
+ private String output;
public ReviewQuery() {
}
return this;
}
+ /**
+ * @return the output
+ */
+ public String getOutput() {
+ return output;
+ }
+
+ /**
+ * @param output the output to set
+ */
+ public ReviewQuery setOutput(String output) {
+ this.output = output;
+ return this;
+ }
+
@Override
public String getUrl() {
StringBuilder url = new StringBuilder(BASE_URL);
appendUrlParameter(url, "resources", resourceKeysOrIds);
appendUrlParameter(url, "authors", authorLoginsOrIds);
appendUrlParameter(url, "assignees", assigneeLoginsOrIds);
+ appendUrlParameter(url, "output", output);
return url.toString();
}
private String[] severities;
private Integer limit;
private Boolean includeReview;
+ private String output;
public ViolationQuery(String resourceKeyOrId) {
this.resourceKeyOrId = resourceKeyOrId;
return this;
}
+ /**
+ * @since 2.8
+ */
+ public String getOutput() {
+ return output;
+ }
+
+ /**
+ * @since 2.8
+ */
+ public ViolationQuery setOutput(String output) {
+ this.output = output;
+ return this;
+ }
+
@Override
public String getUrl() {
StringBuilder url = new StringBuilder(BASE_URL);
appendUrlParameter(url, "categories", categories);
appendUrlParameter(url, "priorities", severities);
appendUrlParameter(url, "include_review", includeReview);
+ appendUrlParameter(url, "output", output);
return url.toString();
}
@Test
public void resourceTreeViolations() {
ReviewQuery query = new ReviewQuery();
- query.setIds(10L, 11L);
- query.setReviewType("FALSE_POSITIVE");
- query.setStatuses("OPEN");
- query.setSeverities("MINOR", "INFO");
- query.setProjectKeysOrIds("com.sonar.foo:bar");
- query.setResourceKeysOrIds("2", "3");
- query.setAuthorLoginsOrIds("20");
- query.setAssigneeLoginsOrIds("admin");
+ query.setIds(10L, 11L).setReviewType("FALSE_POSITIVE").setStatuses("OPEN").setSeverities("MINOR", "INFO")
+ .setProjectKeysOrIds("com.sonar.foo:bar").setResourceKeysOrIds("2", "3").setAuthorLoginsOrIds("20").setAssigneeLoginsOrIds("admin")
+ .setOutput("html");
assertThat(
query.getUrl(),
- is("/api/reviews?ids=10,11&review_type=FALSE_POSITIVE&statuses=OPEN&severities=MINOR,INFO&projects=com.sonar.foo%3Abar&resources=2,3&authors=20&assignees=admin&"));
+ is("/api/reviews?ids=10,11&review_type=FALSE_POSITIVE&statuses=OPEN&severities=MINOR,INFO&projects=com.sonar.foo%3Abar&resources=2,3&authors=20&assignees=admin&output=html&"));
}
}
.setLimit(20)
.setSeverities("MAJOR", "BLOCKER")
.setQualifiers("FIL")
- .setRuleKeys("checkstyle:foo", "pmd:bar");
+ .setRuleKeys("checkstyle:foo", "pmd:bar")
+ .setOutput("html");
assertThat(
query.getUrl(),
- is("/api/violations?resource=myproject&depth=-1&limit=20&qualifiers=FIL&rules=checkstyle%3Afoo,pmd%3Abar&priorities=MAJOR,BLOCKER&"));
+ is("/api/violations?resource=myproject&depth=-1&limit=20&qualifiers=FIL&rules=checkstyle%3Afoo,pmd%3Abar&priorities=MAJOR,BLOCKER&output=html&"));
}
}