GitlabSerialize: cause of invalid yaml in some events we migrate to json serialization

This commit is contained in:
Dmitriy Zaporozhets 2012-04-04 02:25:33 +03:00
parent 8aa5076d68
commit a951e6f8ae
4 changed files with 36 additions and 13 deletions

View file

@ -14,7 +14,7 @@ class Event < ActiveRecord::Base
belongs_to :project belongs_to :project
belongs_to :target, :polymorphic => true belongs_to :target, :polymorphic => true
serialize :data serialize :data, GitlabSerialize.new
scope :recent, order("created_at DESC") scope :recent, order("created_at DESC")
scope :code_push, where(:action => Pushed) scope :code_push, where(:action => Pushed)
@ -36,7 +36,7 @@ class Event < ActiveRecord::Base
end end
def push? def push?
action == self.class::Pushed action == self.class::Pushed && valid_push?
end end
def merged? def merged?

View file

@ -1,19 +1,25 @@
module Event::PushTrait module Event::PushTrait
as_trait do as_trait do
def valid_push?
data["ref"]
rescue => ex
false
end
def tag? def tag?
data[:ref]["refs/tags"] data["ref"]["refs/tags"]
end end
def new_branch? def new_branch?
data[:before] =~ /^00000/ commit_from =~ /^00000/
end end
def new_ref? def new_ref?
data[:before] =~ /^00000/ commit_from =~ /^00000/
end end
def rm_ref? def rm_ref?
data[:after] =~ /^00000/ commit_to =~ /^00000/
end end
def md_ref? def md_ref?
@ -21,11 +27,11 @@ module Event::PushTrait
end end
def commit_from def commit_from
data[:before] data["before"]
end end
def commit_to def commit_to
data[:after] data["after"]
end end
def ref_name def ref_name
@ -37,16 +43,16 @@ module Event::PushTrait
end end
def branch_name def branch_name
@branch_name ||= data[:ref].gsub("refs/heads/", "") @branch_name ||= data["ref"].gsub("refs/heads/", "")
end end
def tag_name def tag_name
@tag_name ||= data[:ref].gsub("refs/tags/", "") @tag_name ||= data["ref"].gsub("refs/tags/", "")
end end
def commits def commits
@commits ||= data[:commits].map do |commit| @commits ||= data["commits"].map do |commit|
project.commit(commit[:id]) project.commit(commit["id"])
end end
end end

View file

@ -0,0 +1,17 @@
class GitlabSerialize
# Called to deserialize data to ruby object.
def load(data)
JSON.load(data)
rescue JSON::ParserError
begin
YAML.load(data)
rescue Psych::SyntaxError
nil
end
end
# Called to convert from ruby object to serialized data.
def dump(obj)
JSON.dump(obj)
end
end

View file

@ -44,7 +44,7 @@
= link_to profile_path, :class => "btn" do = link_to profile_path, :class => "btn" do
Your Profile » Your Profile »
.span10.left= render "dashboard/projects_feed", :projects => @active_projects .span10.left= render "dashboard/projects_feed", :projects => @active_projects
- if @last_push - if @last_push && @last_push.valid_push?
.padded.prepend-top-20 .padded.prepend-top-20
%h5 %h5
%small Latest push was to the #{@last_push.branch_name} branch of #{@last_push.project.name}: %small Latest push was to the #{@last_push.branch_name} branch of #{@last_push.project.name}: