Stream-rails 是 Stream 的 Ruby on Rails 用戶端。
您可以在 https://getstream.io/get_started 註冊 Stream 帳號。
請注意,還有一個較低層級的 Ruby - Stream 整合庫,適用於所有 Ruby 應用程式。
這是Feeds產品的庫。可以在此處找到聊天 SDK。
您可以建立什麼:
活動流,例如在 Github 上看到的
Twitter 風格的動態消息
像 Instagram/pinterest 這樣的 feed
Facebook 風格的動態消息
通知系統
您可以在 Github 上查看使用此程式庫建立的範例應用程式 https://github.com/GetStream/Stream-Example-Rails
活動串流和新聞源
示範
目錄
寶石安裝
設定
支援的 ORM
活動記錄
續集
型號配置
活動領域
活動額外數據
活動創建
飼料經理
用戶動態:
新聞提要:
通知源:
與 feed_manager 捆綁的 Feed
關注動態
顯示新聞源
活動豐富化
模板化
分頁
禁用模型追蹤
運行規格
完整文件和低級 API 訪問
版權和許可資訊
您可以像安裝任何其他 gem 一樣安裝stream_rails
:
gem install stream_rails
或在你的 Gemfile 中:
gem 'stream_rails'
該庫經過測試並完全支援以下 Rails 版本:
5.0
5.2
6.0
6.1
在 getstream.io 上使用 Github 登錄,然後從應用程式設定(儀表板畫面)取得api_key
和api_secret
。
然後您可以在config/initializers/stream_rails.rb
中加入 StreamRails 配置
需要'stream_rails'StreamRails.configure do |config| config.api_key = "您的API 金鑰" config.api_secret = "您的API 秘密" config.timeout = 30 # 可選,預設為3 config.location = 'us-east' # 可選,預設為'us -east' config. api_hostname = 'stream-io-api.com' # 可選,預設為 'stream-io-api.com' # 如果您使用自訂提要名稱,例如:timeline_flat、timeline_aggreated, # 使用此名稱,否則省略: config.news_feeds = { flat: "timeline_flat",aggregate: "timeline_aggreated" } # 指向提供名稱的通知 feed 群組,如果沒有通知則忽略 # 有通知 feed config.notification_feed = "notification"end
集成將如下所示:
class Pin < ActiveRecord::Base include StreamRails::Activity as_activity def Activity_object self.item endend
請使用 Sequel ~5
。
集成將如下所示:
class Pin < Sequel::Model include StreamRails::Activity as_activity def Activity_object self.item endend
包含 StreamRails::Activity 並將 as_activity 新增至要與來源整合的模型中。
類別 Pin < ActiveRecord::Base 屬於_to :使用者 屬於_to :item 驗證 :item, Presence: true 驗證 :user, Presence: true include StreamRails::Activity as_activity def Activity_object self.item endend
每次創建 Pin 圖時,它都會儲存在創建它的用戶的來源中。當刪除 Pin 圖實例時,提要也會被刪除。
ActiveRecord 模型作為活動儲存在您的 feed 中;活動是講述一個人在某個對像上或使用某個對象執行操作的故事的對象,以最簡單的形式,活動由參與者、動詞和對象組成。為了實現這一點,您的模型需要實作以下方法:
#activity_object活動的物件(例如 AR 模型實例)
#activity_actor執行活動的參與者-該值還提供要新增活動的提要名稱和提要 ID。
例如,假設 Pin 是一個多態類,可以屬於使用者(例如User
ID:1)或公司(例如Company
ID:1)。在這種情況下,以下程式碼將根據其擁有者將 pin 發佈到user:1
feed 或company:1
feed。
class Pin < ActiveRecord::Base 屬於_to :owner, :polymorphic => true 屬於_to :item include StreamRails::Activity as_activity def Activity_actor self.owner end def Activity_object self.item endend
activity_actor
預設為self.user
#activity_verb動詞的字串表示形式(預設為模型類別名稱)
這是 Pin 類別的更完整範例:
類別 Pin < ActiveRecord::Base 屬於_to :作者 屬於_to :item 包括 StreamRails::Activity as_activity def Activity_actor self.author end def Activity_object self.item endend
通常您想要儲存的資料不僅僅是基本欄位。您可以透過在模型中實作#activity_extra_data
來實現這一點。
class Pin < ActiveRecord::Base 屬於_to :作者屬於_to :item include StreamRails::Activity as_activity def Activity_extra_data {'is_retweet' => self.is_retweet} end def Activity_object self.item endf.
如果您想控制何時建立活動,您應該實作#activity_should_sync?
模型中的方法。
類別 Pin < ActiveRecord::Base 屬於_to :作者屬於_to :item 包括 StreamRails::Activity as_activity def Activity_should_sync? self.published 結束 def Activity_object self.item endend
只有當self.published
為 true 時才會建立活動。
stream_rails
附帶一個 Feed Manager 類,可協助完成所有常見的 Feed 操作。您可以使用StreamRails.feed_manager
來取得管理器的實例。
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
為了幫助您入門,管理器預先配置了 4 個提要。如果您的應用程式需要,您可以添加更多提要。 Feed 分為三類。
用戶來源儲存用戶的所有活動。將其視為您的個人 Facebook 頁面。您可以輕鬆地從經理處獲取此提要。
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
新聞源儲存您關注的人的活動。有平面新聞源(類似 Twitter)和聚合新聞源(如 Facebook)。
feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] 聚合飼料= StreamRails.feed_manager.get_news_feeds(current_user.id)[:聚合]
通知來源可用於建置通知功能。
下面我們展示如何閱讀通知來源的範例。
notification_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
預設情況下,通知來源將為空。您可以指定在建立模型時要通知哪些使用者。在轉發的情況下,您可能想要通知用戶父推文。
類別Pin < ActiveRecord::Base 屬於_to :作者屬於_to :item 包含StreamRails::Activity as_activity def Activity_notify if self.is_retweet [StreamRails.feed_manager.get_notification_feed(self.parent.user_id)] end 錯誤. endend
另一個例子是關注用戶。您通常希望通知正在被關注的用戶。
類別Follow < ActiveRecord::Base 屬於_to :使用者屬於_to :目標驗證:target_id, Presence: true 驗證:user, Presence: true include StreamRails::Activity as_activity def Activity_notify [StreamRails.feed_manager.get_notification_feed(self. ] end def Activity_object自目標端
為了填充新聞源,您需要通知系統有關關注關係。
目前使用者的平面和聚合 feed 將遵循target_user
的使用者 feed,程式碼如下:
StreamRails.feed_manager.follow_user(user_id, target_id)
當您從 feed 中讀取資料時,pin 活動將如下所示:
{ "actor": "User:1", "verb": "like", "object": "Item:42" }
這還遠遠沒有準備好在您的模板中使用。我們將從資料庫載入參考文獻的過程稱為「豐富」。示例如下圖所示:
豐富者= StreamRails :: Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:平]結果= feed.get()['結果']活動=豐富者.enrich_activities(結果)
名為enrich_aggregated_activities
的類似方法可用於聚合提要。
豐富器= StreamRails :: Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:聚合]結果= feed.get()['結果']活動=豐富器.enrich_aggreated_activities(結果)
如果您的活動中有其他元資料(透過覆寫新增流活動混合的類別中的activity_extra_data
),您也可以透過執行下列操作來豐富該欄位的資料:
第一步:重寫 mixin 中的activity_extra_data
方法:
class Pin < ActiveRecord::Base include StreamRails::Activity as_activity attr_accessor :extra_data def Activity_object self.item end # 重寫此方法以將元資料新增至您的活動 def Activity_extra_data @extra_data end
現在我們將建立一個具有location
資料欄位的「pin」物件。在此範例中,我們還將有一個location
表和模型,並在extra_data
欄位中設定元資料。重要的是元資料的符號以及元資料的值與此模式相符。 string:string
元資料值的左半部在:
上拆分時也必須與模型名稱相符。
我們還必須告訴豐富器在查看我們的活動時也要獲取位置
boulder = Location.newboulder.name = "Boulder, CO"boulder.save!# 告訴豐富器也對 `location` model 進行查找enricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:location => "位置:#{boulder.id}"}
當我們稍後檢索活動時,豐富過程也將包括我們的location
模型,使我們能夠存取位置模型的屬性和方法:
地點 = 活動[:位置].name# 科羅拉多州博爾德
現在您已經豐富了活動,您可以在視圖中呈現它們。為了方便起見,我們提供了一個基本視圖:
<div class="container"> <div class="container-pins"> <% for activity in @activities %> <%= render_activity activity %> <% end %> </div> </div>
render_activity
視圖助手將透過選擇 pin 活動的部分activity/_pin
以及帶有動詞 follow 的聚合活動的aggregated_activity/_follow
來呈現活動。
助手會自動將activity
送到局部範圍;可以發送附加參數以及使用不同的佈局,並添加名稱前綴
例如使用small_activity
佈局渲染部分活動:
<%= render_activity activity, :layout => "small_activity" %>
例如,在模板名稱前加上“notification_”前綴:
<%= render_activity activity, :prefix => "notification_" %>
例如將 extra_var 新增到部分範圍:
<%= render_activity activity, :locals => {:extra_var => 42} %>
例如,使用notifications
部分根來渲染活動部分,這將使用路徑notifications/#{ACTIVITY_VERB}
渲染部分
<%= render_activity activity, :partial_root => "notifications" %>
對於簡單的分頁,您可以使用stream-ruby API,如下在控制器中:
StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] # 傳回一個 Stream::Feed 物件 results = feed.get(limit: 5, offset: 5)['results']
您可以透過 StreamRails.configure 停用模型追蹤(例如,當您執行測試時)
require 'stream_rails' StreamRails.enabled = false
從專案根目錄:
./bin/run_tests.sh
當需要時,您也可以直接使用低階 Ruby API。 Stream 網站上提供了文件。
版權所有 (c) 2014-2021 Stream.io Inc 和個人貢獻者。版權所有。
有關該軟體的歷史記錄、使用條款和條件以及所有保證的免責聲明的信息,請參閱文件「許可證」。