Skip to content

Latest commit

 

History

History
200 lines (116 loc) · 11.7 KB

README_RU.rdoc

File metadata and controls

200 lines (116 loc) · 11.7 KB

Inkwell

Inkwell добавляет в ваше приложение возможности социальных сетей - комментарии, избранное, реблоги (репост/share), систему подписок на блоги юзеров (followers) и ленты пользователей (ленты блогов, избранного и агрегированную ленту с постами и реблогами юзеров, на которых подписан пользователь).

Требования

У вас должны быть два класса: User и Post или похожие на них по назначению. Они должны быть связаны один-ко-многим. Пример:

class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :user
end

Установка и настройка

Добавьте в Gemfile:

gem 'inkwell', :git => 'git://github.com/salkar/inkwell.git'

После этого сделайте bundle install

Добавьте в вашу User модель acts_as_inkwell_user и в Post модель acts_as_inkwell_post

class User < ActiveRecord::Base
  has_many :posts
  acts_as_inkwell_user
end

class Post < ActiveRecord::Base
  belongs_to :user
  acts_as_inkwell_post
end

Создайте inkwell.rb файл в config/initializers и добавьте туда следующий код с названиями таблиц User и Post (или соответствующих им):

module Inkwell
  class Engine < Rails::Engine
    config.post_table = :posts
    config.user_table = :users
  end
end

Далее, сделайте

rake inkwell:install:migrations

и db:migrate.

Использование

Избранное

Юзер может добавлять в избранное как посты, так и комментарии:

@user.favorite @post
@user.favorite @comment

Удаление из избранного:

@user.unfavorite @post

Проверка на нахождение в избранном:

@user.favorite? @post

Вы можете получить ленту избранного для пользователя, состоящую из добавленных им в избранное постов и комментариев (последние добавленные сверху):

@user.favoriteline(:last_shown_obj_id => nil, :limit => 10, :for_user => nil)

где

  • last_shown_obj_id - id последнего элемента уже показанной юзеру ленты. Взять его можно из item_id_in_line свойства последнего объекта из предыдущей ленты избранного. Этот параметр нужен для того, чтобы забрать часть ленты, начиная со следующего поста за указанным. Например:

    fline = @user.favoriteline    #забрать первые 10 элементов ленты избранного юзера @user
    last_shown_obj_id = fline.last.item_id_in_line
    fline_next_page = @user.favoriteline :last_shown_obj_id => last_shown_obj_id    #забрать следующие 10 элементов его ленты
    
  • limit - количество элементов возвращаемой ленты, по дефолту - 10

    fline = @user.favoriteline :limit => 20    #забрать первые 20 элементов ленты избранного юзера @user
    
  • for_user - User, для которого показывается эта лента. Для него формируются свойства is_reblogged и is_favorited, которые обозначают, добавлял ли этот юзер в избранное этот элемент или делал ли его реблог.

    @user.favorite @another_user_post
    @user.reblog @another_user_post
    
    fline_for_unknown_user = @another_user.favoriteline
    # Для примера предположим, что fline_for_unknown_user.first == @another_user_post
    fline_for_unknown_user.first.is_reblogged    # => false
    fline_for_unknown_user.first.is_favorited    # => false
    
    fline_for_user_who_reblog_and_favorite_another_user_post = @another_user.favoriteline :for_user => @user
    # Для примера предположим, что fline_for_user_who_reblog_and_favorite_another_user_post.first == @another_user_post
    fline_for_user_who_reblog_and_favorite_another_user_post.first.is_reblogged    # => true
    fline_for_user_who_reblog_and_favorite_another_user_post.first.is_favorited    # => true
    

Больше примеров можно найти в этом спеке.

Реблоги (репосты)

Реблог подразумевает под собой, что элемент попадет в блог самого юзера и в ленты новостей его подписчиков. Таким образом, его поведение будет аналогично поведению поста самого юзера, за исключением того, что это не его пост. Юзер может сделать реблог как поста, так и комментария:

@user.reblog @post
@user.reblog @comment

Отмена реблога:

@user.unreblog @post

Проверка на наличие реблога элемента:

@user.reblog? @post

У реблогов нет своей ленты, они показываются в самом блоге пользователя (ленте с его постами).

Больше примеров можно нати в этом спеке.

Комментарии

Юзер может комментировать пост или другой комментарий. Комментарий для поста создается так:

@user.comments.create :post_id => @post.id, :body => "comment_body"

Если вы хотите создать комментарий для другого комментария, необходимо добавить parent_id родительского комментария:

@user.comments.create :post_id => @parent_post.id, :body => "comment_body", :parent_id => @parent_comment.id

Для удаления комментария используйте destroy метод:

@comment.destroy

Вы можете получить ленту комментариев как для поста, так и для комментария. Она состоит из комментариев данного объекта, возвращаемых в обратном хронологическом порядке.

Примечание: возвращаемый массив для простоты использования будет иметь обратную сортировку. Это связано с тем, что обычно в соц. сетях последний комментарий находится внизу, а более старые комментарии располагаются выше.

Для того, чтобы получить ленту комментариев, необходимо:

commentline(:last_shown_comment_id => nil, :limit => 10, :for_user => nil)

где last_shown_comment_id - id последнего комментария для этого объекта из предыдущего вызова ленты комментариев. Например:

cline = @post.commentline    #забираем первые 10 комментариев для @post
last_shown_comment_id = cline.first.id    # Первый элемент берется из-за обратного порядка. По факту, это самый старый комментарий в <code>cline</code>.
cline_next_page = @post.commentline :last_shown_comment_id => last_shown_comment_id    #забираем следующие 10 комментариев для @post

Limit и for_user обозначают тоже самое, что и одноименные параметры в favoriteline.

Больше примеров вы можете найти в этом спеке.

Подписки

Юзер может подписаться на другого юзера. При этом он будет видеть все его элементы блога (посты и реблоги) на своей новостной ленте.

Добавление в подписки:

@user.follow @another_user

После этого последние 10 элементов блога @another_user появятся в новостной ленте у @user. Каждый новый элемент блога @another_user также будет добавляться в новостную ленту @user.

Удаление из подписок:

@user.unfollow @another_user

Так можно проверить, подписан ли юзер на другого юзера:

@user.follow? @another_user

Для получения id юзеров, на которых подписан пользователь, и которые подписаны на него, надо сделать так:

@user.followers_row
@user.followings_row

Оба метода возвращают массивы id.

Больше примеров вы можете найти в этом спеке.

Блог юзера

Блог юзера состоит из его постов и реблогов. Он реализован лентой, идентичной favoriteline. Получить его можно так:

@user.blogline(:last_shown_obj_id => nil, :limit => 10, :for_user => nil)

где параметры идентичны описанным ранее favoriteline параметрам.

Больше примеров вы можете найти в этом спеке.

Timeline feature

Новостная лента юзера состоит из элементов блогов юзеров, на которых этот юзер подписан. Получить ее можно так:

@user.timeline(:last_shown_obj_id => nil, :limit => 10, :for_user => nil)

где параметры идентичные описанным ранее favoriteline параметрам.

Больше примеров вы можете найти в этом спеке.