| 
									
										
										
										
											2017-11-18 00:16:48 +01:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | # == Schema Information | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Table name: lists | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2018-04-23 18:29:17 +09:00
										 |  |  | #  id         :bigint(8)        not null, primary key | 
					
						
							|  |  |  | #  account_id :bigint(8)        not null | 
					
						
							| 
									
										
										
										
											2017-11-18 00:16:48 +01:00
										 |  |  | #  title      :string           default(""), not null | 
					
						
							|  |  |  | #  created_at :datetime         not null | 
					
						
							|  |  |  | #  updated_at :datetime         not null | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class List < ApplicationRecord | 
					
						
							|  |  |  |   include Paginable | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 01:32:29 +01:00
										 |  |  |   PER_ACCOUNT_LIMIT = 50
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-20 04:56:47 +09:00
										 |  |  |   belongs_to :account, optional: true | 
					
						
							| 
									
										
										
										
											2017-11-18 00:16:48 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   has_many :list_accounts, inverse_of: :list, dependent: :destroy | 
					
						
							|  |  |  |   has_many :accounts, through: :list_accounts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   validates :title, presence: true | 
					
						
							| 
									
										
										
										
											2017-12-05 23:20:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-09 01:32:29 +01:00
										 |  |  |   validates_each :account_id, on: :create do |record, _attr, value| | 
					
						
							|  |  |  |     record.errors.add(:base, I18n.t('lists.errors.limit')) if List.where(account_id: value).count >= PER_ACCOUNT_LIMIT | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-05 23:20:27 +01:00
										 |  |  |   before_destroy :clean_feed_manager | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def clean_feed_manager | 
					
						
							|  |  |  |     reblog_key       = FeedManager.instance.key(:list, id, 'reblogs') | 
					
						
							|  |  |  |     reblogged_id_set = Redis.current.zrange(reblog_key, 0, -1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Redis.current.pipelined do | 
					
						
							|  |  |  |       Redis.current.del(FeedManager.instance.key(:list, id)) | 
					
						
							|  |  |  |       Redis.current.del(reblog_key) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       reblogged_id_set.each do |reblogged_id| | 
					
						
							|  |  |  |         reblog_set_key = FeedManager.instance.key(:list, id, "reblogs:#{reblogged_id}") | 
					
						
							|  |  |  |         Redis.current.del(reblog_set_key) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-11-18 00:16:48 +01:00
										 |  |  | end |