stream-rails は、Stream 用の Ruby on Rails クライアントです。
https://getstream.io/get_started で Stream アカウントにサインアップできます。
すべての Ruby アプリケーションに適した下位レベルの Ruby - Stream 統合ライブラリもあることに注意してください。
これはFeed製品のライブラリです。 Chat SDK はここにあります。
構築できるもの:
Github で見られるようなアクティビティ ストリーム
ツイッタースタイルのニュースフィード
instagram/pinterest のようなフィード
Facebook スタイルのニュースフィード
通知システム
Github https://github.com/GetStream/Stream-Example-Rails でこのライブラリを使用して構築されたサンプル アプリをチェックアウトできます。
アクティビティストリームとニュースフィード
デモ
目次
ジェムのインストール
設定
サポートされている ORM
アクティブレコード
続編
モデル構成
活動分野
アクティビティ追加データ
アクティビティの作成
フィードマネージャー
ユーザーフィード:
ニュースフィード:
通知フィード:
feed_manager にバンドルされたフィード
フィードをフォローする
ニュースフィードを表示する
アクティビティの充実
テンプレート化
ページネーション
モデル追跡を無効にする
ランニングスペック
完全なドキュメントと低レベル 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 構成を追加できます。
require '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_aggregated, # これを使用します。それ以外の場合は省略します: config.news_feeds = { flat: "timeline_ flat", aggregated: "timeline_aggregated" } # 名前を提供する通知フィード グループを指します、そうでない場合は省略します# 通知フィードがある 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 を追加します。
class Pin < ActiveRecord::Base 所属先 :user 所属_to :item :item を検証、プレゼンス: true :user を検証、プレゼンス: true include StreamRails::Activity as_activity def activity_object self.item endend
ピンが作成されるたびに、それを作成したユーザーのフィードに保存されます。 Pin インスタンスが削除されると、フィードも削除されます。
ActiveRecord モデルはアクティビティとしてフィードに保存されます。アクティビティは、オブジェクトに対して、またはオブジェクトを使ってアクションを実行する人についてのストーリーを伝えるオブジェクトです。最も単純な形式では、アクティビティはアクター、動詞、およびオブジェクトで構成されます。これを実現するには、モデルで次のメソッドを実装する必要があります。
#activity_objectアクティビティのオブジェクト (AR モデル インスタンスなど)
#activity_actorアクティビティを実行するアクター -- この値は、アクティビティが追加されるフィード名とフィード ID も提供します。
たとえば、Pin がユーザー (例: User
ID: 1) または会社 (例: Company
ID: 1) のいずれかに属することができる多態性クラスだったとします。その場合、以下のコードは、所有者に基づいてuser:1
フィードまたはcompany:1
フィードのいずれかにピンを投稿します。
class Pin < ActiveRecord::Base 所属先 :owner, :polymorphic => true 所属先 :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 クラスのより完全な例を次に示します。
class Pin < ActiveRecord::Base 所属先 :author 所属先 :item include StreamRails::Activity as_activity def activity_actor self.author end def activity_object self.item endend
多くの場合、基本的なフィールドだけでなく、より多くのデータを保存したい場合があります。これを実現するには、モデルに#activity_extra_data
を実装します。
class Pin < ActiveRecord::Base の所属先 :author 所属先 :item include StreamRails::Activity as_activity def activity_extra_data {'is_retweet' => self.is_retweet} end def activity_object self.item endend
アクティビティをいつ作成するかを制御したい場合は、 #activity_should_sync?
実装する必要があります。モデル内のメソッド。
class Pin < ActiveRecord::Base の所属先 :author の所属先 :item include StreamRails::Activity as_activity def activity_Should_sync? self.published end def activity_object self.item endend
これにより、 self.published
が true の場合にのみアクティビティが作成されます。
stream_rails
すべての一般的なフィード操作を支援するフィード マネージャー クラスが付属しています。 StreamRails.feed_manager
を使用してマネージャーのインスタンスを取得できます。
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
開始するために、マネージャーには 4 つのフィードが事前に構成されています。アプリケーションで必要な場合は、さらにフィードを追加できます。フィードは 3 つのカテゴリに分類されます。
ユーザー フィードには、ユーザーのすべてのアクティビティが保存されます。これをあなたの個人的な Facebook ページと考えてください。このフィードはマネージャーから簡単に取得できます。
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
ニュース フィードには、フォローしている人々のアクティビティが保存されます。フラットなニュースフィード (twitter のような) と集約されたニュースフィード (facebook のような) の両方があります。
フィード = StreamRails.feed_manager.get_news_feeds(current_user.id)[: flat] aggregated_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggregated]
通知フィードを使用して、通知機能を構築できます。
以下に、通知フィードを読み取る方法の例を示します。
notification_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
デフォルトでは、通知フィードは空です。モデルの作成時にどのユーザーに通知するかを指定できます。リツイートの場合は、親ツイートをユーザーに通知する必要があるでしょう。
class Pin < ActiveRecord::Base の所属先 :author 所属先 :item include StreamRails::Activity as_activity def activity_notify if self.is_retweet [StreamRails.feed_manager.get_notification_feed(self.parent.user_id)] end end def activity_object self.item endend
別の例としては、ユーザーをフォローすることが挙げられます。通常、どのユーザーがフォローされているかをユーザーに通知したいと考えます。
class Follow < ActiveRecord::Base begins_to :user neighbors_to :target validates :target_id, presents: true validates :user, presents: true include StreamRails::Activity as_activity def activity_notify [StreamRails.feed_manager.get_notification_feed(self.target_id)] end def activity_object self.target エンドエンド
ニュースフィードにデータを入力するには、フォロー関係についてシステムに通知する必要があります。
現在のユーザーのフラットな集約フィードは、次のコードでtarget_user
のユーザー フィードに従います。
StreamRails.feed_manager.follow_user(user_id, target_id)
フィードからデータを読み取るとき、ピン アクティビティは次のようになります。
{ "actor": "User:1", "verb": "like", "object": "Item:42" }
これはテンプレートで使用できる状態には程遠いです。データベースから参照をロードするプロセスを「エンリッチメント」と呼びます。以下に例を示します。
エンリッチャー = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[: flat]results = feed.get()['results']activities = richer.enrich_activities(results)
集約フィードには、 enrich_aggregated_activities
と呼ばれる同様のメソッドを使用できます。
enricher = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggregated]results = feed.get()['results']activities = richer.enrich_aggregated_activities(results)
アクティビティに追加のメタデータがある場合 (ストリーム アクティビティ ミックスインを追加するクラスでactivity_extra_data
オーバーライドすることによって)、次の手順を実行して、そのフィールドのデータを強化することもできます。
ステップ 1: ミックスインから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 endend
ここで、 location
メタデータ フィールドを持つ「ピン」オブジェクトを作成します。この例では、 location
テーブルとモデルもあり、 extra_data
フィールドにメタデータを設定します。メタデータの値だけでなく、メタデータのシンボルもこのパターンと一致することが重要です。 : で分割されるときのstring:string
メタデータ値の左半分も:
モデルの名前と一致する必要があります。
また、アクティビティを調べるときに場所も取得するようにエンリッチャーに指示する必要があります。
boulder = Location.newboulder.name = "Boulder, CO"boulder.save!# エンリッチャーに「location」モデルのルックアップも行うよう指示 enricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:location => "location:#{boulder.id}"}
後でアクティビティを取得すると、エンリッチメント プロセスにlocation
モデルも含まれるため、位置モデルの属性とメソッドにアクセスできるようになります。
place = activity[:location].name# コロラド州ボルダー
アクティビティを強化したので、それらをビューにレンダリングできるようになりました。便宜上、基本的なビューを含めます。
<div class="container"> <div class="container-pins"> <% for activity in @activities %> <%= render_activity activity %> <% end %> </div> </div>
render_activity
ビュー ヘルパーは、ピン アクティビティの場合は部分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 Web サイトから入手できます。
著作権 (c) 2014-2021 Stream.io Inc、および個人の寄稿者。無断転載を禁じます。
このソフトウェアの歴史、使用条件、およびすべての保証の免責事項については、ファイル「ライセンス」を参照してください。