Class: Stream::Feed

Inherits:
Object
  • Object
show all
Defined in:
lib/stream/feed.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, feed_slug, user_id) ⇒ Feed

Returns a new instance of Feed.

Raises:



10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/stream/feed.rb', line 10

def initialize(client, feed_slug, user_id)
  raise StreamInputData, 'feed_slug can only contain alphanumeric characters plus underscores' unless valid_feed_slug feed_slug

  raise StreamInputData, 'user_id can only contain alphanumeric characters plus underscores and dashes' unless valid_user_id user_id

  @id = "#{feed_slug}:#{user_id}"
  @client = client
  @user_id = user_id
  @slug = feed_slug
  @feed_name = "#{feed_slug}#{user_id}"
  @feed_url = "#{feed_slug}/#{user_id}"
end

Instance Attribute Details

#idObject (readonly)

Returns the value of attribute id.



6
7
8
# File 'lib/stream/feed.rb', line 6

def id
  @id
end

#slugObject (readonly)

Returns the value of attribute slug.



7
8
9
# File 'lib/stream/feed.rb', line 7

def slug
  @slug
end

#user_idObject (readonly)

Returns the value of attribute user_id.



8
9
10
# File 'lib/stream/feed.rb', line 8

def user_id
  @user_id
end

Instance Method Details

#add_activities(activities) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/stream/feed.rb', line 70

def add_activities(activities)
  uri = "/feed/#{@feed_url}/"
  data = { activities: activities }
  auth_token = create_jwt_token('feed', 'write')

  @client.make_request(:post, uri, auth_token, {}, data)
end

#add_activity(activity_data) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/stream/feed.rb', line 62

def add_activity(activity_data)
  uri = "/feed/#{@feed_url}/"
  data = activity_data.clone
  auth_token = create_jwt_token('feed', 'write')

  @client.make_request(:post, uri, auth_token, {}, data)
end

#follow(target_feed_slug, target_user_id, activity_copy_limit = 300) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/stream/feed.rb', line 116

def follow(target_feed_slug, target_user_id, activity_copy_limit = 300)
  uri = "/feed/#{@feed_url}/follows/"
  activity_copy_limit = 0 if activity_copy_limit.negative?
  activity_copy_limit = 1000 if activity_copy_limit > 1000

  follow_data = {
    target: "#{target_feed_slug}:#{target_user_id}",
    activity_copy_limit: activity_copy_limit
  }
  auth_token = create_jwt_token('follower', 'write')

  @client.make_request(:post, uri, auth_token, {}, follow_data)
end

#follow_stats(followers_slugs = nil, following_slugs = nil) ⇒ Object



161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/stream/feed.rb', line 161

def follow_stats(followers_slugs = nil, following_slugs = nil)
  uri = '/stats/follow'
  params = {
    followers: @id,
    following: @id
  }
  params[:followers_slugs] = followers_slugs.join(',') if followers_slugs
  params[:following_slugs] = following_slugs.join(',') if following_slugs
  auth_token = create_jwt_token('*', 'read', '*')

  @client.make_request(:get, uri, auth_token, params)
end

#followers(offset = 0, limit = 25) ⇒ Object



130
131
132
133
134
135
136
137
138
139
# File 'lib/stream/feed.rb', line 130

def followers(offset = 0, limit = 25)
  uri = "/feed/#{@feed_url}/followers/"
  params = {
    offset: offset,
    limit: limit
  }
  auth_token = create_jwt_token('follower', 'read')

  @client.make_request(:get, uri, auth_token, params)
end

#following(offset = 0, limit = 25, filter = []) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
# File 'lib/stream/feed.rb', line 141

def following(offset = 0, limit = 25, filter = [])
  uri = "/feed/#{@feed_url}/follows/"
  params = {
    offset: offset,
    limit: limit,
    filter: filter.join(',')
  }
  auth_token = create_jwt_token('follower', 'read')

  @client.make_request(:get, uri, auth_token, params)
end

#get(params = {}) ⇒ Object



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
# File 'lib/stream/feed.rb', line 35

def get(params = {})
  uri = if params[:enrich] || params[:reactions]
          "/enrich/feed/#{@feed_url}/"
        else
          "/feed/#{@feed_url}/"
        end
  params[:mark_read] = params[:mark_read].join(',') if params[:mark_read]&.is_a?(Array)
  params[:mark_seen] = params[:mark_seen].join(',') if params[:mark_seen]&.is_a?(Array)
  if params[:reactions].respond_to?(:keys)
    params[:withOwnReactions] = true if params[:reactions][:own]
    params[:withFirstReactions] = true if params[:reactions][:first]
    params[:withRecentReactions] = true if params[:reactions][:recent]
    params[:withReactionCounts] = true if params[:reactions][:counts]
    params[:withOwnChildren] = true if params[:reactions][:children]
    user_id = params[:reactions][:user_id]
    params[:user_id] = user_id if user_id
    kinds = params[:reactions][:kinds]
    if kinds
      params[:reactionKindsFilter] = kinds.is_a?(Array) ? kinds.join(',') : kinds
    end
  end
  %i[enrich reactions].each { |k| params.delete(k) }

  auth_token = create_jwt_token('feed', 'read')
  @client.make_request(:get, uri, auth_token, params)
end

#readonly_tokenObject



23
24
25
# File 'lib/stream/feed.rb', line 23

def readonly_token
  create_jwt_token('*', 'read')
end

#remove(activity_id, foreign_id: false) ⇒ Object



78
79
80
# File 'lib/stream/feed.rb', line 78

def remove(activity_id, foreign_id: false)
  remove_activity(activity_id, foreign_id: foreign_id)
end

#remove_activity(activity_id, foreign_id: false) ⇒ Object



82
83
84
85
86
87
88
89
# File 'lib/stream/feed.rb', line 82

def remove_activity(activity_id, foreign_id: false)
  uri = "/feed/#{@feed_url}/#{activity_id}/"
  params = {}
  params = { foreign_id: 1 } if foreign_id
  auth_token = create_jwt_token('feed', 'delete')

  @client.make_request(:delete, uri, auth_token, params)
end

#unfollow(target_feed_slug, target_user_id, keep_history: false) ⇒ Object



153
154
155
156
157
158
159
# File 'lib/stream/feed.rb', line 153

def unfollow(target_feed_slug, target_user_id, keep_history: false)
  uri = "/feed/#{@feed_url}/follows/#{target_feed_slug}:#{target_user_id}/"
  auth_token = create_jwt_token('follower', 'delete')
  params = {}
  params['keep_history'] = true if keep_history
  @client.make_request(:delete, uri, auth_token, params)
end

#update_activities(activities) ⇒ Object



95
96
97
98
99
# File 'lib/stream/feed.rb', line 95

def update_activities(activities)
  auth_token = create_jwt_token('activities', '*', '*')

  @client.make_request(:post, '/activities/', auth_token, {}, 'activities' => activities)
end

#update_activity(activity) ⇒ Object



91
92
93
# File 'lib/stream/feed.rb', line 91

def update_activity(activity)
  update_activities([activity])
end

#update_activity_to_targets(foreign_id, time, new_targets: nil, added_targets: nil, removed_targets: nil) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/stream/feed.rb', line 101

def update_activity_to_targets(foreign_id, time, new_targets: nil, added_targets: nil, removed_targets: nil)
  uri = "/feed_targets/#{@feed_url}/activity_to_targets/"
  data = {
    foreign_id: foreign_id,
    time: time
  }

  data['new_targets'] = new_targets unless new_targets.nil?
  data['added_targets'] = added_targets unless added_targets.nil?
  data['removed_targets'] = removed_targets unless removed_targets.nil?
  auth_token = create_jwt_token('feed_targets', 'write')

  @client.make_request(:post, uri, auth_token, {}, data)
end

#valid_feed_slug(feed_slug) ⇒ Object



27
28
29
# File 'lib/stream/feed.rb', line 27

def valid_feed_slug(feed_slug)
  !feed_slug[/^[a-zA-Z0-9_]+$/].nil?
end

#valid_user_id(user_id) ⇒ Object



31
32
33
# File 'lib/stream/feed.rb', line 31

def valid_user_id(user_id)
  !user_id.to_s[/^[\w-]+$/].nil?
end