Commit 9aa64965 authored by James Lopez's avatar James Lopez

refactor activity and activity set, and fixed spec

parent e913cf3f
......@@ -3,17 +3,13 @@ module Gitlab
class Activity
attr_reader :username
def self.from_array(activities)
activities.map { |activity| new(*activity) }
end
def initialize(username, time)
@username = username
@time = time
end
def date
@date ||= Time.at(@time).utc.to_datetime
def lat_activity_at
@lat_activity_at ||= Time.at(@time).to_s(:db)
end
end
end
......
module Gitlab
module User
class ActivitySet
include Gitlab::PaginationUtil
KEY = 'user/activities'
DEFAULT_PAGE_SIZE = 50
DEFAULT_FROM = 1.year.ago
DEFAULT_FROM = 6.months.ago.to_i
attr_reader :page, :per_page
def self.record(user)
Gitlab::Redis.with do |redis|
......@@ -11,26 +14,45 @@ module Gitlab
end
end
def self.query(*args)
new(*args).query
def initialize(from:, page:, per_page:)
@from = sanitize_date(from)
@to = Time.now.to_i
@page = page
@per_page = per_page
end
def initialize(from:, page:, per_page:)
@from = from || DEFAULT_FROM
@page = page || 0
@per_page = per_page || DEFAULT_PAGE_SIZE
def activities
@activities ||= raw_activities.map { |activity| Activity.new(*activity) }
end
private
def sanitize_date(date)
Time.strptime(date, "%Y-%m-%d").to_i
rescue TypeError, ArgumentError
DEFAULT_FROM
end
def pagination_delegate
@pagination_delegate ||= Gitlab::PaginationDelegate.new(page: @page,
per_page: @per_page,
count: count)
end
def query
def raw_activities
Gitlab::Redis.with do |redis|
redis.zrangebyscore(KEY, @from.to_i, Time.now.to_i, with_scores: true, limit: [offset, @per_page])
redis.zrangebyscore(KEY,
@from,
@to,
with_scores: true,
limit: [pagination_delegate.offset, pagination_delegate.limit_value])
end
end
private
def offset
@page * @per_page
def count
Gitlab::Redis.with do |redis|
redis.zcount(KEY, @from, @to)
end
end
end
end
......
......@@ -39,7 +39,7 @@ describe Gitlab::User::ActivitySet, :redis, lib: true do
end
end
context 'filter by date'do
context 'filter by date' do
before do
Timecop.freeze(Date.yesterday)
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment