stream-rails เป็นไคลเอนต์ Ruby on Rails สำหรับ Stream
คุณสามารถสมัครบัญชีสตรีมได้ที่ https://getstream.io/get_started
โปรดทราบว่ายังมีไลบรารีการรวม Ruby - Stream ระดับต่ำกว่าซึ่งเหมาะสำหรับแอปพลิเคชัน Ruby ทั้งหมด
นี่คือไลบรารีสำหรับผลิตภัณฑ์ ฟีด Chat SDK สามารถพบได้ที่นี่
สิ่งที่คุณสามารถสร้างได้:
สตรีมกิจกรรมเช่นที่เห็นบน Github
ฟีดข่าวสไตล์ทวิตเตอร์
ฟีดเช่น instagram/pinterest
ฟีดข่าวสไตล์ Facebook
มีระบบแจ้งเตือน
คุณสามารถตรวจสอบแอปตัวอย่างของเราที่สร้างขึ้นโดยใช้ไลบรารีนี้บน Github https://github.com/GetStream/Stream-Example-Rails
สตรีมกิจกรรมและฟีดข่าว
สาธิต
สารบัญ
การติดตั้งอัญมณี
ตั้งค่า
ORM ที่รองรับ
ActiveRecord
ภาคต่อ
การกำหนดค่าโมเดล
ฟิลด์กิจกรรม
กิจกรรมข้อมูลพิเศษ
การสร้างกิจกรรม
ผู้จัดการฟีด
ฟีดผู้ใช้:
ฟีดข่าว:
ฟีดการแจ้งเตือน:
ฟีดที่มาพร้อมกับ feed_manager
ติดตามฟีด
กำลังแสดงฟีดข่าว
การเพิ่มคุณค่าของกิจกรรม
การสร้างเทมเพลต
การแบ่งหน้า
ปิดใช้งานการติดตามโมเดล
สเปคการวิ่ง
เอกสารฉบับสมบูรณ์และการเข้าถึง API ระดับต่ำ
ข้อมูลลิขสิทธิ์และใบอนุญาต
คุณสามารถติดตั้ง stream_rails
ได้เหมือนกับที่คุณทำกับอัญมณีอื่น ๆ :
gem install stream_rails
หรือใน Gemfile ของคุณ:
gem 'stream_rails'
ไลบรารีนี้ได้รับการทดสอบและรองรับ Rails เวอร์ชันต่อไปนี้อย่างสมบูรณ์:
5.0
5.2
6.0
6.1
เข้าสู่ระบบด้วย Github บน getstream.io และรับ api_key
และ api_secret
จากการกำหนดค่าแอปของคุณ (หน้าจอแดชบอร์ด)
จากนั้นคุณสามารถเพิ่มการกำหนดค่า StreamRails ใน config/initializers/stream_rails.rb
ต้องการ 'stream_rails'StreamRails.configure ทำ | 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", รวม: "timeline_aggregated" } # ชี้ไปที่กลุ่มฟีดการแจ้งเตือนที่ให้ชื่อ ละเว้นหากคุณไม่มี # มี ฟีดการแจ้งเตือน config.notification_feed = "การแจ้งเตือน"สิ้นสุด
การรวมจะมีลักษณะดังนี้:
คลาสพิน < ActiveRecord::Base รวมถึง StreamRails::Activity as_activity def Activity_object self.item สิ้นสุด
กรุณาใช้ Sequel ~5
การรวมจะมีลักษณะดังนี้:
class Pin < ภาคต่อ :: Model รวม StreamRails :: กิจกรรม as_activity def กิจกรรม_วัตถุ self.item สิ้นสุด
รวม StreamRails::Activity และเพิ่ม as_activity ให้กับโมเดลที่คุณต้องการรวมเข้ากับฟีดของคุณ
class Pin < ActiveRecord::Baseเป็นของ_to :userเป็นของ_to :item ตรวจสอบ :item, การแสดงตน: จริง ตรวจสอบ :user, การแสดงตน: จริง รวม StreamRails::กิจกรรม as_activity def กิจกรรม_วัตถุ self.item สิ้นสุด
ทุกครั้งที่สร้างพิน พินนั้นจะถูกจัดเก็บไว้ในฟีดของผู้ใช้ที่สร้างพินนั้น เมื่ออินสแตนซ์พินถูกลบ ฟีดก็จะถูกลบเช่นกัน
โมเดล ActiveRecord จะถูกจัดเก็บไว้ในฟีดของคุณเป็นกิจกรรม กิจกรรมคือวัตถุที่บอกเล่าเรื่องราวของบุคคลที่กระทำการกระทำบนหรือกับวัตถุ ในรูปแบบที่ง่ายที่สุด กิจกรรมประกอบด้วยนักแสดง กริยา และวัตถุ เพื่อให้สิ่งนี้เกิดขึ้น โมเดลของคุณจำเป็นต้องใช้วิธีการเหล่านี้:
#activity_object วัตถุของกิจกรรม (เช่น อินสแตนซ์โมเดล AR)
#activity_actor นักแสดงที่ทำกิจกรรม -- ค่านี้ยังระบุชื่อฟีดและรหัสฟีดที่จะเพิ่มกิจกรรมด้วย
ตัวอย่างเช่น สมมติว่าพินเป็นคลาสที่มีความหลากหลายซึ่งอาจเป็นของผู้ใช้ (เช่น รหัส User
: 1) หรือบริษัท (เช่น รหัส Company
: 1) ในกรณีนั้น โค้ดด้านล่างนี้จะโพสต์พินไปที่ user:1
feed หรือ company:1
feed ตามเจ้าของ
class Pin < ActiveRecord::Baseเป็นของ_to :owner, :polymorphic => trueเป็นของ_to :item รวม 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เป็นของ_to: authorเป็นของ_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: authorเป็นของ_to: item รวม StreamRails::Activity as_activity def Activity_extra_data {'is_retwitter' => self.is_reทวีต} end def Activity_object self.item สิ้นสุด
หากคุณต้องการควบคุมว่าจะสร้างกิจกรรมเมื่อใด คุณควรใช้ #activity_should_sync?
วิธีการในแบบจำลองของคุณ
พินคลาส < ActiveRecord::Baseเป็นของ_to: authorเป็นของ_to: item รวม StreamRails::Activity as_activity def Activity_should_sync? self.published สิ้นสุด def Activity_object self.item สิ้นสุด
สิ่งนี้จะสร้างกิจกรรมเมื่อ self.published
เป็นจริงเท่านั้น
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)
ฟีดข่าวจะจัดเก็บกิจกรรมจากคนที่คุณติดตาม มีทั้งฟีดข่าวแบบแบน (คล้ายกับ Twitter) และฟีดข่าวแบบรวม (เช่น Facebook)
feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] integrated_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggregated]
ฟีดการแจ้งเตือนสามารถใช้เพื่อสร้างฟังก์ชันการแจ้งเตือนได้
ด้านล่างนี้เราจะแสดงตัวอย่างวิธีการอ่านฟีดการแจ้งเตือน
alert_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
ตามค่าเริ่มต้น ฟีดการแจ้งเตือนจะว่างเปล่า คุณสามารถระบุผู้ใช้ที่จะแจ้งเตือนเมื่อแบบจำลองของคุณถูกสร้างขึ้น ในกรณีของการรีทวีต คุณอาจต้องการแจ้งให้ผู้ใช้ทราบถึงทวีตหลัก
class Pin < ActiveRecord::Baseเป็นของ_to: authorเป็นของ_to: item รวม StreamRails::Activity as_activity def Activity_notify ถ้า self.is_retwitter [StreamRails.feed_manager.get_notification_feed (self.parent.user_id)] end end def Activity_object self.item endend
อีกตัวอย่างหนึ่งจะติดตามผู้ใช้ โดยทั่วไปคุณจะต้องการแจ้งให้ผู้ใช้ที่กำลังติดตามทราบ
คลาสติดตาม < ActiveRecord::Baseเป็นของ_to :userเป็นของ_to :target ตรวจสอบ :target_id, การแสดงตน: จริงตรวจสอบ :user, การแสดงตน: จริงรวม StreamRails::Activity as_activity def กิจกรรม_notify [StreamRails.feed_manager.get_notification_feed(self.target_id)] สิ้นสุด 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
พร้อมใช้งานสำหรับฟีดแบบรวม
เพิ่มคุณค่า = 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
ในคลาสที่คุณเพิ่มมิกซ์กิจกรรมสตรีม) คุณยังสามารถทำให้ข้อมูลของฟิลด์นั้นสมบูรณ์ยิ่งขึ้นโดยทำดังต่อไปนี้:
ขั้นตอนที่หนึ่ง: แทนที่เมธอด activity_extra_data
จากมิกซ์อินของเรา:
class Pin < ActiveRecord::Base รวม 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` modelenricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:location => "location:#{boulder.id}"}
เมื่อเราเรียกข้อมูลกิจกรรมในภายหลัง กระบวนการตกแต่งจะรวมโมเดล location
ของเราด้วย ทำให้เราสามารถเข้าถึงคุณลักษณะและวิธีการของโมเดลตำแหน่ง:
place = กิจกรรม[: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 object 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 และผู้มีส่วนร่วมแต่ละราย สงวนลิขสิทธิ์.
ดูไฟล์ "ใบอนุญาต" สำหรับข้อมูลเกี่ยวกับประวัติของซอฟต์แวร์นี้ ข้อกำหนดและเงื่อนไขในการใช้งาน และการปฏิเสธความรับผิดในการรับประกันทั้งหมด