stream-rails es un cliente Ruby on Rails para Stream.
Puede registrarse para obtener una cuenta de Stream en https://getstream.io/get_started.
Tenga en cuenta que también hay una biblioteca de integración Ruby - Stream de nivel inferior que es adecuada para todas las aplicaciones Ruby.
Esta es una biblioteca para el producto Feeds . Los SDK de Chat se pueden encontrar aquí.
Qué puedes construir:
Flujos de actividad como los que se ven en Github
Un suministro de noticias al estilo de Twitter.
Un feed como instagram/pinterest
Feeds de noticias al estilo de Facebook
Un sistema de notificación
Puede consultar nuestra aplicación de ejemplo creada con esta biblioteca en Github https://github.com/GetStream/Stream-Example-Rails
Secuencias de actividad y suministro de noticias
Manifestación
Tabla de contenido
instalación de gemas
Configuración
ORM soportados
registro activo
Continuación
Configuración del modelo
Campos de actividad
Datos extra de actividad
Creación de actividad
Administrador de feeds
Feed de usuario:
Fuentes de noticias:
Canal de notificaciones:
Feeds incluidos con feed_manager
Seguir un feed
Mostrando el suministro de noticias
Enriquecimiento de actividades
Plantillas
Paginación
Deshabilitar el seguimiento del modelo
Especificaciones de funcionamiento
Documentación completa y acceso a API de bajo nivel
Información de derechos de autor y licencia
Puedes instalar stream_rails
como lo harías con cualquier otra joya:
gem install stream_rails
o en tu Gemfile:
gem 'stream_rails'
Esta biblioteca se prueba y es totalmente compatible con las siguientes versiones de Rails:
5.0
5.2
6.0
6.1
Inicie sesión con Github en getstream.io y obtenga su api_key
y api_secret
desde la configuración de su aplicación (pantalla del Panel).
Luego puede agregar la configuración de StreamRails en config/initializers/stream_rails.rb
requiere 'stream_rails'StreamRails.configure hacer |config| config.api_key = "SU CLAVE API" config.api_secret = "SU SECRETO API" config.timeout = 30 # Opcional, por defecto es 3 config.location = 'us-east' # Opcional, por defecto es config. 'us-east'. api_hostname = 'stream-io-api.com' # Opcional, por defecto es 'stream-io-api.com' # Si usa nombres de feeds personalizados, por ejemplo: timeline_flat, timeline_aggregated, # use esto; de lo contrario, omita: config.news_feeds = { flat: "timeline_flat", agregado: "timeline_aggregated" } # Apunte al grupo de fuentes de notificaciones que proporciona el nombre, omítalo si no # tiene una fuente de notificaciones config.notification_feed = "notificación" fin
La integración quedará de la siguiente manera:
clase Pin < ActiveRecord::Base incluye StreamRails::Actividad as_actividad def actividad_objeto self.item final
Por favor, utilice Sequel ~5
.
La integración quedará de la siguiente manera:
Pin de clase < Secuela::El modelo incluye StreamRails::Actividad as_actividad def actividad_objeto self.item endend
Incluya StreamRails::Activity y agregue as_activity al modelo que desea integrar con sus feeds.
Pin de clase < ActiveRecord::Base pertenece_a :usuario pertenece_a :elemento valida :elemento, presencia: verdadero valida :usuario, presencia: verdadero incluye StreamRails::Actividad as_actividad def objeto_actividad self.elemento final
Cada vez que se crea un Pin, se almacenará en el feed del usuario que lo creó. Cuando se elimina una instancia de Pin, el feed también se eliminará.
Los modelos ActiveRecord se almacenan en sus feeds como actividades; Las actividades son objetos que cuentan la historia de una persona que realiza una acción sobre o con un objeto; en su forma más simple, una actividad consta de un actor, un verbo y un objeto. Para que esto suceda, sus modelos deben implementar estos métodos:
#activity_object el objeto de la actividad (por ejemplo, una instancia de modelo AR)
#activity_actor el actor que realiza la actividad; este valor también proporciona el nombre del feed y el ID del feed al que se agregará la actividad.
Por ejemplo, digamos que un Pin es una clase polimórfica que podría pertenecer a un usuario (por ejemplo, ID User
: 1) o a una empresa (por ejemplo, ID Company
: 1). En ese caso, el siguiente código publicaría el pin en el feed del user:1
o en el feed de la company:1
según su propietario.
class Pin < ActiveRecord::Base pertenece_a: propietario, :polimórfico => verdadero pertenece_a: elemento incluye StreamRails::Actividad as_actividad def actividad_actor self.propietario fin def objeto_actividad uno mismo.elemento fin
activity_actor
por defecto es self.user
#activity_verb la representación de cadena del verbo (el valor predeterminado es el nombre de la clase del modelo)
Aquí hay un ejemplo más completo de la clase Pin:
clase Pin < ActiveRecord::Base pertenece_a :autor pertenece_a :item include StreamRails::Actividad as_actividad def actividad_actor self.autor fin def actividad_objeto self.item fin
A menudo querrás almacenar más datos que sólo los campos básicos. Esto lo logras implementando #activity_extra_data
en tu modelo.
Pin de clase < ActiveRecord::Base pertenece_a :autor pertenece_a :item include StreamRails::Activity as_activity def Activity_extra_data {'is_retweet' => self.is_retweet} end def Activity_object self.item endend
Si desea controlar cuándo crear una actividad, debe implementar #activity_should_sync?
método en su modelo.
Pin de clase < ActiveRecord::Base pertenece_a :autor pertenece_a :elemento incluye StreamRails::Actividad as_actividad def actividad_debería sincronizar? self.publicado fin def objeto_actividad self.item fin final
Esto creará una actividad solo cuando self.published
sea verdadero.
stream_rails
viene con una clase de Administrador de feeds que ayuda con todas las operaciones de feeds comunes. Puede obtener una instancia del administrador con StreamRails.feed_manager
.
alimentación = StreamRails.feed_manager.get_user_feed(current_user.id)
Para comenzar, el administrador tiene 4 feeds preconfigurados. Puede agregar más feeds si su aplicación lo requiere. Los feeds se dividen en tres categorías.
El feed de usuario almacena todas las actividades de un usuario. Piense en ello como su página personal de Facebook. Puede obtener fácilmente este feed del administrador.
alimentación = StreamRails.feed_manager.get_user_feed(current_user.id)
Las fuentes de noticias almacenan actividades de las personas que sigues. Hay tanto un suministro de noticias plano (similar a Twitter) como un suministro de noticias agregado (como Facebook).
feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:plano] agregado_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:agregado]
El feed de notificaciones se puede utilizar para crear funciones de notificación.
A continuación mostramos un ejemplo de cómo puede leer el feed de notificaciones.
notification_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
De forma predeterminada, el feed de notificaciones estará vacío. Puede especificar a qué usuarios notificar cuando se crea su modelo. En el caso de un retweet, probablemente quieras notificar al usuario sobre el tweet principal.
Pin de clase < ActiveRecord::Base pertenece_a :autor pertenece_a :elemento incluye StreamRails::Actividad como_actividad def actividad_notificar si self.is_retweet [StreamRails.feed_manager.get_notification_feed(self.parent.user_id)] fin fin def objeto_actividad self.item fin
Otro ejemplo sería seguir a un usuario. Por lo general, querrás notificar al usuario a quién se está siguiendo.
clase Seguir < ActiveRecord::Base pertenece_a :usuario pertenece_a :objetivo valida :target_id, presencia: verdadero valida :usuario, presencia: verdadero incluye StreamRails::Actividad as_actividad def actividad_notificar [StreamRails.feed_manager.get_notification_feed(self.target_id)] fin def objeto_actividad final del autoobjetivo
Para completar las fuentes de noticias, debe notificar al sistema sobre las relaciones de seguimiento.
Los feeds planos y agregados del usuario actual seguirán el feed del usuario target_user
, con el siguiente código:
StreamRails.feed_manager.follow_user(user_id, target_id)
Cuando lees datos de feeds, una actividad de pin se verá así:
{ "actor": "Usuario:1", "verbo": "me gusta", "objeto": "Artículo:42" }
Esto está lejos de estar listo para usarse en su plantilla. Al proceso de cargar las referencias de la base de datos lo llamamos "enriquecimiento". A continuación se muestra un ejemplo:
enricher = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat]resultados = feed.get()['resultados']actividades = enricher.enrich_activities(resultados)
Un método similar llamado enrich_aggregated_activities
está disponible para feeds agregados.
enricher = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:agregado]resultados = feed.get()['resultados']actividades = enricher.enrich_aggregated_activities(resultados)
Si tiene metadatos adicionales en su actividad (al anular activity_extra_data
en la clase donde agrega el mixin Stream Activity), también puede enriquecer los datos de ese campo haciendo lo siguiente:
Paso uno: anule el método activity_extra_data
de nuestro mixin:
class Pin < ActiveRecord::Base include StreamRails::Activity as_activity attr_accessor :extra_data def Activity_object self.item end # anula este método para agregar metadatos a tu actividad def Activity_extra_data @extra_data endend
Ahora crearemos un objeto 'pin' que tiene un campo de metadatos location
. En este ejemplo, también tendremos una tabla location
y un modelo, y configuraremos nuestros metadatos en el campo extra_data
. Es importante que el símbolo de los metadatos y el valor de los metadatos coincidan con este patrón. La mitad izquierda del valor de metadatos string:string
cuando se divide en :
también debe coincidir con el nombre del modelo.
También debemos decirle al enriquecedor que también busque ubicaciones cuando revise nuestras actividades.
boulder = Location.newboulder.name = "Boulder, CO"boulder.save!# dígale al enriquecedor que también haga una búsqueda en el modelo `ubicación`enricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:ubicación => "ubicación:#{boulder.id}"}
Cuando recuperemos la actividad más adelante, el proceso de enriquecimiento también incluirá nuestro modelo location
, dándonos acceso a los atributos y métodos del modelo de ubicación:
lugar = actividad[:ubicación].nombre# Boulder, CO
Ahora que ha enriquecido las actividades, puede representarlas en una vista. Para mayor comodidad incluimos una vista básica:
<div class="container"> <div class="container-pins"> <% for activity in @activities %> <%= render_activity activity %> <% end %> </div> </div>
El asistente de vista render_activity
representará la actividad seleccionando la activity/_pin
para una actividad de pin, aggregated_activity/_follow
para una actividad agregada con verbo seguir.
El ayudante enviará automáticamente activity
al ámbito local del parcial; Se pueden enviar parámetros adicionales, así como usar diferentes diseños y anteponer el nombre.
por ejemplo, representa la actividad parcial usando el diseño de small_activity
:
<%= render_activity activity, :layout => "small_activity" %>
por ejemplo, antepone el nombre de la plantilla con "notificación_":
<%= render_activity activity, :prefix => "notification_" %>
por ejemplo, agrega extra_var al alcance parcial:
<%= render_activity activity, :locals => {:extra_var => 42} %>
por ejemplo, representa la actividad parcial usando la raíz parcial notifications
, que representará la actividad parcial con la ruta notifications/#{ACTIVITY_VERB}
<%= render_activity activity, :partial_root => "notifications" %>
Para una paginación simple, puede usar la API stream-ruby, de la siguiente manera en su controlador:
StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] # Devuelve un objeto Stream::Feed resultados = feed.get(límite: 5, desplazamiento: 5)['resultados']
Puede desactivar el seguimiento del modelo (por ejemplo, cuando ejecuta pruebas) a través de StreamRails.configure
require 'stream_rails' StreamRails.enabled = false
Desde el directorio raíz del proyecto:
./bin/run_tests.sh
Cuando sea necesario, también puede utilizar la API Ruby de bajo nivel directamente. La documentación está disponible en el sitio web de Stream.
Copyright (c) 2014-2021 Stream.io Inc y contribuyentes individuales. Reservados todos los derechos.
Consulte el archivo "LICENCIA" para obtener información sobre el historial de este software, los términos y condiciones de uso y una EXENCIÓN DE RESPONSABILIDAD DE TODAS LAS GARANTÍAS.