stream-rails ist ein Ruby on Rails-Client für Stream.
Sie können sich unter https://getstream.io/get_started für ein Stream-Konto anmelden.
Beachten Sie, dass es auch eine Ruby-Stream-Integrationsbibliothek auf niedrigerer Ebene gibt, die für alle Ruby-Anwendungen geeignet ist.
Dies ist eine Bibliothek für das Feeds -Produkt. Die Chat-SDKs finden Sie hier.
Was Sie bauen können:
Aktivitätsströme, wie sie auf Github zu sehen sind
Ein Newsfeed im Twitter-Stil
Ein Feed wie Instagram/Pinterest
Newsfeeds im Facebook-Stil
Ein Benachrichtigungssystem
Sie können sich unsere mit dieser Bibliothek erstellte Beispiel-App auf Github https://github.com/GetStream/Stream-Example-Rails ansehen
Aktivitäts-Streams und Newsfeeds
Demo
Inhaltsverzeichnis
Edelsteininstallation
Aufstellen
Unterstützte ORMs
ActiveRecord
Folge
Modellkonfiguration
Aktivitätsfelder
Zusätzliche Aktivitätsdaten
Aktivitätserstellung
Feedmanager
Benutzerfeed:
Newsfeeds:
Benachrichtigungs-Feed:
Mit dem Feed_Manager gebündelte Feeds
Folgen Sie einem Feed
Zeigt den Newsfeed an
Aktivitätsanreicherung
Vorlage
Pagination
Deaktivieren Sie die Modellverfolgung
Laufspezifikationen
Vollständige Dokumentation und Zugriff auf Low-Level-APIs
Urheberrechts- und Lizenzinformationen
Sie können stream_rails
wie jedes andere Juwel installieren:
gem install stream_rails
oder in Ihrer Gemfile:
gem 'stream_rails'
Diese Bibliothek wurde mit den folgenden Rails-Versionen getestet und unterstützt diese vollständig:
5,0
5.2
6,0
6.1
Melden Sie sich mit Github auf getstream.io an und erhalten Sie Ihren api_key
und api_secret
aus Ihrer App-Konfiguration (Dashboard-Bildschirm).
Anschließend können Sie die StreamRails-Konfiguration in config/initializers/stream_rails.rb
hinzufügen
erfordern 'stream_rails'StreamRails.configure do |config| config.api_key = "IHR API-SCHLÜSSEL" config.api_secret = "IHR API-GEHEIMNIS" config.timeout = 30 # Optional, standardmäßig 3 config.location = 'us-east' # Optional, standardmäßig 'us-east'-Konfiguration. api_hostname = 'stream-io-api.com' # Optional, standardmäßig ist 'stream-io-api.com' # Wenn Sie benutzerdefinierte Feed-Namen verwenden, z. B.: timeline_flat, timeline_aggregated, # verwenden Sie dies, andernfalls lassen Sie es weg: config.news_feeds = { flat: "timeline_flat", aggregiert: "timeline_aggregated" } # Zeigen Sie auf die Benachrichtigungs-Feed-Gruppe und geben Sie den Namen an. Lassen Sie es weg, wenn Sie keinen Benachrichtigungs-Feed haben config.notification_feed = "notification"end
Die Integration sieht wie folgt aus:
Klasse Pin < ActiveRecord::Base include StreamRails::Activity as_activity defactivity_object self.item endend
Bitte verwenden Sie Sequel ~5
.
Die Integration sieht wie folgt aus:
Klasse Pin < Sequel::Model include StreamRails::Activity as_activity defactivity_object self.item endend
Schließen Sie StreamRails::Activity ein und fügen Sie as_activity zu dem Modell hinzu, das Sie in Ihre Feeds integrieren möchten.
Klasse Pin < ActiveRecord::Base gehört_zu :Benutzer gehört_zu :item validiert :item, Präsenz: true validiert :Benutzer, Präsenz: true include StreamRails::Activity as_activity defactivity_object self.item endend
Jedes Mal, wenn ein Pin erstellt wird, wird er im Feed des Benutzers gespeichert, der ihn erstellt hat. Wenn eine Pin-Instanz gelöscht wird, wird auch der Feed entfernt.
ActiveRecord-Modelle werden in Ihren Feeds als Aktivitäten gespeichert; Aktivitäten sind Objekte, die die Geschichte einer Person erzählen, die eine Aktion an oder mit einem Objekt ausführt. In ihrer einfachsten Form besteht eine Aktivität aus einem Akteur, einem Verb und einem Objekt. Damit dies geschieht, müssen Ihre Modelle die folgenden Methoden implementieren:
#activity_object das Objekt der Aktivität (z. B. eine AR-Modellinstanz)
#activity_actor der Akteur, der die Aktivität ausführt – dieser Wert stellt auch den Feed-Namen und die Feed-ID bereit, zu der die Aktivität hinzugefügt wird.
Nehmen wir zum Beispiel an, ein Pin wäre eine polymorphe Klasse, die entweder einem Benutzer (z. B. User
ID: 1) oder einem Unternehmen (z. B. Company
-ID: 1) gehören könnte. In diesem Fall würde der folgende Code den Pin je nach Besitzer entweder im Feed user:1
oder im Feed company:1
veröffentlichen.
Klasse Pin < ActiveRecord::Base gehört_zu :owner, :polymorphic => true gehört_zu :item include StreamRails::Activity as_activity defactivity_actor self.owner end defactivity_object self.item endend
Der activity_actor
ist standardmäßig self.user
#activity_verb die Zeichenfolgendarstellung des Verbs (standardmäßig der Modellklassenname)
Hier ist ein vollständigeres Beispiel der Pin-Klasse:
Klasse Pin < ActiveRecord::Base gehört_zu :Autor gehört_zu :item include StreamRails::Activity as_activity defactivity_actor self.author end defactivity_object self.item endend
Oft möchten Sie mehr Daten als nur die Basisfelder speichern. Dies erreichen Sie durch die Implementierung #activity_extra_data
in Ihrem Modell.
class Pin < ActiveRecord::Base gehört_zu :Autor gehört_zu :item include StreamRails::Activity as_activity defactivity_extra_data {'is_retweet' => self.is_retweet} end defactivity_object self.item endend
Wenn Sie steuern möchten, wann eine Aktivität erstellt werden soll, sollten Sie #activity_should_sync?
implementieren. Methode in Ihrem Modell.
class Pin < ActiveRecord::Base gehört_zu :Autor gehört_zu :item include StreamRails::Activity as_activity defactivity_should_sync? self.published end defactivity_object self.item endend
Dadurch wird nur dann eine Aktivität erstellt, wenn self.published
wahr ist.
stream_rails
enthält eine Feed-Manager-Klasse, die bei allen gängigen Feed-Vorgängen hilft. Sie können eine Instanz des Managers mit StreamRails.feed_manager
abrufen.
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
Um Ihnen den Einstieg zu erleichtern, sind im Manager vier Feeds vorkonfiguriert. Sie können weitere Feeds hinzufügen, wenn Ihre Anwendung dies erfordert. Feeds sind in drei Kategorien unterteilt.
Der Benutzerfeed speichert alle Aktivitäten für einen Benutzer. Betrachten Sie es als Ihre persönliche Facebook-Seite. Sie können diesen Feed ganz einfach vom Manager erhalten.
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
Newsfeeds speichern Aktivitäten der Personen, denen Sie folgen. Es gibt sowohl einen flachen Newsfeed (ähnlich wie bei Twitter) als auch einen aggregierten Newsfeed (wie bei Facebook).
feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] aggregated_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggregated]
Der Benachrichtigungs-Feed kann zum Erstellen von Benachrichtigungsfunktionen verwendet werden.
Nachfolgend zeigen wir ein Beispiel, wie Sie den Benachrichtigungs-Feed lesen können.
notification_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
Standardmäßig ist der Benachrichtigungs-Feed leer. Sie können angeben, welche Benutzer benachrichtigt werden sollen, wenn Ihr Modell erstellt wird. Im Falle eines Retweets möchten Sie den Benutzer wahrscheinlich über den übergeordneten Tweet informieren.
Klasse Pin < ActiveRecord::Base gehört_zu :Autor gehört_zu :item include StreamRails::Activity as_activity defactivity_notify if self.is_retweet [StreamRails.feed_manager.get_notification_feed(self.parent.user_id)] end end defactivity_object self.item endend
Ein anderes Beispiel wäre das Verfolgen eines Benutzers. Im Allgemeinen möchten Sie den Benutzer benachrichtigen, der verfolgt wird.
Klasse Folgen < ActiveRecord::Base gehört_zu :Benutzer gehört_zu :target validiert :target_id, Präsenz: wahr validiert :Benutzer, Präsenz: wahr include StreamRails::Activity as_activity defactivity_notify [StreamRails.feed_manager.get_notification_feed(self.target_id)] end defactivity_object self.target endend
Um Newsfeeds zu füllen, müssen Sie das System über Follow-Beziehungen informieren.
Die flachen und aggregierten Feeds des aktuellen Benutzers folgen dem Benutzer-Feed von target_user
mit dem folgenden Code:
StreamRails.feed_manager.follow_user(user_id, target_id)
Wenn Sie Daten aus Feeds lesen, sieht eine Pin-Aktivität folgendermaßen aus:
{ „actor“: „User:1“, „verb“: „like“, „object“: „Item:42“ }
Dies ist noch lange nicht für die Verwendung in Ihrer Vorlage bereit. Den Vorgang des Ladens der Referenzen aus der Datenbank nennen wir „Anreicherung“. Ein Beispiel ist unten dargestellt:
Enricher = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat]results = feed.get()['results']activities = Enricher.enrich_activities(results)
Für aggregierte Feeds ist eine ähnliche Methode namens enrich_aggregated_activities
verfügbar.
Enricher = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggregated]results = feed.get()['results']activities = Enricher.enrich_aggregated_activities(results)
Wenn Ihre Aktivität zusätzliche Metadaten enthält (indem Sie activity_extra_data
in der Klasse überschreiben, in der Sie das Stream-Aktivitäts-Mixin hinzufügen), können Sie die Daten dieses Felds auch wie folgt anreichern:
Schritt eins: Überschreiben Sie die Methode activity_extra_data
aus unserem Mixin:
class Pin < ActiveRecord::Base include StreamRails::Activity as_activity attr_accessor :extra_data defactivity_object self.item end # diese Methode überschreiben, um Metadaten zu Ihrer Aktivität hinzuzufügen defactivity_extra_data @extra_data endend
Jetzt erstellen wir ein „Pin“-Objekt, das über ein location
verfügt. In diesem Beispiel verfügen wir auch über eine location
und ein Standortmodell und richten unsere Metadaten im Feld extra_data
ein. Wichtig ist, dass das Symbol der Metadaten sowie der Wert der Metadaten diesem Muster entsprechen. Die linke Hälfte des Metadatenwerts string:string
muss bei der Aufteilung nach :
ebenfalls mit dem Namen des Modells übereinstimmen.
Wir müssen dem Enricher außerdem mitteilen, dass er bei der Durchsicht unserer Aktivitäten auch Standorte abrufen soll
boulder = Location.newboulder.name = "Boulder, CO"boulder.save!# Weisen Sie den Anreicherer an, auch eine Suche nach dem „Standort“ durchzuführen modelenricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:location => "location:#{boulder.id}"}
Wenn wir die Aktivität später abrufen, umfasst der Anreicherungsprozess auch unser location
, wodurch wir Zugriff auf Attribute und Methoden des Standortmodells erhalten:
Ort = Aktivität[:Standort].name# Boulder, CO
Nachdem Sie die Aktivitäten nun angereichert haben, können Sie sie in einer Ansicht rendern. Der Einfachheit halber fügen wir eine Grundansicht hinzu:
<div class="container"> <div class="container-pins"> <% for activity in @activities %> <%= render_activity activity %> <% end %> </div> </div>
Der View-Helfer render_activity
rendert die Aktivität, indem er die partielle activity/_pin
für eine Pin-Aktivität und aggregated_activity/_follow
für eine aggregierte Aktivität mit Verb „follow“ auswählt.
Der Helfer sendet automatisch activity
an den lokalen Bereich des Teils; Es können zusätzliche Parameter gesendet werden sowie unterschiedliche Layouts verwendet und dem Namen ein Präfix vorangestellt werden
Rendert beispielsweise die Aktivität teilweise mithilfe des small_activity
Layouts:
<%= render_activity activity, :layout => "small_activity" %>
z. B. stellt dem Namen der Vorlage „notification_“ voran:
<%= render_activity activity, :prefix => "notification_" %>
Fügt beispielsweise die extra_var zum Teilbereich hinzu:
<%= render_activity activity, :locals => {:extra_var => 42} %>
Beispielsweise wird die Aktivität teilweise unter Verwendung des notifications
Teilstammverzeichnisses gerendert, wodurch der Teilteil mit dem Pfad notifications/#{ACTIVITY_VERB}
gerendert wird.
<%= render_activity activity, :partial_root => "notifications" %>
Für eine einfache Paginierung können Sie die Stream-Ruby-API wie folgt in Ihrem Controller verwenden:
StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] # Gibt ein Stream::Feed-Objekt zurück results = feed.get(limit: 5, offset: 5)['results']
Sie können die Modellverfolgung (z. B. beim Ausführen von Tests) über StreamRails.configure deaktivieren
require 'stream_rails' StreamRails.enabled = false
Aus dem Projektstammverzeichnis:
./bin/run_tests.sh
Bei Bedarf können Sie auch direkt die Low-Level-Ruby-API verwenden. Die Dokumentation ist auf der Stream-Website verfügbar.
Copyright (c) 2014-2021 Stream.io Inc und einzelne Mitwirkende. Alle Rechte vorbehalten.
Informationen zur Geschichte dieser Software, Nutzungsbedingungen und einen HAFTUNGSAUSSCHLUSS ALLER GEWÄHRLEISTUNGEN finden Sie in der Datei „LIZENZ“.