From 3fa96de682404fc85a10c3802015876467b674bd Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Fri, 8 Nov 2013 23:55:21 -0500 Subject: [PATCH] WIP: Atom feed for /repos/:owner_name/:name/builds See travis-ci/travis-core#82 TODO: Link to indivisual build. TODO: Add specs. TODO: Review `#apply?` --- lib/travis/api/app/helpers/respond_with.rb | 2 +- lib/travis/api/app/responders.rb | 1 + lib/travis/api/app/responders/atom.rb | 63 ++++++++++++++++++++++ travis-api.gemspec | 4 +- 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 lib/travis/api/app/responders/atom.rb diff --git a/lib/travis/api/app/helpers/respond_with.rb b/lib/travis/api/app/helpers/respond_with.rb index 19f4c4fd..da21832d 100644 --- a/lib/travis/api/app/helpers/respond_with.rb +++ b/lib/travis/api/app/helpers/respond_with.rb @@ -49,7 +49,7 @@ class Travis::Api::App end def responders(resource, options) - [:Json, :Image, :Xml, :Plain].map do |name| + [:Atom, :Json, :Image, :Xml, :Plain].map do |name| Responders.const_get(name) end end diff --git a/lib/travis/api/app/responders.rb b/lib/travis/api/app/responders.rb index a81ac108..30c9ae54 100644 --- a/lib/travis/api/app/responders.rb +++ b/lib/travis/api/app/responders.rb @@ -2,6 +2,7 @@ require 'travis/api/app' class Travis::Api::App module Responders + autoload :Atom, 'travis/api/app/responders/atom' autoload :Base, 'travis/api/app/responders/base' autoload :Image, 'travis/api/app/responders/image' autoload :Json, 'travis/api/app/responders/json' diff --git a/lib/travis/api/app/responders/atom.rb b/lib/travis/api/app/responders/atom.rb new file mode 100644 index 00000000..a904197e --- /dev/null +++ b/lib/travis/api/app/responders/atom.rb @@ -0,0 +1,63 @@ +module Travis::Api::App::Responders + require 'securerandom' + + class Atom < Base + ATOM_FEED_ERB = ERB.new(File.read(__FILE__).split("__END__").last.strip) + + def apply? + if resource.is_a?(ActiveRecord::Relation) && resource.first.is_a?(Build) + @builds = resource + end + super && @builds + end + + def apply + super + + ATOM_FEED_ERB.result(binding) + end + + private + + def content_type + 'application/atom+xml;charset=utf-8' + end + + end +end + +__END__ + + + + + <%= @builds.first.repository.slug %> Builds + + urn:uuid:<%= SecureRandom.uuid %> + <%= DateTime.now.strftime %> + + <% @builds.each do |build| %> + + <%= build.repository.slug %> Build #<%= build.number %> + + urn:uuid:<%= SecureRandom.uuid %> + <%= build.finished_at || build.started_at %> + + <p> + <%= build.commit.message %> (<%= build.commit.committer_name %>) + <br/><br/> + State: <%= build.state %> + <br/> + Started at: <%= build.started_at ? build.started_at : 'not started' %> + <br/> + Finished at: <%= build.finished_at ? build.finished_at : + build.started_at ? 'still running' : 'not started' %> + </p> + + + <%= build.commit.committer_name %> + + + <% end %> + + \ No newline at end of file diff --git a/travis-api.gemspec b/travis-api.gemspec index b6596011..5f0d342c 100644 --- a/travis-api.gemspec +++ b/travis-api.gemspec @@ -22,7 +22,8 @@ Gem::Specification.new do |s| "Nick Schonning", "Patrick Williams", "James Dennes", - "Tim Carey-Smith" + "Tim Carey-Smith", + "Hiro Asari" ] s.email = [ @@ -135,6 +136,7 @@ Gem::Specification.new do |s| "lib/travis/api/app/middleware/rewrite.rb", "lib/travis/api/app/middleware/scope_check.rb", "lib/travis/api/app/responders.rb", + "lib/travis/api/app/responders/atom.rb", "lib/travis/api/app/responders/base.rb", "lib/travis/api/app/responders/image.rb", "lib/travis/api/app/responders/json.rb",