comparison app/models/paste.rb @ 499:d2ef59c9a4b4

Use rails rubocop
author nanaya <me@nanaya.net>
date Sun, 15 Dec 2024 22:33:27 +0900
parents 84ca55a0568e
children
comparison
equal deleted inserted replaced
498:300bac944674 499:d2ef59c9a4b4
1 class Paste < ApplicationRecord 1 class Paste < ApplicationRecord
2 attr_accessor :is_private 2 attr_accessor :is_private
3 after_initialize :set_privacy, :if => :new_record? 3 after_initialize :set_privacy, if: :new_record?
4 4
5 before_validation :paste_limit 5 before_validation :paste_limit
6 before_validation :convert_newlines 6 before_validation :convert_newlines
7 before_validation :set_paste_hash 7 before_validation :set_paste_hash
8 before_validation :set_paste_key 8 before_validation :set_paste_key
9 before_validation :set_paste_secret 9 before_validation :set_paste_secret
10 validates :paste, :paste_hash, :key, :ip, :presence => true 10 validates :paste, :paste_hash, :key, :ip, presence: true
11 validates :paste, :length => { :maximum => 1_000_000 } 11 validates :paste, length: { maximum: 1_000_000 }
12 12
13 def to_param 13 def to_param
14 path 14 path
15 end 15 end
16 16
17 def self.safe_find(raw_id) 17 def self.safe_find(raw_id)
18 /\A(?<id>[0-9]+)(?:-(?<secret>[0-9a-f]+))?\z/i =~ raw_id.to_s 18 /\A(?<id>[0-9]+)(?:-(?<secret>[0-9a-f]+))?\z/i =~ raw_id.to_s
19 19
20 find_by(:secret => secret.try(:downcase), :id => id) 20 find_by(secret: secret.try(:downcase), id: id)
21 end 21 end
22 22
23 def self.graceful_create(params) 23 def self.graceful_create(params)
24 paste = new(params) 24 paste = new(params)
25 fresh = true 25 fresh = true
26 created = true 26 created = true
27 27
28 begin 28 begin
29 created = paste.save 29 created = paste.save
30 rescue ActiveRecord::RecordNotUnique 30 rescue ActiveRecord::RecordNotUnique
31 paste = find_by(:ip => paste.ip, :paste_hash => paste.paste_hash) 31 paste = find_by(ip: paste.ip, paste_hash: paste.paste_hash)
32 fresh = false 32 fresh = false
33 end 33 end
34 34
35 [created, paste, fresh] 35 [ created, paste, fresh ]
36 end 36 end
37 37
38 def paste_gzip=(paste) 38 def paste_gzip=(paste)
39 paste = paste.read if paste.is_a? ActionDispatch::Http::UploadedFile 39 paste = paste.read if paste.is_a? ActionDispatch::Http::UploadedFile
40 40
53 false 53 false
54 end 54 end
55 end 55 end
56 56
57 def path 57 def path
58 [id, secret.presence].compact.join("-") 58 [ id, secret.presence ].compact.join("-")
59 end 59 end
60 60
61 def set_paste_hash 61 def set_paste_hash
62 self.paste_hash = Digest::SHA512.hexdigest("#{paste}\n") 62 self.paste_hash = Digest::SHA512.hexdigest("#{paste}\n")
63 end 63 end
77 def convert_newlines 77 def convert_newlines
78 self.paste = paste.to_s.gsub("\r\n", "\n").tr("\r", "\n") 78 self.paste = paste.to_s.gsub("\r\n", "\n").tr("\r", "\n")
79 end 79 end
80 80
81 def paste_limit 81 def paste_limit
82 ip_post_recent_count = self.class.where(:ip => ip).where("created_at > ?", Time.zone.now - 1.hour).count 82 ip_post_recent_count = self.class.where(ip: ip).where("created_at > ?", Time.zone.now - 1.hour).count
83 errors.add :base, :limit if ip_post_recent_count > 100 83 errors.add :base, :limit if ip_post_recent_count > 100
84 end 84 end
85 85
86 def set_privacy 86 def set_privacy
87 self.is_private ||= "0" 87 self.is_private ||= "0"