RE: "Invalid RSS Feed" on Simple CI plugin to TeamCity feed. ยป simple_ci_controller.rb
| 1 |
require 'feed-normalizer' |
|---|---|
| 2 |
require 'open-uri' |
| 3 |
|
| 4 |
class SimpleCiController < ApplicationController |
| 5 |
layout 'base' |
| 6 |
before_filter :find_project, :authorize |
| 7 |
|
| 8 |
def show |
| 9 |
# Build the regular expression used to detect successfull builds
|
| 10 |
success_re = Regexp.new(Setting.plugin_simple_ci['success_keyword'].strip, Regexp::IGNORECASE) |
| 11 |
# Find the project's CI RSS feed URL
|
| 12 |
# This URL is stored in a 'regular' project custom field
|
| 13 |
feed_url = @project.custom_values.detect {|v| v.custom_field_id == Setting.plugin_simple_ci['feed_url_custom_field'].to_i} |
| 14 |
feed_url = feed_url.value if feed_url |
| 15 |
if !feed_url.blank? |
| 16 |
begin
|
| 17 |
content = '' |
| 18 |
# Open the feed and parse it
|
| 19 |
rss = FeedNormalizer::FeedNormalizer.parse open(feed_url.strip) |
| 20 |
if rss |
| 21 |
@builds = rss.entries.collect do |item| |
| 22 |
build = { |
| 23 |
:time => item.date_published, |
| 24 |
:title => item.title, |
| 25 |
:description => item.description, |
| 26 |
:link => item.url |
| 27 |
}
|
| 28 |
build[:success] = (success_re.match(item.title) ? true : false) |
| 29 |
build
|
| 30 |
end
|
| 31 |
else
|
| 32 |
flash.now[:error] = 'Invalid RSS feed.' unless @builds |
| 33 |
end
|
| 34 |
rescue SocketError |
| 35 |
flash.now[:error] = 'Unable to connect to remote host.' |
| 36 |
end
|
| 37 |
@show_descriptions = Setting.plugin_simple_ci[:show_descriptions].to_i |
| 38 |
else
|
| 39 |
flash.now[:error] = 'The feed URL is not defined for this project.' |
| 40 |
end
|
| 41 |
end
|
| 42 |
|
| 43 |
private
|
| 44 |
def find_project |
| 45 |
@project = Project.find(params[:id]) |
| 46 |
rescue ActiveRecord::RecordNotFound |
| 47 |
render_404
|
| 48 |
end
|
| 49 |
end
|
| 50 |
|