stream-rails adalah klien Ruby on Rails untuk Stream.
Anda dapat mendaftar akun Stream di https://getstream.io/get_started.
Perhatikan bahwa ada juga Ruby tingkat rendah - Pustaka integrasi aliran yang cocok untuk semua aplikasi Ruby.
Ini adalah perpustakaan untuk produk Feed . SDK Obrolan dapat ditemukan di sini.
Apa yang dapat Anda bangun:
Aliran aktivitas seperti yang terlihat di Github
Umpan berita gaya twitter
Umpan seperti instagram/pinterest
Umpan berita gaya Facebook
Sebuah sistem notifikasi
Anda dapat melihat contoh aplikasi kami yang dibuat menggunakan perpustakaan ini di Github https://github.com/GetStream/Stream-Example-Rails
Aliran Aktivitas & Umpan Berita
Demo
Daftar isi
Pemasangan permata
Pengaturan
ORM yang didukung
Rekaman Aktif
Sekuel
Konfigurasi model
Bidang aktivitas
Data tambahan aktivitas
Penciptaan aktivitas
Manajer pakan
Umpan pengguna:
Umpan berita:
Umpan notifikasi:
Umpan dibundel dengan feed_manager
Ikuti umpan
Menampilkan umpan berita
Pengayaan aktivitas
Templat
Paginasi
Nonaktifkan pelacakan model
Spesifikasi berjalan
Dokumentasi lengkap dan akses API tingkat rendah
Informasi Hak Cipta dan Lisensi
Anda dapat menginstal stream_rails
seperti yang Anda lakukan pada permata lainnya:
gem install stream_rails
atau di Gemfile Anda:
gem 'stream_rails'
Pustaka ini diuji dan sepenuhnya mendukung versi Rails berikut:
5.0
5.2
6.0
6.1
Masuk dengan Github di getstream.io dan dapatkan api_key
dan api_secret
dari konfigurasi aplikasi Anda (layar Dasbor).
Kemudian Anda dapat menambahkan konfigurasi StreamRails di config/initializers/stream_rails.rb
memerlukan 'stream_rails'StreamRails.configure lakukan |config| config.api_key = "KUNCI API ANDA" config.api_secret = "RAHASIA API ANDA" config.timeout = 30 # Opsional, defaultnya adalah 3 config.location = 'us-east' # Opsional, defaultnya adalah konfigurasi 'us-east'. api_hostname = 'stream-io-api.com' # Opsional, defaultnya adalah 'stream-io-api.com' # Jika Anda menggunakan nama feed khusus, misalnya: timeline_flat, timeline_aggregated, # gunakan ini, jika tidak hilangkan: config.news_feeds = { flat: "timeline_flat", agregat: "timeline_aggregated" } # Arahkan ke grup feed notifikasi yang menyediakan nama, hilangkan jika Anda tidak # memiliki feed notifikasi config.notification_feed = "pemberitahuan" selesai
Integrasinya akan terlihat sebagai berikut:
kelas Pin < ActiveRecord::Base sertakan StreamRails::Aktivitas as_aktivitas def aktivitas_objek self.item akhir
Tolong, gunakan Sekuel ~5
.
Integrasinya akan terlihat sebagai berikut:
kelas Pin < Sekuel::Model sertakan StreamRails::Aktivitas as_aktivitas def aktivitas_objek self.item akhir
Sertakan StreamRails::Activity dan tambahkan as_activity ke model yang ingin Anda integrasikan dengan feed Anda.
kelas Pin < ActiveRecord::Base milik_to :pengguna milik_to :item memvalidasi :item, kehadiran: benar memvalidasi :pengguna, kehadiran: benar termasuk StreamRails::Aktivitas as_aktivitas def aktivitas_objek self.item endend
Setiap kali Pin dibuat, pin itu akan disimpan di feed pengguna yang membuatnya. Saat instance Pin dihapus, feed juga akan dihapus.
Model ActiveRecord disimpan di feed Anda sebagai aktivitas; Aktivitas adalah objek yang menceritakan kisah seseorang melakukan suatu tindakan pada atau dengan suatu objek, dalam bentuk paling sederhana aktivitas terdiri dari aktor, kata kerja, dan objek. Agar hal ini terjadi, model Anda perlu menerapkan metode berikut:
#activity_object objek aktivitas (misalnya contoh model AR)
#activity_actor aktor yang melakukan aktivitas -- nilai ini juga memberikan nama feed dan ID feed yang akan ditambahi aktivitas tersebut.
Sebagai contoh, katakanlah Pin adalah kelas polimorfik yang dapat dimiliki oleh pengguna (misalnya ID User
: 1) atau perusahaan (misalnya ID Company
: 1). Dalam hal ini, kode di bawah ini akan memposting pin ke feed user:1
atau feed company:1
berdasarkan pemiliknya.
kelas Pin < ActiveRecord::Base milik_ke :pemilik, :polimorfik => benar milik_ke :item termasuk StreamRails::Aktivitas as_aktivitas def aktivitas_actor self.owner end def aktivitas_objek self.item endend
activity_actor
defaultnya adalah self.user
#activity_verb representasi string dari kata kerja (default pada nama kelas model)
Berikut contoh kelas Pin yang lebih lengkap:
kelas Pin < ActiveRecord::Base milik_ke :penulis milik_ke :item termasuk StreamRails::Aktivitas as_aktivitas def aktivitas_actor self.author end def aktivitas_objek self.item endend
Seringkali Anda ingin menyimpan lebih banyak data daripada sekadar kolom dasar. Anda mencapainya dengan menerapkan #activity_extra_data
dalam model Anda.
kelas Pin < ActiveRecord::Base milik_to :penulis milik_to :item termasuk StreamRails::Aktivitas as_aktivitas def aktivitas_extra_data {'is_retweet' => self.is_retweet} end def aktivitas_objek self.item endend
Jika Anda ingin mengontrol kapan membuat aktivitas, Anda harus menerapkan #activity_should_sync?
metode dalam model Anda.
pin kelas < ActiveRecord::Base milik_ke :penulis milik_ke :item termasuk StreamRails::Aktivitas as_aktivitas def aktivitas_should_sync? self.published end def aktivitas_objek self.item endend
Ini akan membuat aktivitas hanya jika self.published
benar.
stream_rails
hadir dengan kelas Feed Manager yang membantu semua operasi feed umum. Anda bisa mendapatkan instance manajer dengan StreamRails.feed_manager
.
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
Untuk membantu Anda memulai, pengelola memiliki 4 feed yang telah dikonfigurasi sebelumnya. Anda dapat menambahkan lebih banyak feed jika aplikasi Anda memerlukannya. Feed dibagi menjadi tiga kategori.
Umpan pengguna menyimpan semua aktivitas pengguna. Anggap saja sebagai halaman Facebook pribadi Anda. Anda dapat dengan mudah mendapatkan feed ini dari pengelola.
feed = StreamRails.feed_manager.get_user_feed(current_user.id)
Umpan berita menyimpan aktivitas dari orang yang Anda ikuti. Ada umpan berita datar (mirip dengan twitter) dan umpan berita gabungan (seperti facebook).
feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] agregat_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:agregat]
Umpan notifikasi dapat digunakan untuk membangun fungsionalitas notifikasi.
Di bawah ini kami tunjukkan contoh bagaimana Anda dapat membaca feed notifikasi.
notifikasi_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
Secara default, umpan notifikasi akan kosong. Anda dapat menentukan pengguna mana yang akan diberi tahu saat model Anda dibuat. Dalam kasus retweet Anda mungkin ingin memberi tahu pengguna tentang tweet induknya.
kelas Pin < ActiveRecord::Base milik_to :penulis milik_to :item termasuk StreamRails::Aktivitas sebagai_aktivitas def aktivitas_notify if self.is_retweet [StreamRails.feed_manager.get_notification_feed(self.parent.user_id)] akhir akhir def aktivitas_objek self.item akhir
Contoh lainnya adalah mengikuti pengguna. Anda biasanya ingin memberi tahu pengguna yang sedang diikuti.
kelas Ikuti < ActiveRecord::Base milik_ke :pengguna milik_ke :target memvalidasi :target_id, kehadiran: benar memvalidasi :pengguna, kehadiran: benar menyertakan StreamRails::Aktivitas as_aktivitas def aktivitas_notify [StreamRails.feed_manager.get_notification_feed(self.target_id)] end def aktivitas_objek self.target akhir
Untuk mengisi umpan berita, Anda perlu memberi tahu sistem tentang hubungan tindak lanjut.
Feed datar dan gabungan pengguna saat ini akan mengikuti feed pengguna target_user
, dengan kode berikut:
StreamRails.feed_manager.follow_user(user_id, target_id)
Saat Anda membaca data dari feed, aktivitas pin akan terlihat seperti ini:
{ "aktor": "Pengguna:1", "kata kerja": "seperti", "objek": "Item:42" }
Ini masih jauh dari siap untuk digunakan di template Anda. Kami menyebut proses memuat referensi dari database sebagai "pengayaan". Contohnya ditunjukkan di bawah ini:
pengaya = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat]results = feed.get()['results']aktivitas = pengaya.enrich_activities(hasil)
Metode serupa yang disebut enrich_aggregated_activities
tersedia untuk feed gabungan.
pengaya = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggregated]results = feed.get()['results']aktivitas = pengaya.enrich_aggregated_activities(hasil)
Jika Anda memiliki metadata tambahan dalam aktivitas Anda (dengan mengganti activity_extra_data
di kelas tempat Anda menambahkan mixin Aktivitas Aliran), Anda juga dapat memperkaya data bidang tersebut dengan melakukan hal berikut:
Langkah Pertama: ganti metode activity_extra_data
dari mixin kami:
class Pin < ActiveRecord::Base include StreamRails::Activity as_activity attr_accessor :extra_data def Activity_object self.item end # ganti metode ini untuk menambahkan metadata ke aktivitas Anda def Activity_extra_data @extra_data endend
Sekarang kita akan membuat objek 'pin' yang memiliki bidang metadata location
. Dalam contoh ini, kita juga akan memiliki tabel dan model location
, dan kita menyiapkan metadata di kolom extra_data
. Simbol metadata dan nilai meta data harus cocok dengan pola ini. Separuh kiri nilai metadata string:string
saat dipecah menjadi :
juga harus cocok dengan nama model.
Kita juga harus memberitahu pengaya untuk juga mengambil lokasi ketika melihat aktivitas kita
boulder = Location.newboulder.name = "Boulder, CO"boulder.save!# suruh pengaya juga melakukan pencarian di `location` modelenricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:location => "lokasi:#{boulder.id}"}
Saat kita mengambil aktivitas nanti, proses pengayaan akan menyertakan model location
kita juga, memberi kita akses ke atribut dan metode model lokasi:
tempat = aktivitas[:lokasi].nama# Boulder, CO
Sekarang setelah Anda memperkaya aktivitas, Anda dapat merendernya dalam tampilan. Untuk kenyamanan kami menyertakan tampilan dasar:
<div class="container"> <div class="container-pins"> <% for activity in @activities %> <%= render_activity activity %> <% end %> </div> </div>
Pembantu tampilan render_activity
akan merender aktivitas dengan memilih activity/_pin
untuk aktivitas pin, aggregated_activity/_follow
untuk aktivitas gabungan dengan kata kerja ikuti.
Helper akan secara otomatis mengirimkan activity
ke lingkup lokal parsial; parameter tambahan dapat dikirim serta menggunakan tata letak yang berbeda, dan mengawali namanya
misalnya merender sebagian aktivitas menggunakan tata letak small_activity
:
<%= render_activity activity, :layout => "small_activity" %>
misalnya mengawali nama template dengan "notification_":
<%= render_activity activity, :prefix => "notification_" %>
misalnya menambahkan extra_var ke cakupan parsial:
<%= render_activity activity, :locals => {:extra_var => 42} %>
misalnya merender sebagian aktivitas menggunakan akar sebagian notifications
, yang akan merender sebagian dengan jalur notifications/#{ACTIVITY_VERB}
<%= render_activity activity, :partial_root => "notifications" %>
Untuk penomoran halaman sederhana, Anda dapat menggunakan API stream-ruby, seperti berikut di pengontrol Anda:
StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] # Mengembalikan objek Stream::Feed result = feed.get(limit: 5, offset: 5)['results']
Anda dapat menonaktifkan pelacakan model (mis. saat Anda menjalankan pengujian) melalui StreamRails.configure
require 'stream_rails' StreamRails.enabled = false
Dari direktori root proyek:
./bin/run_tests.sh
Bila diperlukan Anda juga dapat menggunakan Ruby API level rendah secara langsung. Dokumentasi tersedia di situs web Stream.
Hak Cipta (c) 2014-2021 Stream.io Inc, dan kontributor individu. Semua hak dilindungi undang-undang.
Lihat file "LISENSI" untuk informasi tentang sejarah perangkat lunak ini, syarat & ketentuan penggunaan, dan PENOLAKAN SEMUA JAMINAN.