Stream-rails هو عميل Ruby on Rails لـ Stream.
يمكنك التسجيل للحصول على حساب Stream على https://getstream.io/get_started.
لاحظ أن هناك أيضًا مكتبة تكامل Ruby - Stream ذات المستوى الأدنى والتي تناسب جميع تطبيقات Ruby.
هذه مكتبة لمنتج الخلاصات . يمكن العثور على مجموعات SDK للدردشة هنا.
ما يمكنك بناءه:
تدفقات النشاط مثل ما رأيناه على جيثب
تويتر نمط الأخبار
خلاصة مثل Instagram/Pinterest
الفيسبوك نمط الأخبار
نظام الإخطار
يمكنك الاطلاع على تطبيقنا النموذجي الذي تم إنشاؤه باستخدام هذه المكتبة على Github https://github.com/GetStream/Stream-Example-Rails
تدفقات النشاط وخلاصات الأخبار
تجريبي
جدول المحتويات
تركيب الجوهرة
يثبت
ORMs المدعومة
ActiveRecord
تتمة
تكوين النموذج
مجالات النشاط
بيانات النشاط الإضافية
إنشاء النشاط
مدير الأعلاف
تغذية المستخدم:
خلاصات الأخبار:
تغذية الإخطار:
الخلاصات المجمعة مع Feed_manager
اتبع الخلاصة
عرض ملف الأخبار
إثراء النشاط
القوالب
ترقيم الصفحات
تعطيل تتبع النموذج
تشغيل المواصفات
التوثيق الكامل والوصول إلى واجهات برمجة التطبيقات ذات المستوى المنخفض
معلومات حقوق النشر والترخيص
يمكنك تثبيت 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 = "YOUR API KEY" config.api_secret = "YOUR API SECRET" config.timeout = 30 # اختياري، الإعدادات الافتراضية 3 config.location = 'us-east' # اختياري، الإعدادات الافتراضية هي config 'us-east'. api_hostname = 'stream-io-api.com' # اختياري، الإعداد الافتراضي هو 'stream-io-api.com' # إذا كنت تستخدم أسماء خلاصات مخصصة، على سبيل المثال: timeline_flat, timeline_aggreated, # استخدم هذا، وإلا احذفه: config.news_feeds = { flat: "timeline_flat"، مجمعة: "timeline_aggreated" } # أشر إلى مجموعة خلاصة الإشعارات التي توفر الاسم، واحذفها إذا لم يكن لديك # خلاصة إشعارات config.notification_feed = "الإخطار"end
سيبدو التكامل كما يلي:
تتضمن الفئة Pin < ActiveRecord::Base StreamRails::Activity as_activity def Activity_object self.item endend
من فضلك، استخدم Sequel ~5
.
سيبدو التكامل كما يلي:
فئة Pin < Sequel::نموذج يتضمن StreamRails::Activity as_activity def Activity_object self.item endend
قم بتضمين StreamRails::Activity وأضف as_activity إلى النموذج الذي تريد دمجه مع خلاصاتك.
فئة دبوس < ActiveRecord::Base ينتمي إلى: ينتمي المستخدم إلى: التحقق من صحة العنصر: العنصر، الوجود: صحيح التحقق من صحة: المستخدم، الوجود: صحيح يشمل StreamRails::Activity as_activity def Activity_object self.item endend
في كل مرة يتم إنشاء Pin، سيتم تخزينه في موجز المستخدم الذي قام بإنشائه. عند حذف مثيل Pin، ستتم إزالة الخلاصة أيضًا.
يتم تخزين نماذج ActiveRecord في خلاصاتك كأنشطة؛ الأنشطة هي كائنات تحكي قصة شخص يقوم بعمل ما على أو باستخدام كائن، في أبسط صوره، يتكون النشاط من ممثل وفعل ومفعول به. ولكي يحدث ذلك، تحتاج نماذجك إلى تنفيذ هذه الطرق:
#activity_object كائن النشاط (على سبيل المثال، مثيل نموذج AR)
#activity_actor الممثل الذي يقوم بالنشاط - توفر هذه القيمة أيضًا اسم الخلاصة ومعرف الخلاصة الذي سيتم إضافة النشاط إليه.
على سبيل المثال، لنفترض أن الدبوس عبارة عن فئة متعددة الأشكال يمكن أن تنتمي إما إلى مستخدم (على سبيل المثال معرف User
: 1) أو شركة (على سبيل المثال معرف Company
: 1). في هذه الحالة، سينشر الكود أدناه الرقم السري إما إلى خلاصة user:1
أو خلاصة company:1
بناءً على مالكها.
فئة دبوس < ActiveRecord::Base ينتمي إلى :owner, :polymorphic => صحيح ينتمي إلى :item include StreamRails::Activity as_activity def Activity_actor self.owner end def Activity_object self.item endend
يتم تعيين activity_actor
افتراضيًا على self.user
#activity_verb تمثيل سلسلة الفعل (الإعدادات الافتراضية لاسم فئة النموذج)
فيما يلي مثال أكثر اكتمالاً لفئة Pin:
فئة دبوس < ActiveRecord::Base ينتمي إلى: المؤلف ينتمي إلى: العنصر يشمل StreamRails::Activity as_activity def Activity_actor self.author end def Activity_object self.item endend
ستحتاج غالبًا إلى تخزين بيانات أكثر من مجرد الحقول الأساسية. يمكنك تحقيق ذلك من خلال تنفيذ #activity_extra_data
في النموذج الخاص بك.
فئة دبوس < ActiveRecord::Base ينتمي إلى: المؤلف ينتمي إلى: العنصر يشمل StreamRails::Activity as_activity def Activity_extra_data {'is_retweet' => self.is_retweet} end defactivity_object self.item endend
إذا كنت تريد التحكم في وقت إنشاء نشاط ما، فيجب عليك تنفيذ #activity_should_sync?
الطريقة في النموذج الخاص بك.
فئة الدبوس < ActiveRecord::Base ينتمي إلى: المؤلف ينتمي إلى: العنصر يشمل StreamRails::Activity as_activity def Activity_should_sync؟ self.published end def Activity_object self.item endend
سيؤدي هذا إلى إنشاء نشاط فقط عندما يكون self.published
صحيحًا.
يأتي stream_rails
مزودًا بفئة Feed Manager التي تساعد في جميع عمليات التغذية الشائعة. يمكنك الحصول على مثيل للمدير باستخدام StreamRails.feed_manager
.
تغذية = StreamRails.feed_manager.get_user_feed(current_user.id)
للبدء، يمتلك المدير 4 خلاصات تم تكوينها مسبقًا. يمكنك إضافة المزيد من الخلاصات إذا كان تطبيقك يتطلب ذلك. تنقسم الأعلاف إلى ثلاث فئات.
يقوم موجز المستخدم بتخزين جميع الأنشطة الخاصة بالمستخدم. فكر في الأمر على أنه صفحتك الشخصية على الفيسبوك. يمكنك بسهولة الحصول على هذه الخلاصة من المدير.
تغذية = StreamRails.feed_manager.get_user_feed(current_user.id)
تقوم خلاصات الأخبار بتخزين أنشطة الأشخاص الذين تتابعهم. يوجد ملف أخبار مسطح (مشابه لـ twitter) وملف أخبار مجمع (مثل facebook).
تغذية = StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] Collected_feed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggreated]
يمكن استخدام موجز الإشعارات لإنشاء وظيفة الإشعارات.
نعرض أدناه مثالاً لكيفية قراءة موجز الإشعارات.
notification_feed = StreamRails.feed_manager.get_notification_feed(current_user.id)
افتراضيًا، ستكون خلاصة الإشعارات فارغة. يمكنك تحديد المستخدمين الذين سيتم إعلامهم عند إنشاء النموذج الخاص بك. في حالة إعادة التغريد، ربما تريد إخطار المستخدم بالتغريدة الأصلية.
فئة دبوس < ActiveRecord::Base ينتمي إلى: المؤلف ينتمي إلى: العنصر يشمل StreamRails::Activity as_activity defactiv_notify if self.is_retweet [StreamRails.feed_manager.get_notification_feed(self.parent.user_id)] end end defactivity_object self.item endend
مثال آخر سيكون متابعة المستخدم. قد ترغب عادةً في إعلام المستخدم الذي يتم متابعته.
فئة متابعة < ActiveRecord::Base ينتمي إلى: ينتمي المستخدم إلى: التحقق من صحة الهدف:target_id، الوجود: صحيح التحقق من صحة: المستخدم، الوجود: صحيح تضمين StreamRails::Activity as_activity defactiv_notify [StreamRails.feed_manager.get_notification_feed(self.target_id)] end defactivity_object self.target endend
لتتمكن من ملء ملفات الأخبار، يتعين عليك إخطار النظام بشأن علاقات المتابعة.
ستتبع الخلاصات الثابتة والمجمعة للمستخدم الحالي خلاصة المستخدم target_user
، مع الكود التالي:
StreamRails.feed_manager.follow_user(user_id, target_id)
عندما تقرأ البيانات من الخلاصات، سيبدو نشاط الدبوس كما يلي:
{ "الممثل": "المستخدم: 1"، "الفعل": "أعجبني"، "الكائن": "العنصر: 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
للخلاصات المجمعة.
إثرائي = StreamRails::Enrich.newfeed = StreamRails.feed_manager.get_news_feeds(current_user.id)[:aggreated]results = Feed.get()['results']الأنشطة = richer.enrich_aggreated_activities(results)
إذا كان لديك بيانات تعريف إضافية في نشاطك (عن طريق تجاوز activity_extra_data
في الفصل الذي تضيف فيه مزيج نشاط الدفق)، فيمكنك أيضًا إثراء بيانات هذا الحقل عن طريق القيام بما يلي:
الخطوة الأولى: تجاوز طريقة 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! # اطلب من المُثري إجراء بحث أيضًا على نموذج "الموقع" modelenricher.add_fields([:location])pin = Pin.newpin.user = @tompin .extra_data = {:location => "location:#{boulder.id}"}
عندما نستعيد النشاط لاحقًا، ستتضمن عملية الإثراء نموذج location
الخاص بنا أيضًا، مما يتيح لنا الوصول إلى سمات وأساليب نموذج الموقع:
place = النشاط[:location].name# Boulder, CO
الآن بعد أن قمت بإثراء الأنشطة، يمكنك عرضها في طريقة عرض. للراحة ندرج وجهة نظر أساسية:
<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، كما يلي في وحدة التحكم الخاصة بك:
StreamRails.feed_manager.get_news_feeds(current_user.id)[:flat] # إرجاع نتائج كائن البث::خلاصة = Feed.get(limit: 5, offset: 5)['results']
يمكنك تعطيل تتبع النموذج (على سبيل المثال، عند إجراء الاختبارات) عبر StreamRails.configure
require 'stream_rails' StreamRails.enabled = false
من الدليل الجذر للمشروع:
./bin/run_tests.sh
عند الحاجة، يمكنك أيضًا استخدام واجهة برمجة تطبيقات Ruby ذات المستوى المنخفض مباشرةً. الوثائق متاحة على موقع ستريم.
حقوق الطبع والنشر (ج) 2014-2021 لشركة Stream.io Inc، والمساهمين الأفراد. جميع الحقوق محفوظة.
راجع ملف "الترخيص" للحصول على معلومات حول تاريخ هذا البرنامج، وشروط وأحكام الاستخدام، وإخلاء المسؤولية عن كافة الضمانات.