stream-rails는 Stream용 Ruby on Rails 클라이언트입니다.
https://getstream.io/get_started에서 Stream 계정에 가입할 수 있습니다.
모든 Ruby 애플리케이션에 적합한 하위 수준 Ruby - Stream 통합 라이브러리도 있습니다.
피드 제품용 라이브러리입니다. Chat SDK는 여기에서 찾을 수 있습니다.
당신이 만들 수 있는 것:
Github에서 볼 수 있는 활동 스트림
트위터 스타일의 뉴스피드
인스타그램/핀터레스트 같은 피드
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_plat, timeline_aggregated, # 이것을 사용하고 그렇지 않으면 생략: config.news_feeds = { flat: "timeline_plat", Aggregated: "timeline_aggregated" } # 이름을 제공하는 알림 피드 그룹을 가리키고 # 알림 피드가 없으면 생략합니다. config.notification_feed = "알림"end
통합은 다음과 같습니다.
클래스 핀 < ActiveRecord::Base include StreamRails::Activity as_activity def Activity_object self.item endend
속편 ~5
사용하세요.
통합은 다음과 같습니다.
클래스 핀 < Sequel::Model include StreamRails::Activity as_activity def Activity_object self.item endend
StreamRails::Activity를 포함하고 피드와 통합하려는 모델에 as_activity를 추가하세요.
클래스 핀 < ActiveRecord::Base presents_to :user presents_to :item 검증:item, 존재: true 검증:user, 존재: true include StreamRails::Activity as_activity def Activity_object self.item endend
핀이 생성될 때마다 핀을 생성한 사용자의 피드에 저장됩니다. 핀 인스턴스가 삭제되면 피드도 제거됩니다.
ActiveRecord 모델은 피드에 활동으로 저장됩니다. 활동은 사람이 개체에 대해 또는 개체를 사용하여 작업을 수행하는 이야기를 전달하는 개체입니다. 가장 간단한 형태로 활동은 행위자, 동사 및 개체로 구성됩니다. 이를 위해서는 모델이 다음 메서드를 구현해야 합니다.
#activity_object 활동 객체(예: AR 모델 인스턴스)
#activity_actor 활동을 수행하는 행위자 - 이 값은 활동이 추가될 피드 이름과 피드 ID도 제공합니다.
예를 들어 핀이 사용자(예: User
ID: 1) 또는 회사(예: Company
ID: 1)에 속할 수 있는 다형성 클래스라고 가정해 보겠습니다. 이 경우 아래 코드는 핀을 소유자에 따라 user:1
피드 또는 company:1
피드에 게시합니다.
class Pin < ActiveRecord::Base own_to :owner, :polymorphic => true own_to :item include StreamRails::Activity def Activity_actor self.owner end def Activity_object self.item endend
activity_actor
기본값은 self.user
입니다.
#activity_verb 동사의 문자열 표현(기본값은 모델 클래스 이름)
다음은 Pin 클래스의 보다 완전한 예입니다.
클래스 핀 < ActiveRecord::Base own_to :author presents_to :item include StreamRails::Activity as_activity def Activity_actor self.author end def Activity_object self.item endend
기본 필드보다 더 많은 데이터를 저장하려는 경우가 많습니다. 모델에 #activity_extra_data
구현하면 이를 달성할 수 있습니다.
클래스 핀 < ActiveRecord::Base 소속_to :author 소속_to :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?
를 구현해야 합니다. 모델의 방법.
클래스 핀 < ActiveRecord::Base 소속_to :저자 소속_to :항목 포함 StreamRails::Activity as_activity def Activity_should_sync? self.published end def Activity_object self.item endend
self.published
가 true인 경우에만 활동이 생성됩니다.
stream_rails
모든 일반적인 피드 작업에 도움이 되는 Feed Manager 클래스와 함께 제공됩니다. StreamRails.feed_manager
사용하여 관리자 인스턴스를 가져올 수 있습니다.
피드 = StreamRails.feed_manager.get_user_feed(current_user.id)
시작하는 데 도움이 되도록 관리자에는 4개의 피드가 미리 구성되어 있습니다. 애플리케이션에 필요한 경우 더 많은 피드를 추가할 수 있습니다. 피드는 세 가지 범주로 나뉩니다.
사용자 피드는 사용자의 모든 활동을 저장합니다. 개인 Facebook 페이지라고 생각하세요. 이 피드는 관리자로부터 쉽게 얻을 수 있습니다.
피드 = StreamRails.feed_manager.get_user_feed(current_user.id)
뉴스 피드는 귀하가 팔로우하는 사람들의 활동을 저장합니다. 플랫 뉴스피드(트위터와 유사)와 통합 뉴스피드(페이스북 등)가 모두 있습니다.
피드 = StreamRails.feed_manager.get_news_feeds(current_user.id)[:플랫] Aggregated_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggregated]
알림 피드를 사용하여 알림 기능을 구축할 수 있습니다.
아래에서는 알림 피드를 읽는 방법의 예를 보여줍니다.
notification_feed=StreamRails.feed_manager.get_notification_feed(current_user.id)
기본적으로 알림 피드는 비어 있습니다. 모델이 생성될 때 알릴 사용자를 지정할 수 있습니다. 리트윗의 경우 상위 트윗을 사용자에게 알리고 싶을 수도 있습니다.
클래스 핀 < ActiveRecord::Base own_to :author presents_to :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 own_to :user presents_to :target 검증 :target_id, 존재: true 검증 :user, 존재: 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" }
아직 템플릿에서 사용할 준비가 되지 않았습니다. 데이터베이스에서 참조를 로드하는 프로세스를 "강화"라고 부릅니다. 예가 아래에 나와 있습니다.
richer = 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
라는 유사한 메서드를 집계된 피드에 사용할 수 있습니다.
richer = 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!# Enricher에게 `location`에 대한 조회도 수행하도록 지시합니다. modelenricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:location => "위치:#{boulder.id}"}
나중에 활동을 검색하면 강화 프로세스에 location
모델도 포함되어 위치 모델의 속성과 메서드에 액세스할 수 있습니다.
장소 = 활동[:location].name# 볼더, 콜로라도
이제 활동이 풍부해졌으므로 보기에서 렌더링할 수 있습니다. 편의를 위해 기본 보기를 포함합니다.
<div class="container"> <div class="container-pins"> <% for activity in @activities %> <%= render_activity activity %> <% end %> </div> </div>
render_activity
보기 도우미는 핀 활동의 경우 부분적인 activity/_pin
선택하고 동사 팔로우가 포함된 집계된 활동의 경우 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 및 개인 기여자. 모든 권리 보유.
이 소프트웨어의 내역, 사용 약관 및 모든 보증의 부인에 대한 정보는 "라이센스" 파일을 참조하십시오.