class Stream::Feed

Attributes

id[R]
slug[R]
user_id[R]

Public Class Methods

new(client, feed_slug, user_id) click to toggle source
# 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

Public Instance Methods

add_activities(activities) click to toggle source
# File lib/stream/feed.rb, line 62
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) click to toggle source
# File lib/stream/feed.rb, line 54
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) click to toggle source
# File lib/stream/feed.rb, line 108
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
followers(offset = 0, limit = 25) click to toggle source
# File lib/stream/feed.rb, line 122
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 = []) click to toggle source
# File lib/stream/feed.rb, line 133
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 = {}) click to toggle source
# 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[:withRecentReactions] = true if params[:reactions][:recent]
    params[:withReactionCounts] = true if params[:reactions][:counts]
  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_token() click to toggle source
# File lib/stream/feed.rb, line 23
def readonly_token
  create_jwt_token('*', 'read')
end
remove(activity_id, foreign_id: false) click to toggle source
# File lib/stream/feed.rb, line 70
def remove(activity_id, foreign_id: false)
  remove_activity(activity_id, foreign_id: foreign_id)
end
remove_activity(activity_id, foreign_id: false) click to toggle source
# File lib/stream/feed.rb, line 74
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) click to toggle source
# File lib/stream/feed.rb, line 145
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) click to toggle source
# File lib/stream/feed.rb, line 87
def update_activities(activities)
  auth_token = create_jwt_token('activities', '*', '*')

  @client.make_request(:post, '/activities/', auth_token, {}, 'activities' => activities)
end
update_activity(activity) click to toggle source
# File lib/stream/feed.rb, line 83
def update_activity(activity)
  update_activities([activity])
end
update_activity_to_targets(foreign_id, time, new_targets: nil, added_targets: nil, removed_targets: nil) click to toggle source
# File lib/stream/feed.rb, line 93
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) click to toggle source
# 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) click to toggle source
# File lib/stream/feed.rb, line 31
def valid_user_id(user_id)
  !user_id.to_s[/^[\w-]+$/].nil?
end

Private Instance Methods

create_jwt_token(resource, action, feed_id = nil, user_id = nil) click to toggle source
# File lib/stream/feed.rb, line 155
def create_jwt_token(resource, action, feed_id = nil, user_id = nil)
  feed_id = @feed_name if feed_id.nil?
  Stream::Signer.create_jwt_token(resource, action, @client.api_secret, feed_id, user_id)
end