Class: Twterm::Repository::StatusRepository

Inherits:
AbstractExpirableEntityRepository show all
Defined in:
lib/twterm/repository/status_repository.rb

Instance Method Summary collapse

Methods inherited from AbstractExpirableEntityRepository

#initialize

Methods included from Publisher

#publish

Methods included from Utils

check_type

Methods inherited from AbstractEntityRepository

#all

Methods inherited from AbstractRepository

#after_create, #before_create, #initialize

Constructor Details

This class inherits a constructor from Twterm::Repository::AbstractExpirableEntityRepository

Instance Method Details

#create(tweet, is_referred_status = false) ⇒ Object



8
9
10
11
12
# File 'lib/twterm/repository/status_repository.rb', line 8

def create(tweet, is_referred_status = false)
  create(tweet.quoted_status, true) unless tweet.quoted_status.is_a?(Twitter::NullObject)
  create(tweet.retweeted_status, true) unless tweet.retweeted_status.is_a?(Twitter::NullObject)
  super
end

#delete(id) ⇒ Object



14
15
16
17
# File 'lib/twterm/repository/status_repository.rb', line 14

def delete(id)
  @touched_at.delete(id)
  repository.delete(id)
end

#expire(threshold) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/twterm/repository/status_repository.rb', line 36

def expire(threshold)
  now = Time.now
  ids = repository
    .to_a
    .sort_by { |_, status| status.created_at }
    .reverse
    .drop(keep_minimum)
    .select { |id, _| !@touched_at[id] || @touched_at[id] + threshold < now }

  ids.each { |id| publish(garbage_collection_event_class.new(id)) }

  repository.delete_if { |id, _| ids.include?(id) }
end

#find(id) ⇒ Object



19
20
21
22
23
24
25
26
# File 'lib/twterm/repository/status_repository.rb', line 19

def find(id)
  status = super

  touch(status.retweeted_status_id) if !status.nil? && status.retweet?
  touch(status.quoted_status_id) if !status.nil? && status.quote?

  status
end

#find_quotes_for(id) ⇒ Object



28
29
30
# File 'lib/twterm/repository/status_repository.rb', line 28

def find_quotes_for(id)
  repository.values.select { |s| s.quoted_status_id == id }
end

#find_replies_for(id) ⇒ Object



32
33
34
# File 'lib/twterm/repository/status_repository.rb', line 32

def find_replies_for(id)
  repository.values.select { |s| s.in_reply_to_status_id == id }
end

#idsObject



50
51
52
# File 'lib/twterm/repository/status_repository.rb', line 50

def ids
  repository.keys
end