-
Notifications
You must be signed in to change notification settings - Fork 2.9k
/
base.rb
131 lines (106 loc) · 2.91 KB
/
base.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require File.join(Rails.root, "lib", "publisher")
class Stream::Base
TYPES_OF_POST_IN_STREAM = ['StatusMessage', 'Reshare', 'ActivityStreams::Photo']
attr_accessor :max_time, :order, :user
def initialize(user, opts={})
self.user = user
self.max_time = opts[:max_time]
self.order = opts[:order]
end
# @return [Person]
def random_community_spotlight_member
@random_community_spotlight_member ||= Person.find_by_diaspora_handle(spotlight_diaspora_id)
end
# @return [Boolean]
def has_community_spotlight?
random_community_spotlight_member.present?
end
#requied to implement said stream
def link(opts={})
'change me in lib/base_stream.rb!'
end
# @return [Boolean]
def can_comment?(post)
return true if post.author.local?
post_is_from_contact?(post)
end
def post_from_group(post)
[]
end
# @return [String]
def title
'a title'
end
# @return [ActiveRecord::Relation<Post>]
def posts
[]
end
# @return [ActiveRecord::Association<Person>] AR association of people within stream's given aspects
def people
people_ids = posts.map{|x| x.author_id}
Person.where(:id => people_ids).includes(:profile)
end
# @return [String]
def contacts_link_title
I18n.translate('aspects.selected_contacts.view_all_contacts')
end
# @return [String]
def contacts_title
'change me in lib/base_stream.rb!'
end
# @return [String]
def contacts_link
Rails.application.routes.url_helpers.contacts_path
end
#helpers
# @return [Boolean]
def ajax_stream?
false
end
# @return [Boolean]
def for_all_aspects?
true
end
#NOTE: MBS bad bad methods the fact we need these means our views are foobared. please kill them and make them
#private methods on the streams that need them
def aspects
user.aspects
end
# @return [Aspect] The first aspect in #aspects
def aspect
aspects.first
end
def aspect_ids
aspects.map{|x| x.id}
end
def max_time=(time_string)
@max_time = Time.at(time_string.to_i) unless time_string.blank?
@max_time ||= (Time.now + 1)
end
def order=(order_string)
@order = order_string
@order ||= 'created_at'
end
# @return [Publisher]
def publisher
@publisher ||= Publisher.new(self.user)
end
private
# Memoizes all Contacts present in the Stream
#
# @return [Array<Contact>]
def contacts_in_stream
@contacts_in_stream ||= Contact.where(:user_id => user.id, :person_id => people.map{|x| x.id}).all
end
def spotlight_diaspora_id
@spotlight_diaspora_id ||= AppConfig[:community_spotlight].try(:sample, 1)
end
# @param post [Post]
# @return [Boolean]
def post_is_from_contact?(post)
@can_comment_cache ||= {}
@can_comment_cache[post.id] ||= contacts_in_stream.find{|contact| contact.person_id == post.author.id}.present?
@can_comment_cache[post.id] ||= (user.person.id == post.author.id)
@can_comment_cache[post.id]
end
end