Remove activity feeds

This commit is contained in:
Wedge 2019-02-10 17:07:38 +03:00
parent 65da94dd92
commit e38415c088
20 changed files with 133 additions and 575 deletions

View File

@ -1,39 +0,0 @@
RosaABF.controller('ActivityFeedController', ['$scope', 'ActivityService', 'ProjectSelectService',
function($scope, ActivityService, ProjectSelectService) {
$scope.feed = [];
$scope.next_link_present = false;
$scope.owner_tmp = "";
$scope.project_tmp = "";
$scope.no_loading = false;
var owner_uname, project_name;
$scope.getFeed = function(options, no_loading) {
if($scope.requesting) {
return;
}
$scope.no_loading = no_loading;
if(ProjectSelectService.project) {
if(!options) {
options = {};
}
var split = ProjectSelectService.project.split('/');
options.owner_uname = split[0];
options.project_name = split[1];
}
$scope.requesting = true;
ActivityService.getFeed(options).then(function(res) {
$scope.requesting = false;
$scope.next_link_present = res.next_link_present;
$scope.feed = res.feed;
});
}
$scope.$watch(function() {
return ProjectSelectService.project;
}, function() {
$scope.getFeed();
});
$scope.getFeed();
}]);

View File

@ -1,85 +0,0 @@
angular.module("RosaABF").factory('ActivityService', ["$http", "$filter", function($http, $filter) {
var ActivityService = {};
var feed;
var next_page_link = null;
var last_date;
var last_is_own = false;
var processFeed = function(feed) {
var res = [];
_.each(feed, function(item) {
var cur_date = $filter('amDateFormat')(item.date, 'll')
if(cur_date != last_date) {
res.push({kind: 'new_day', date: cur_date, class: 'timeline-day'});
last_date = cur_date;
}
res.push(item);
});
return res;
}
ActivityService.getFeed = function(options) {
if(Object.prototype.toString.apply(options) != '[object Object]') {
options = {is_own: last_is_own, load_next_page: false};
}
var url;
if(!options['load_next_page']) {
last_date = null;
feed = {};
params = {format: 'json'};
if(options['owner_uname']) {
params['owner_filter'] = options['owner_uname'];
}
if(options['project_name']) {
params['project_name_filter'] = options['project_name'];
}
last_is_own = options['is_own'];
url = options['is_own'] ? Routes.own_activity_path(params) : Routes.activity_feeds_path(params);
}
else {
if(!next_page_link) {
return false;
}
url = next_page_link;
}
return $http.get(url).then(function(res) {
next_page_link = res.data.next_page_link;
var new_feed = processFeed(res.data.feed);
var ret;
if(options['load_next_page']) {
ret = feed;
ret.push.apply(ret, new_feed);
}
else {
feed = ret = new_feed;
}
return {feed: ret, next_link_present: !!next_page_link};
});
}
ActivityService.getOwnersList = function(val) {
var path = Routes.get_owners_list_path({term: val});
return $http.get(path).then(function(res) {
return res.data;
});
}
ActivityService.getProjectNamesList = function(owner_uname, val) {
var path = Routes.get_project_names_list_path({owner_uname: owner_uname, term: val});
return $http.get(path).then(function(res) {
return res.data;
});
}
return ActivityService;
}]);

View File

@ -6,39 +6,6 @@ class HomeController < ApplicationController
redirect_to projects_path redirect_to projects_path
end end
def activity(is_my_activity = false)
@activity_feeds = current_user.activity_feeds
.by_project_name(params[:project_name_filter])
.by_owner_uname(params[:owner_filter])
@activity_feeds = if is_my_activity
@activity_feeds.where(creator_id: current_user)
else
@activity_feeds.where.not(creator_id: current_user)
end
@activity_feeds = @activity_feeds.paginate page: current_page
if @activity_feeds.next_page
if is_my_activity
method = :own_activity_path
else
method = :activity_feeds_path
end
@next_page_link = method.to_proc.call(self, page: @activity_feeds.next_page, owner_filter: params[:owner_filter],
project_name_filter: params[:project_name_filter], format: :json)
end
respond_to do |format|
format.json { render 'activity' }
format.atom
end
end
def own_activity
activity(true)
end
def get_owners_list def get_owners_list
if params[:term].present? if params[:term].present?
users = User.opened.search(params[:term]).first(5) users = User.opened.search(params[:term]).first(5)

View File

@ -1,30 +0,0 @@
module ActivityFeedsHelper
def get_feed_title_from_content(content)
# removes html tags and haml generator indentation whitespaces and new line chars:
feed_title = strip_tags(content).gsub(/(^\s+|\n| )/, ' ')
# removes multiple whitespaces in a row and strip it:
feed_title = feed_title.gsub(/\s{2,}/, ' ').strip
end
def get_user_from_activity_item(item)
email = item.data[:creator_email]
User.where(email: email).first || User.new(email: email) if email.present?
end
def user_link(user, user_name, full_url = false)
user.persisted? ? link_to(user_name, full_url ? user_url(user) : user_path(user)) : user_name
end
def get_feed_build_list_status_message(status)
message, error = case status
when BuildList::BUILD_PENDING
['pending', nil]
when BuildList::BUILD_PUBLISHED
['published', nil]
when BuildList::SUCCESS
['success', nil]
else ['failed', t("layout.build_lists.statuses.#{BuildList::HUMAN_STATUSES[status]}")]
end
" #{t("notifications.bodies.build_status.#{message}", error: error)}"
end
end

View File

@ -14,11 +14,6 @@ class RemoveOutdatedItemsJob < BaseActiveRecordJob
end end
counter_pbl = ProductBuildList.outdated.count counter_pbl = ProductBuildList.outdated.count
ProductBuildList.outdated.destroy_all ProductBuildList.outdated.destroy_all
User.find_each(batch_size: 50) do |u|
u.activity_feeds.outdated.find_each(batch_size: 100) do |a|
a.destroy
end
end
File.open(log_file, "w") do |f| File.open(log_file, "w") do |f|
f.puts "Build Lists deleted: #{counter_bl}" f.puts "Build Lists deleted: #{counter_bl}"
f.puts "Mass Builds deleted: #{counter_mb}" f.puts "Mass Builds deleted: #{counter_mb}"

View File

@ -1,6 +1,4 @@
class UserMailer < ActionMailer::Base class UserMailer < ActionMailer::Base
add_template_helper ActivityFeedsHelper
default from: "\"#{APP_CONFIG['project_name']}\" <#{APP_CONFIG['do-not-reply-email']}>" default from: "\"#{APP_CONFIG['project_name']}\" <#{APP_CONFIG['do-not-reply-email']}>"
default_url_options.merge!(protocol: 'https') if APP_CONFIG['mailer_https_url'] default_url_options.merge!(protocol: 'https') if APP_CONFIG['mailer_https_url']

View File

@ -1,19 +0,0 @@
class ActivityFeed < ActiveRecord::Base
BUILD = %w(build_list_notification)
belongs_to :user
belongs_to :creator, class_name: 'User'
serialize :data
default_scope { order created_at: :desc }
scope :outdated, -> { offset(1000) }
scope :by_project_name, ->(name) { where(project_name: name) if name.present? }
scope :by_owner_uname, ->(owner) { where(project_owner: owner) if owner.present? }
self.per_page = 20
def partial
"home/partials/#{self.kind}"
end
end

View File

@ -2,7 +2,6 @@ class BuildList < ActiveRecord::Base
include CommitAndVersion include CommitAndVersion
include FileStoreClean include FileStoreClean
include AbfWorkerMethods include AbfWorkerMethods
include Feed::BuildList
include BuildListObserver include BuildListObserver
include EventLoggable include EventLoggable
include ExternalNodable include ExternalNodable

View File

@ -1,44 +0,0 @@
module Feed::BuildList
extend ActiveSupport::Concern
included do
after_update :build_list_notifications
end
private
def build_list_notifications
if mass_build.blank? && ( # Do not show mass build activity in activity feeds
status_changed? && [
BuildList::BUILD_PENDING,
BuildList::BUILD_PUBLISHED,
BuildList::SUCCESS,
BuildList::BUILD_ERROR,
BuildList::FAILED_PUBLISH,
BuildList::TESTS_FAILED
].include?(status)
)
updater = publisher || user
(project.all_members | [publisher]).compact.each do |recipient|
ActivityFeed.create(
user: recipient,
kind: 'build_list_notification',
project_owner: project.owner_uname,
project_name: project.name,
creator_id: updater.id,
data: {
build_list_id: id,
status: status,
updated_at: updated_at,
project_id: project_id,
creator_name: updater.name,
creator_email: updater.email
}
)
end
end
end
end

View File

@ -20,8 +20,6 @@ class User < Avatar
has_one :notifier, class_name: 'SettingsNotifier', dependent: :destroy #:notifier has_one :notifier, class_name: 'SettingsNotifier', dependent: :destroy #:notifier
has_one :builds_setting, class_name: 'UserBuildsSetting', dependent: :destroy has_one :builds_setting, class_name: 'UserBuildsSetting', dependent: :destroy
has_many :activity_feeds, dependent: :destroy
has_many :authentications, dependent: :destroy has_many :authentications, dependent: :destroy
has_many :build_lists, dependent: :destroy has_many :build_lists, dependent: :destroy

View File

@ -1,21 +0,0 @@
atom_feed do |feed|
feed.title(t("layout.activity_feed.atom_title"))
feed.updated(@activity_feeds[0].created_at) if @activity_feeds.length > 0
@activity_feeds.each do |activity_feed|
feed.entry(activity_feed, url: root_url(anchor: "feed#{activity_feed.id}")) do |entry|
feed_content = raw(render(inline: true, partial: activity_feed.partial,
locals: activity_feed.data.merge(activity_feed: activity_feed,
project_owner: activity_feed.project_owner,
project_name: activity_feed.project_name)))
entry.title(truncate(get_feed_title_from_content(feed_content), length: 50))
entry.content(feed_content, type: 'html')
entry.author do |author|
author.name(activity_feed.data[:creator_name])
author.email(activity_feed.data[:creator_email])
end if activity_feed.kind != 'git_delete_branch_notification'
end
end
end

View File

@ -1,25 +0,0 @@
if @activity_feeds.next_page
json.next_page_link @next_page_link
end
json.feed do
json.array!(@activity_feeds) do |item|
json.cache! item, expires_in: 10.minutes do
json.date item.created_at
json.kind item.kind
user = get_user_from_activity_item(item)
json.user do
json.link user_path(user) if user.persisted?
json.image avatar_url(user, :small) if user.persisted?
json.uname (user.fullname || user.email)
end if user
project_name_with_owner = "#{item.project_owner}/#{item.project_name}"
@project = Project.find_by_owner_and_name(project_name_with_owner)
json.project_name_with_owner project_name_with_owner
json.partial! item.partial, item: item, project_name_with_owner: project_name_with_owner
json.id item.id
end
end
end

View File

@ -6,8 +6,6 @@ html
base href="/" base href="/"
== csrf_meta_tag == csrf_meta_tag
= display_meta_tags site: APP_CONFIG['project_name'], reverse: true, separator: '-' = display_meta_tags site: APP_CONFIG['project_name'], reverse: true, separator: '-'
- if user_signed_in?
= auto_discovery_link_tag :atom, atom_activity_feeds_path(format: 'atom', token: current_user.authentication_token), title: t("layout.atom_link_tag_title", nickname: current_user.uname, app_name: APP_CONFIG['project_name'])
script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.js" type="text/javascript" script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.js" type="text/javascript"
link href='//netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet' link href='//netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'
link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous" link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous"

View File

@ -5,8 +5,6 @@ html
meta content="text/html; charset=utf-8" http-equiv="Content-Type" meta content="text/html; charset=utf-8" http-equiv="Content-Type"
== csrf_meta_tag == csrf_meta_tag
= display_meta_tags site: APP_CONFIG['project_name'], reverse: true, separator: '-' = display_meta_tags site: APP_CONFIG['project_name'], reverse: true, separator: '-'
- if user_signed_in?
= auto_discovery_link_tag :atom, atom_activity_feeds_path(format: 'atom', token: current_user.authentication_token), title: t("layout.atom_link_tag_title", nickname: current_user.uname, app_name: APP_CONFIG['project_name'])
script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.js" type="text/javascript" script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.js" type="text/javascript"
link href='//netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet' link href='//netdna.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css' rel='stylesheet'
link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous" link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-T8Gy5hrqNKT+hzMclPo118YTQO6cYprQmhrYwIiQ/3axmI1hQomh7Ud2hPOy8SP1" crossorigin="anonymous"

View File

@ -1,56 +0,0 @@
en:
layout:
activity_feed:
header: Activity Feed
own_header: Own Activity Feed
my_last_projects: My last projects
all_my_projects: All my projects
all_my_builds: All my builds
my_builds_by_day: My today builds
new_project: Create project
load_messages: show previous messages
atom_title: Activity Feed
notifications:
subjects:
update_code: "[%{project_name}] Update of project"
new_comment_notification: New comment to your task
new_commit_comment_notification: New comment to commit
new_issue_notification: New task added to project
new_user_notification: Registered on project «%{ project_name }»
issue_assign_notification: New task assigned
invite_approve_notification: Invitation to ABF
for_arch: for arch %{arch}.
metadata_regeneration: Metadata regeneration «%{status}»
bodies:
view_it_on: View it on
new_comment_notification:
title: '%{user_link} added a new comment'
content: in issue %{issue_link}
commit_content: in commit %{commit_link}
new_issue_notification: '%{user_link} added a new <a href="%{issue_link}">issue</a>'
new_user_notification:
title: Hello, %{user_name}.
content: You have registered in project «ROSA ABF» and now you can sign in.
email: ==Your email %{user_email}
password: ==Your password %{user_password}
issue_assign_notification: You have been assigned to issue %{issue_link}
wiki_new_commit_notification: '%{user_link} has been updated %{history_link}'
invite_approve_notification: Invite to ABF
project: in project %{project_link}
delete_branch: '%{user_link} deleted a %{branch_name}'
create_branch: '%{user_link} created a new branch %{branch_name}'
update_branch: '%{user_link} pushed to branch %{branch_name}'
build_task: 'Build <a href="%{task_link}">task #%{id}</a>'
build_status:
published: published successfully
success: completed successfully
failed: completed with error "%{error}"
pending: build is pending
more_commits: '%{count} more %{commits}'
footers:
support_team: Support team «ROSA ABF».
notifiers: You can configure notifications in
notification_center: Notification Center.

View File

@ -1,57 +0,0 @@
ru:
layout:
activity_feed:
header: Лента активности
own_header: Мои действия
my_last_projects: Мои последние проекты
all_my_projects: Все мои проекты
all_my_builds: Все мои сборки
my_builds_by_day: Мои сборки за день
new_project: Создать проект
load_messages: показать предыдущие сообщения
atom_title: Лента активности
notifications:
subjects:
update_code: "[%{project_name}] Обновление проекта"
new_comment_notification: Новый комментарий к Вашей задаче
new_commit_comment_notification: Новый комментарий к коммиту
new_issue_notification: Новая задача добавлена к проекту
new_user_notification: Регистрация на проекте «%{ project_name }»
issue_assign_notification: Вам назначили задачу
invite_approve_notification: Приглашение в ABF
for_arch: для архитектуры %{arch}.
metadata_regeneration: Регенерация метаданных «%{status}»
bodies:
view_it_on: Смотрите это на
new_comment_notification:
title: '%{user_link} добавил новый комментарий'
content: к задаче %{issue_link}
commit_content: к коммиту %{commit_link}
new_issue_notification: '%{user_link} добавил новую <a href="%{issue_link}">задачу</a>'
new_user_notification:
title: Здравствуйте, %{user_name}.
content: Вы зарегистрированы на проекте «ROSA ABF» и теперь можете войти в систему.
email: ==Ваш email %{user_email}
password: ==Ваш пароль %{user_password}
issue_assign_notification: Вам была назначена задача %{issue_link}
wiki_new_commit_notification: '%{user_link} обновил %{history_link}'
invite_approve_notification: Приглашение в ABF
project: в проекте %{project_link}
delete_branch: '%{user_link} удалил ветку %{branch_name}'
create_branch: '%{user_link} создал новую ветку %{branch_name}'
update_branch: '%{user_link} внес изменения в ветку %{branch_name}'
build_task: 'Сборочное <a href="%{task_link}">задание №%{id}</a>'
build_status:
published: успешно опубликовано
success: успешно собрано
failed: завершилось с ошибкой "%{error}"
pending: ожидает сборки
more_commits: 'еще %{count} %{commits} '
footers:
support_team: Команда поддержки «ROSA ABF».
notifiers: Вы можете настроить уведомления в
notification_center: Центре уведомлений.

View File

@ -124,10 +124,6 @@ Rails.application.routes.draw do
get '/forbidden' => 'pages#forbidden', as: 'forbidden' get '/forbidden' => 'pages#forbidden', as: 'forbidden'
get '/terms-of-service' => 'pages#tos', as: 'tos' get '/terms-of-service' => 'pages#tos', as: 'tos'
get '/activity.:format' => 'home#activity', as: 'activity_feeds', format: /json/
get '/activity_feeds.:format' => 'home#activity', as: 'atom_activity_feeds', format: /atom/
get '/own_activity.:format' => 'home#own_activity', as: 'own_activity', format: /json/
if APP_CONFIG['anonymous_access'] if APP_CONFIG['anonymous_access']
authenticated do authenticated do
root to: 'home#index' root to: 'home#index'

View File

@ -0,0 +1,5 @@
class DestroyActivityFeeds < ActiveRecord::Migration
def change
drop_table :activity_feeds
end
end

View File

@ -11,32 +11,21 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20160326104007) do ActiveRecord::Schema.define(version: 20190210140249) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
enable_extension "hstore" enable_extension "hstore"
create_table "activity_feeds", force: :cascade do |t|
t.integer "user_id", null: false, index: {name: "index_activity_feeds_on_user_id_and_kind", with: ["kind"]}
t.string "kind"
t.text "data"
t.datetime "created_at"
t.datetime "updated_at"
t.string "project_owner", index: {name: "index_activity_feeds_on_project_owner"}
t.string "project_name", index: {name: "index_activity_feeds_on_project_name"}
t.integer "creator_id", index: {name: "index_activity_feeds_on_creator_id"}
end
create_table "arches", force: :cascade do |t| create_table "arches", force: :cascade do |t|
t.string "name", null: false, index: {name: "index_arches_on_name", unique: true} t.string "name", :null=>false, :index=>{:name=>"index_arches_on_name", :unique=>true}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
create_table "authentications", force: :cascade do |t| create_table "authentications", force: :cascade do |t|
t.integer "user_id", index: {name: "index_authentications_on_user_id"} t.integer "user_id", :index=>{:name=>"index_authentications_on_user_id"}
t.string "provider", index: {name: "index_authentications_on_provider_and_uid", with: ["uid"], unique: true} t.string "provider", :index=>{:name=>"index_authentications_on_provider_and_uid", :with=>["uid"], :unique=>true}
t.string "uid" t.string "uid"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
@ -46,58 +35,58 @@ ActiveRecord::Schema.define(version: 20160326104007) do
t.string "name" t.string "name"
t.integer "level" t.integer "level"
t.integer "status" t.integer "status"
t.integer "build_list_id", index: {name: "index_build_list_items_on_build_list_id"} t.integer "build_list_id", :index=>{:name=>"index_build_list_items_on_build_list_id"}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "version" t.string "version"
end end
create_table "build_list_packages", force: :cascade do |t| create_table "build_list_packages", force: :cascade do |t|
t.integer "build_list_id", index: {name: "index_build_list_packages_on_build_list_id"} t.integer "build_list_id", :index=>{:name=>"index_build_list_packages_on_build_list_id"}
t.integer "project_id", index: {name: "index_build_list_packages_on_project_id"} t.integer "project_id", :index=>{:name=>"index_build_list_packages_on_project_id"}
t.integer "platform_id", index: {name: "index_build_list_packages_on_platform_id"} t.integer "platform_id", :index=>{:name=>"index_build_list_packages_on_platform_id"}
t.string "fullname" t.string "fullname"
t.string "name", index: {name: "index_build_list_packages_on_name_and_project_id", with: ["project_id"]} t.string "name", :index=>{:name=>"index_build_list_packages_on_name_and_project_id", :with=>["project_id"]}
t.string "version" t.string "version"
t.string "release" t.string "release"
t.string "package_type" t.string "package_type"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.boolean "actual", default: false, index: {name: "index_build_list_packages_on_actual_and_platform_id", with: ["platform_id"]} t.boolean "actual", :default=>false, :index=>{:name=>"index_build_list_packages_on_actual_and_platform_id", :with=>["platform_id"]}
t.string "sha1" t.string "sha1"
t.integer "epoch" t.integer "epoch"
t.text "dependent_packages" t.text "dependent_packages"
t.index name: "build_list_packages_ordering", expression: "lower((name)::text), length((name)::text)" t.index :name=>"build_list_packages_ordering", :expression=>"lower((name)::text), length((name)::text)"
end end
create_table "build_lists", force: :cascade do |t| create_table "build_lists", force: :cascade do |t|
t.integer "status" t.integer "status"
t.string "project_version" t.string "project_version"
t.integer "project_id", index: {name: "index_build_lists_on_project_id"} t.integer "project_id", :index=>{:name=>"index_build_lists_on_project_id"}
t.integer "arch_id", index: {name: "index_build_lists_on_arch_id"} t.integer "arch_id", :index=>{:name=>"index_build_lists_on_arch_id"}
t.datetime "notified_at" t.datetime "notified_at"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at", index: {name: "index_build_lists_on_updated_at", order: {"updated_at"=>:desc}} t.datetime "updated_at", :index=>{:name=>"index_build_lists_on_updated_at", :order=>{"updated_at"=>:desc}}
t.boolean "is_circle", default: false t.boolean "is_circle", :default=>false
t.text "additional_repos" t.text "additional_repos"
t.string "name" t.string "name"
t.string "update_type" t.string "update_type"
t.integer "build_for_platform_id" t.integer "build_for_platform_id"
t.integer "save_to_platform_id" t.integer "save_to_platform_id"
t.text "include_repos" t.text "include_repos"
t.integer "user_id", index: {name: "index_build_lists_on_user_id"} t.integer "user_id", :index=>{:name=>"index_build_lists_on_user_id"}
t.string "package_version" t.string "package_version"
t.string "commit_hash" t.string "commit_hash"
t.integer "priority", default: 0, null: false t.integer "priority", :default=>0, :null=>false
t.datetime "started_at" t.datetime "started_at"
t.integer "duration" t.integer "duration"
t.integer "mass_build_id", index: {name: "index_build_lists_on_mass_build_id_and_status", with: ["status"]} t.integer "mass_build_id", :index=>{:name=>"index_build_lists_on_mass_build_id_and_status", :with=>["status"]}
t.integer "save_to_repository_id" t.integer "save_to_repository_id"
t.text "results" t.text "results"
t.boolean "new_core", default: true t.boolean "new_core", :default=>true
t.string "last_published_commit_hash" t.string "last_published_commit_hash"
t.integer "container_status" t.integer "container_status"
t.boolean "auto_create_container", default: false t.boolean "auto_create_container", :default=>false
t.text "extra_repositories" t.text "extra_repositories"
t.text "extra_build_lists" t.text "extra_build_lists"
t.integer "publisher_id" t.integer "publisher_id"
@ -106,21 +95,21 @@ ActiveRecord::Schema.define(version: 20160326104007) do
t.string "external_nodes" t.string "external_nodes"
t.integer "builder_id" t.integer "builder_id"
t.boolean "include_testing_subrepository" t.boolean "include_testing_subrepository"
t.string "auto_publish_status", default: "default", null: false t.string "auto_publish_status", :default=>"default", :null=>false
t.boolean "use_cached_chroot", default: false, null: false t.boolean "use_cached_chroot", :default=>false, :null=>false
t.boolean "use_extra_tests", default: true, null: false t.boolean "use_extra_tests", :default=>true, :null=>false
t.boolean "save_buildroot", default: false, null: false t.boolean "save_buildroot", :default=>false, :null=>false
t.string "hostname" t.string "hostname"
t.string "fail_reason" t.string "fail_reason"
t.boolean "native_build", default: false t.boolean "native_build", :default=>false
end end
add_index "build_lists", ["project_id", "save_to_repository_id", "build_for_platform_id", "arch_id"], name: "maintainer_search_index" add_index "build_lists", ["project_id", "save_to_repository_id", "build_for_platform_id", "arch_id"], :name=>"maintainer_search_index"
create_table "event_logs", force: :cascade do |t| create_table "event_logs", force: :cascade do |t|
t.integer "user_id", index: {name: "index_event_logs_on_user_id"} t.integer "user_id", :index=>{:name=>"index_event_logs_on_user_id"}
t.string "user_name" t.string "user_name"
t.integer "eventable_id" t.integer "eventable_id"
t.string "eventable_type", index: {name: "index_event_logs_on_eventable_type_and_eventable_id", with: ["eventable_id"]} t.string "eventable_type", :index=>{:name=>"index_event_logs_on_eventable_type_and_eventable_id", :with=>["eventable_id"]}
t.string "eventable_name" t.string "eventable_name"
t.string "ip" t.string "ip"
t.string "kind" t.string "kind"
@ -133,10 +122,10 @@ ActiveRecord::Schema.define(version: 20160326104007) do
end end
create_table "flash_notifies", force: :cascade do |t| create_table "flash_notifies", force: :cascade do |t|
t.text "body_ru", null: false t.text "body_ru", :null=>false
t.text "body_en", null: false t.text "body_en", :null=>false
t.string "status", null: false t.string "status", :null=>false
t.boolean "published", default: true, null: false t.boolean "published", :default=>true, :null=>false
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
@ -146,7 +135,7 @@ ActiveRecord::Schema.define(version: 20160326104007) do
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "uname" t.string "uname"
t.integer "own_projects_count", default: 0, null: false t.integer "own_projects_count", :default=>0, :null=>false
t.text "description" t.text "description"
t.string "avatar_file_name" t.string "avatar_file_name"
t.string "avatar_content_type" t.string "avatar_content_type"
@ -156,56 +145,56 @@ ActiveRecord::Schema.define(version: 20160326104007) do
end end
create_table "key_pairs", force: :cascade do |t| create_table "key_pairs", force: :cascade do |t|
t.text "public", null: false t.text "public", :null=>false
t.text "encrypted_secret", null: false t.text "encrypted_secret", :null=>false
t.string "key_id", null: false t.string "key_id", :null=>false
t.integer "user_id", null: false t.integer "user_id", :null=>false
t.integer "repository_id", null: false, index: {name: "index_key_pairs_on_repository_id", unique: true} t.integer "repository_id", :null=>false, :index=>{:name=>"index_key_pairs_on_repository_id", :unique=>true}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
create_table "key_pairs_backup", force: :cascade do |t| create_table "key_pairs_backup", force: :cascade do |t|
t.integer "repository_id", null: false, index: {name: "index_key_pairs_backup_on_repository_id", unique: true} t.integer "repository_id", :null=>false, :index=>{:name=>"index_key_pairs_backup_on_repository_id", :unique=>true}
t.integer "user_id", null: false t.integer "user_id", :null=>false
t.string "key_id", null: false t.string "key_id", :null=>false
t.text "public", null: false t.text "public", :null=>false
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
create_table "mass_builds", force: :cascade do |t| create_table "mass_builds", force: :cascade do |t|
t.integer "build_for_platform_id", null: false t.integer "build_for_platform_id", :null=>false
t.string "name" t.string "name"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "arch_names" t.string "arch_names"
t.integer "user_id" t.integer "user_id"
t.integer "build_lists_count", default: 0, null: false t.integer "build_lists_count", :default=>0, :null=>false
t.boolean "stop_build", default: false, null: false t.boolean "stop_build", :default=>false, :null=>false
t.text "projects_list" t.text "projects_list"
t.integer "missed_projects_count", default: 0, null: false t.integer "missed_projects_count", :default=>0, :null=>false
t.text "missed_projects_list" t.text "missed_projects_list"
t.boolean "new_core", default: true t.boolean "new_core", :default=>true
t.integer "save_to_platform_id", null: false t.integer "save_to_platform_id", :null=>false
t.text "extra_repositories" t.text "extra_repositories"
t.text "extra_build_lists" t.text "extra_build_lists"
t.boolean "increase_release_tag", default: false, null: false t.boolean "increase_release_tag", :default=>false, :null=>false
t.boolean "use_cached_chroot", default: true, null: false t.boolean "use_cached_chroot", :default=>true, :null=>false
t.boolean "use_extra_tests", default: false, null: false t.boolean "use_extra_tests", :default=>false, :null=>false
t.string "description" t.string "description"
t.string "auto_publish_status", default: "none", null: false t.string "auto_publish_status", :default=>"none", :null=>false
t.text "extra_mass_builds" t.text "extra_mass_builds"
t.boolean "include_testing_subrepository", default: false, null: false t.boolean "include_testing_subrepository", :default=>false, :null=>false
t.boolean "auto_create_container", default: false, null: false t.boolean "auto_create_container", :default=>false, :null=>false
t.integer "status", default: 2000, null: false t.integer "status", :default=>2000, :null=>false
t.string "external_nodes" t.string "external_nodes"
end end
create_table "platform_arch_settings", force: :cascade do |t| create_table "platform_arch_settings", force: :cascade do |t|
t.integer "platform_id", null: false, index: {name: "index_platform_arch_settings_on_platform_id_and_arch_id", with: ["arch_id"], unique: true} t.integer "platform_id", :null=>false, :index=>{:name=>"index_platform_arch_settings_on_platform_id_and_arch_id", :with=>["arch_id"], :unique=>true}
t.integer "arch_id", null: false t.integer "arch_id", :null=>false
t.integer "time_living", null: false t.integer "time_living", :null=>false
t.boolean "default" t.boolean "default"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
@ -213,27 +202,27 @@ ActiveRecord::Schema.define(version: 20160326104007) do
create_table "platforms", force: :cascade do |t| create_table "platforms", force: :cascade do |t|
t.string "description" t.string "description"
t.string "name", null: false, index: {name: "index_platforms_on_name", unique: true, case_sensitive: false} t.string "name", :null=>false, :index=>{:name=>"index_platforms_on_name", :unique=>true, :case_sensitive=>false}
t.integer "parent_platform_id" t.integer "parent_platform_id"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.boolean "released", default: false, null: false t.boolean "released", :default=>false, :null=>false
t.integer "owner_id" t.integer "owner_id"
t.string "owner_type" t.string "owner_type"
t.string "visibility", default: "open", null: false t.string "visibility", :default=>"open", :null=>false
t.string "platform_type", default: "main", null: false t.string "platform_type", :default=>"main", :null=>false
t.string "distrib_type" t.string "distrib_type"
t.integer "status" t.integer "status"
t.datetime "last_regenerated_at" t.datetime "last_regenerated_at"
t.integer "last_regenerated_status" t.integer "last_regenerated_status"
t.string "last_regenerated_log_sha1" t.string "last_regenerated_log_sha1"
t.string "automatic_metadata_regeneration" t.string "automatic_metadata_regeneration"
t.string "default_branch", null: false t.string "default_branch", :null=>false
end end
create_table "product_build_lists", force: :cascade do |t| create_table "product_build_lists", force: :cascade do |t|
t.integer "product_id", index: {name: "index_product_build_lists_on_product_id"} t.integer "product_id", :index=>{:name=>"index_product_build_lists_on_product_id"}
t.integer "status", null: false t.integer "status", :null=>false
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.integer "project_id" t.integer "project_id"
@ -245,13 +234,13 @@ ActiveRecord::Schema.define(version: 20160326104007) do
t.integer "arch_id" t.integer "arch_id"
t.integer "time_living" t.integer "time_living"
t.integer "user_id" t.integer "user_id"
t.boolean "not_delete", default: false t.boolean "not_delete", :default=>false
t.boolean "autostarted", default: false t.boolean "autostarted", :default=>false
end end
create_table "products", force: :cascade do |t| create_table "products", force: :cascade do |t|
t.string "name", null: false t.string "name", :null=>false
t.integer "platform_id", null: false t.integer "platform_id", :null=>false
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.text "description" t.text "description"
@ -265,7 +254,7 @@ ActiveRecord::Schema.define(version: 20160326104007) do
create_table "project_imports", force: :cascade do |t| create_table "project_imports", force: :cascade do |t|
t.integer "project_id" t.integer "project_id"
t.string "name", index: {name: "index_project_imports_on_name_and_platform_id", with: ["platform_id"], unique: true, case_sensitive: false} t.string "name", :index=>{:name=>"index_project_imports_on_name_and_platform_id", :with=>["platform_id"], :unique=>true, :case_sensitive=>false}
t.string "version" t.string "version"
t.datetime "file_mtime" t.datetime "file_mtime"
t.datetime "created_at" t.datetime "created_at"
@ -274,70 +263,70 @@ ActiveRecord::Schema.define(version: 20160326104007) do
end end
create_table "project_statistics", force: :cascade do |t| create_table "project_statistics", force: :cascade do |t|
t.integer "average_build_time", default: 0, null: false t.integer "average_build_time", :default=>0, :null=>false
t.integer "build_count", default: 0, null: false t.integer "build_count", :default=>0, :null=>false
t.integer "arch_id", null: false t.integer "arch_id", :null=>false
t.integer "project_id", null: false, index: {name: "index_project_statistics_on_project_id_and_arch_id", with: ["arch_id"], unique: true} t.integer "project_id", :null=>false, :index=>{:name=>"index_project_statistics_on_project_id_and_arch_id", :with=>["arch_id"], :unique=>true}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
create_table "project_to_repositories", force: :cascade do |t| create_table "project_to_repositories", force: :cascade do |t|
t.integer "project_id" t.integer "project_id"
t.integer "repository_id", index: {name: "index_project_to_repositories_on_repository_id_and_project_id", with: ["project_id"], unique: true} t.integer "repository_id", :index=>{:name=>"index_project_to_repositories_on_repository_id_and_project_id", :with=>["project_id"], :unique=>true}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.hstore "autostart_options" t.hstore "autostart_options"
end end
create_table "projects", force: :cascade do |t| create_table "projects", force: :cascade do |t|
t.string "name", index: {name: "index_projects_on_name_and_owner_id_and_owner_type", with: ["owner_id", "owner_type"], unique: true, case_sensitive: false} t.string "name", :index=>{:name=>"index_projects_on_name_and_owner_id_and_owner_type", :with=>["owner_id", "owner_type"], :unique=>true, :case_sensitive=>false}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.integer "owner_id" t.integer "owner_id"
t.string "owner_type" t.string "owner_type"
t.string "visibility", default: "open" t.string "visibility", :default=>"open"
t.string "ancestry" t.string "ancestry"
t.string "srpm_file_name" t.string "srpm_file_name"
t.string "srpm_content_type" t.string "srpm_content_type"
t.integer "srpm_file_size" t.integer "srpm_file_size"
t.datetime "srpm_updated_at" t.datetime "srpm_updated_at"
t.string "default_branch", default: "master" t.string "default_branch", :default=>"master"
t.boolean "is_package", default: true, null: false t.boolean "is_package", :default=>true, :null=>false
t.integer "maintainer_id" t.integer "maintainer_id"
t.boolean "publish_i686_into_x86_64", default: false t.boolean "publish_i686_into_x86_64", :default=>false
t.string "owner_uname", null: false t.string "owner_uname", :null=>false
t.boolean "architecture_dependent", default: false, null: false t.boolean "architecture_dependent", :default=>false, :null=>false
t.integer "autostart_status" t.integer "autostart_status"
t.integer "alias_from_id", index: {name: "index_projects_on_alias_from_id"} t.integer "alias_from_id", :index=>{:name=>"index_projects_on_alias_from_id"}
t.string "github_organization" t.string "github_organization"
end end
create_table "relations", force: :cascade do |t| create_table "relations", force: :cascade do |t|
t.integer "actor_id" t.integer "actor_id"
t.string "actor_type", index: {name: "index_relations_on_actor_type_and_actor_id", with: ["actor_id"]} t.string "actor_type", :index=>{:name=>"index_relations_on_actor_type_and_actor_id", :with=>["actor_id"]}
t.integer "target_id" t.integer "target_id"
t.string "target_type", index: {name: "index_relations_on_target_type_and_target_id", with: ["target_id"]} t.string "target_type", :index=>{:name=>"index_relations_on_target_type_and_target_id", :with=>["target_id"]}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "role" t.string "role"
end end
create_table "repositories", force: :cascade do |t| create_table "repositories", force: :cascade do |t|
t.string "description", null: false t.string "description", :null=>false
t.integer "platform_id", null: false, index: {name: "index_repositories_on_platform_id"} t.integer "platform_id", :null=>false, :index=>{:name=>"index_repositories_on_platform_id"}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "name", null: false t.string "name", :null=>false
t.boolean "publish_without_qa", default: true t.boolean "publish_without_qa", :default=>true
t.boolean "synchronizing_publications", default: false, null: false t.boolean "synchronizing_publications", :default=>false, :null=>false
t.string "publish_builds_only_from_branch" t.string "publish_builds_only_from_branch"
end end
create_table "repository_statuses", force: :cascade do |t| create_table "repository_statuses", force: :cascade do |t|
t.integer "repository_id", null: false, index: {name: "index_repository_statuses_on_repository_id_and_platform_id", with: ["platform_id"], unique: true} t.integer "repository_id", :null=>false, :index=>{:name=>"index_repository_statuses_on_repository_id_and_platform_id", :with=>["platform_id"], :unique=>true}
t.integer "platform_id", null: false t.integer "platform_id", :null=>false
t.integer "status", default: 0 t.integer "status", :default=>0
t.datetime "last_regenerated_at" t.datetime "last_regenerated_at"
t.integer "last_regenerated_status" t.integer "last_regenerated_status"
t.datetime "created_at" t.datetime "created_at"
@ -346,62 +335,62 @@ ActiveRecord::Schema.define(version: 20160326104007) do
end end
create_table "settings_notifiers", force: :cascade do |t| create_table "settings_notifiers", force: :cascade do |t|
t.integer "user_id", null: false t.integer "user_id", :null=>false
t.boolean "can_notify", default: true t.boolean "can_notify", :default=>true
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.boolean "new_build", default: true t.boolean "new_build", :default=>true
t.boolean "new_associated_build", default: true t.boolean "new_associated_build", :default=>true
end end
create_table "statistics", force: :cascade do |t| create_table "statistics", force: :cascade do |t|
t.integer "user_id", null: false, index: {name: "index_statistics_on_user_id"} t.integer "user_id", :null=>false, :index=>{:name=>"index_statistics_on_user_id"}
t.string "email", null: false t.string "email", :null=>false
t.integer "project_id", null: false, index: {name: "index_statistics_on_project_id"} t.integer "project_id", :null=>false, :index=>{:name=>"index_statistics_on_project_id"}
t.string "project_name_with_owner", null: false t.string "project_name_with_owner", :null=>false
t.string "key", null: false, index: {name: "index_statistics_on_key"} t.string "key", :null=>false, :index=>{:name=>"index_statistics_on_key"}
t.integer "counter", default: 0, null: false t.integer "counter", :default=>0, :null=>false
t.datetime "activity_at", null: false, index: {name: "index_statistics_on_activity_at"} t.datetime "activity_at", :null=>false, :index=>{:name=>"index_statistics_on_activity_at"}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
add_index "statistics", ["key", "activity_at"], name: "index_statistics_on_key_and_activity_at" add_index "statistics", ["key", "activity_at"], :name=>"index_statistics_on_key_and_activity_at"
add_index "statistics", ["project_id", "key", "activity_at"], name: "index_statistics_on_project_id_and_key_and_activity_at" add_index "statistics", ["project_id", "key", "activity_at"], :name=>"index_statistics_on_project_id_and_key_and_activity_at"
add_index "statistics", ["user_id", "key", "activity_at"], name: "index_statistics_on_user_id_and_key_and_activity_at" add_index "statistics", ["user_id", "key", "activity_at"], :name=>"index_statistics_on_user_id_and_key_and_activity_at"
add_index "statistics", ["user_id", "project_id", "key", "activity_at"], name: "index_statistics_on_all_keys", unique: true add_index "statistics", ["user_id", "project_id", "key", "activity_at"], :name=>"index_statistics_on_all_keys", :unique=>true
create_table "tokens", force: :cascade do |t| create_table "tokens", force: :cascade do |t|
t.integer "subject_id", null: false, index: {name: "index_tokens_on_subject_id_and_subject_type", with: ["subject_type"]} t.integer "subject_id", :null=>false, :index=>{:name=>"index_tokens_on_subject_id_and_subject_type", :with=>["subject_type"]}
t.string "subject_type", null: false t.string "subject_type", :null=>false
t.integer "creator_id", null: false t.integer "creator_id", :null=>false
t.integer "updater_id" t.integer "updater_id"
t.string "status", default: "active" t.string "status", :default=>"active"
t.text "description" t.text "description"
t.string "authentication_token", null: false, index: {name: "index_tokens_on_authentication_token", unique: true} t.string "authentication_token", :null=>false, :index=>{:name=>"index_tokens_on_authentication_token", :unique=>true}
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
end end
create_table "user_builds_settings", force: :cascade do |t| create_table "user_builds_settings", force: :cascade do |t|
t.integer "user_id", null: false, index: {name: "index_user_builds_settings_on_user_id", unique: true} t.integer "user_id", :null=>false, :index=>{:name=>"index_user_builds_settings_on_user_id", :unique=>true}
t.text "platforms", default: [], null: false, array: true t.text "platforms", :default=>[], :null=>false, :array=>true
t.string "external_nodes" t.string "external_nodes"
end end
create_table "users", force: :cascade do |t| create_table "users", force: :cascade do |t|
t.string "name" t.string "name"
t.string "email", default: "", null: false, index: {name: "index_users_on_email", unique: true} t.string "email", :default=>"", :null=>false, :index=>{:name=>"index_users_on_email", :unique=>true}
t.string "encrypted_password", default: "", null: false t.string "encrypted_password", :default=>"", :null=>false
t.string "reset_password_token", index: {name: "index_users_on_reset_password_token", unique: true} t.string "reset_password_token", :index=>{:name=>"index_users_on_reset_password_token", :unique=>true}
t.datetime "reset_password_sent_at" t.datetime "reset_password_sent_at"
t.datetime "remember_created_at" t.datetime "remember_created_at"
t.datetime "created_at" t.datetime "created_at"
t.datetime "updated_at" t.datetime "updated_at"
t.string "uname", index: {name: "index_users_on_uname", unique: true} t.string "uname", :index=>{:name=>"index_users_on_uname", :unique=>true}
t.string "role" t.string "role"
t.string "language", default: "en" t.string "language", :default=>"en"
t.integer "own_projects_count", default: 0, null: false t.integer "own_projects_count", :default=>0, :null=>false
t.string "confirmation_token", index: {name: "index_users_on_confirmation_token", unique: true} t.string "confirmation_token", :index=>{:name=>"index_users_on_confirmation_token", :unique=>true}
t.datetime "confirmed_at" t.datetime "confirmed_at"
t.datetime "confirmation_sent_at" t.datetime "confirmation_sent_at"
t.text "professional_experience" t.text "professional_experience"
@ -412,13 +401,13 @@ ActiveRecord::Schema.define(version: 20160326104007) do
t.string "avatar_content_type" t.string "avatar_content_type"
t.integer "avatar_file_size" t.integer "avatar_file_size"
t.datetime "avatar_updated_at" t.datetime "avatar_updated_at"
t.integer "failed_attempts", default: 0 t.integer "failed_attempts", :default=>0
t.string "unlock_token", index: {name: "index_users_on_unlock_token", unique: true} t.string "unlock_token", :index=>{:name=>"index_users_on_unlock_token", :unique=>true}
t.datetime "locked_at" t.datetime "locked_at"
t.string "authentication_token", index: {name: "index_users_on_authentication_token"} t.string "authentication_token", :index=>{:name=>"index_users_on_authentication_token"}
t.integer "build_priority", default: 50 t.integer "build_priority", :default=>50
t.boolean "sound_notifications", default: true t.boolean "sound_notifications", :default=>true
t.boolean "hide_email", default: true, null: false t.boolean "hide_email", :default=>true, :null=>false
end end
end end

View File

@ -1,9 +0,0 @@
require 'spec_helper'
describe ActivityFeed do
it 'is valid given valid attributes' do
FactoryGirl.build(:activity_feed).should be_valid
end
end