stream-ruby is the official Ruby client for Stream, a web service for building scalable newsfeeds and activity streams.
Note there is also a higher level Ruby on Rails - Stream integration library which hooks into the Ruby on Rails ORM.
You can sign up for a Stream account at https://getstream.io/get_started.
This API Client project requires Ruby 2.2.10 at a minimum. We will support the following versions:
- 2.2.10
- 2.3.8
- 2.4.5
- 2.5.5
- 2.6.2
See the Travis configuration for details of how it is built and tested.
gem install 'stream-ruby'Documentation for this Ruby client are available at the Stream website.
# Instantiate a new client to connect to us east API endpointrequire'stream'client=Stream::Client.new('YOUR_API_KEY','API_KEY_SECRET','APP_ID',location: 'us-east')# Find your API keys here https://getstream.io/dashboard/# Instantiate a feed objectuser_feed_1=client.feed('user','1')# Get activities from 5 to 10 (slow pagination)result=user_feed_1.get(limit: 5,offset: 5)# (Recommended & faster) Filter on an id less than the given UUIDresult=user_feed_1.get(limit: 5,id_lt: 'e561de8f-00f1-11e4-b400-0cc47a024be0')# Create a new activityactivity_data={actor: 1,verb: 'tweet',object: 1,foreign_id: 'tweet:1'}activity_response=user_feed_1.add_activity(activity_data)# Create a bit more complex activityactivity_data={actor: 1,verb: 'tweet',object: 1,foreign_id: 'tweet:1',course: {name: 'Golden Gate park',distance: 10},participants: %w[ThierryTommaso],started_at: DateTime.now}activity_response=user_feed_1.add_activity(activity_data)# Update an existing activity (requires both :foreign_id and :time fields)activity_data={actor: 1,verb: 'tweet',object: 1,foreign_id: 'tweet:1',popularity: 100,time: '2016-05-13T16:12:30'}client.update_activity(activity_data)# Update activitiesclient.update_activities([activity_data])# Remove an activity by its iduser_feed_1.remove_activity('e561de8f-00f1-11e4-b400-0cc47a024be0')# Remove activities by their foreign_iduser_feed_1.remove_activity('tweet:1',foreign_id=true)# Follow another feeduser_feed_1.follow('flat','42')# Stop following another feeduser_feed_1.unfollow('flat','42')# Batch adding activitiesactivities=[[actor: '1',verb: 'tweet',object: '1'],[actor: '2',verb: 'like',object: '3']]user_feed_1.add_activities(activities)# Batch following many feeds (requires ruby 2.1 or later)follows=[{source: 'flat:1',target: 'user:1'},{source: 'flat:1',target: 'user:2'},{source: 'flat:1',target: 'user:3'}]client.follow_many(follows)# Add an activity and push it to other feeds too using the `to` fielddata=[actor_id: '1',verb: 'like',object_id: '3',to: %w[user:44user:45]]user_feed_1.add_activity(data)# Updating parts of an activityset={'product.price': 19.99,'shares': {'facebook': '...','twitter': '...'}}unset=%w[daily_likespopularity]# ...by IDclient.activity_partial_update(id: '54a60c1e-4ee3-494b-a1e3-50c06acb5ed4',set: set,unset: unset)# ...or by combination of foreign ID and timeclient.activity_partial_update(foreign_id: 'product:123',time: '2016-11-10T13:20:00.000000',set: set,unset: unset)# Generating tokens for client side usagetoken=user_feed_1.readonly_token# Javascript client side feed initializationuser1=client.feed('user','1','{{ token }}')# Retrieve first 10 followers of a feeduser_feed_1.followers(0,10)# Retrieve followers from 10 to 20user_feed_1.followers(10,10)# Retrieve 10 feeds followed by user_feed_1user_feed_1.following(10)# Retrieve 10 feeds followed by user_feed_1 starting from the 11thuser_feed_1.following(10,10)# Check if user_feed_1 follows specific feedsuser_feed_1.following(0,2,filter=%w[user:42user:43])# Add one activity to many feeds in one requestfeeds=%w[flat:1flat:2flat:3flat:4]activity={actor: 'User:2',verb: 'pin',object: 'Place:42',target: 'Board:1'}client.add_to_many(activity,feeds)Copyright (c) 2014-2020 Stream.io Inc, and individual contributors. All rights reserved.
See the file "LICENSE" for information on the history of this software, terms & conditions for usage, and a DISCLAIMER OF ALL WARRANTIES.