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

View file

@ -1,19 +1,25 @@
module Event::PushTrait
as_trait do
def valid_push?
data["ref"]
rescue => ex
false
end
def tag?
data[:ref]["refs/tags"]
data["ref"]["refs/tags"]
end
def new_branch?
data[:before] =~ /^00000/
commit_from =~ /^00000/
end
def new_ref?
data[:before] =~ /^00000/
commit_from =~ /^00000/
end
def rm_ref?
data[:after] =~ /^00000/
commit_to =~ /^00000/
end
def md_ref?
@ -21,11 +27,11 @@ module Event::PushTrait
end
def commit_from
data[:before]
data["before"]
end
def commit_to
data[:after]
data["after"]
end
def ref_name
@ -37,16 +43,16 @@ module Event::PushTrait
end
def branch_name
@branch_name ||= data[:ref].gsub("refs/heads/", "")
@branch_name ||= data["ref"].gsub("refs/heads/", "")
end
def tag_name
@tag_name ||= data[:ref].gsub("refs/tags/", "")
@tag_name ||= data["ref"].gsub("refs/tags/", "")
end
def commits
@commits ||= data[:commits].map do |commit|
project.commit(commit[:id])
@commits ||= data["commits"].map do |commit|
project.commit(commit["id"])
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
Your Profile »
.span10.left= render "dashboard/projects_feed", :projects => @active_projects
- if @last_push
- if @last_push && @last_push.valid_push?
.padded.prepend-top-20
%h5
%small Latest push was to the #{@last_push.branch_name} branch of #{@last_push.project.name}: