このコミットが含まれているのは:
@@ -1,44 +1,58 @@
|
|||||||
class CreatePostUrlSanitisationRules < ActiveRecord::Migration[8.0]
|
class CreatePostUrlSanitisationRules < ActiveRecord::Migration[8.0]
|
||||||
|
class PostUrlSanitisationRule < ActiveRecord::Base
|
||||||
|
self.table_name = 'post_url_sanitisation_rules'
|
||||||
|
end
|
||||||
|
|
||||||
def up
|
def up
|
||||||
create_table :post_url_sanitisation_rules,
|
create_table :post_url_sanitisation_rules, id: :integer, primary_key: :priority do |t|
|
||||||
id: :integer,
|
|
||||||
primary_key: :priority do |t|
|
|
||||||
t.string :source_pattern, null: false
|
t.string :source_pattern, null: false
|
||||||
t.string :replacement, null: false
|
t.string :replacement, null: false
|
||||||
t.timestamps
|
t.timestamps
|
||||||
t.datetime :discarded_at
|
t.datetime :discarded_at
|
||||||
|
|
||||||
t.index :source_pattern, unique: true
|
t.index :source_pattern, unique: true
|
||||||
t.index :discarded_at
|
t.index :discarded_at
|
||||||
end
|
end
|
||||||
|
|
||||||
now = ActiveRecord::Base.connection.quote(Time.current)
|
now = Time.current
|
||||||
execute <<~SQL
|
|
||||||
INSERT INTO
|
PostUrlSanitisationRule.insert_all!([
|
||||||
post_url_sanitisation_rules(priority, source_pattern, replacement, created_at, updated_at)
|
{ priority: 10,
|
||||||
VALUES
|
source_pattern: '\Ahttps?://youtu\.be/([^/?#]+)(?:[?#].*)?\z',
|
||||||
(10, '\\Ahttps?://youtu\\\\.be/([^/?#]+)(?:[?#].*)?\\z',
|
replacement: 'https://www.youtube.com/watch?v=\1',
|
||||||
'https://www.youtube.com/watch?v=\\\\1',
|
created_at: now,
|
||||||
#{ now }, #{ now })
|
updated_at: now },
|
||||||
, (20, '\\Ahttps?://(?:www\\\\.|m\\\\.)?youtube\\\\.com/live/([^/?#]+)(?:[?#].*)?\\z',
|
{ priority: 20,
|
||||||
'https://www.youtube.com/watch?v=\\\\1',
|
source_pattern: '\Ahttps?://(?:www\.|m\.)?youtube\.com/live/([^/?#]+)(?:[?#].*)?\z',
|
||||||
#{ now }, #{ now })
|
replacement: 'https://www.youtube.com/watch?v=\1',
|
||||||
, (30, '\\Ahttps?://(?:www\\\\.|m\\\\.)?youtube\\\\.com/shorts/([^/?#]+)(?:[?#].*)?\\z',
|
created_at: now,
|
||||||
'https://www.youtube.com/watch?v=\\\\1',
|
updated_at: now },
|
||||||
#{ now }, #{ now })
|
{ priority: 30,
|
||||||
, (40, '\\Ahttps?://(?:www\\\\.|m\\\\.)?youtube\\\\.com/embed/([^/?#]+)(?:[?#].*)?\\z',
|
source_pattern: '\Ahttps?://(?:www\.|m\.)?youtube\.com/shorts/([^/?#]+)(?:[?#].*)?\z',
|
||||||
'https://www.youtube.com/watch?v=\\\\1',
|
replacement: 'https://www.youtube.com/watch?v=\1',
|
||||||
#{ now }, #{ now })
|
created_at: now,
|
||||||
, (50, '\\Ahttps?://(?:www\\\\.|m\\\\.)?youtube\\\\.com/watch\\\\?(?:[^#&]+&)*v=([^&#]+)(?:[&#].*)?\\z',
|
updated_at: now },
|
||||||
'https://www.youtube.com/watch?v=\\\\1',
|
{ priority: 40,
|
||||||
#{ now }, #{ now })
|
source_pattern: '\Ahttps?://(?:www\.|m\.)?youtube\.com/embed/([^/?#]+)(?:[?#].*)?\z',
|
||||||
, (60, '\\Ahttps?://nico\\\\.ms/([^/?#]+)(?:[?#].*)?\\z',
|
replacement: 'https://www.youtube.com/watch?v=\1',
|
||||||
'https://www.nicovideo.jp/watch/\\\\1',
|
created_at: now,
|
||||||
#{ now }, #{ now })
|
updated_at: now },
|
||||||
, (70, '\\Ahttps?://(?:www\\\\.)?nicovideo\\\\.jp/watch/([^?#/]+)(?:[?#].*)?\\z',
|
{ priority: 50,
|
||||||
'https://www.nicovideo.jp/watch/\\\\1',
|
source_pattern:
|
||||||
#{ now }, #{ now })
|
'\Ahttps?://(?:www\.|m\.)?youtube\.com/watch\?(?:[^#&]+&)*v=([^&#]+)(?:[&#].*)?\z',
|
||||||
;
|
replacement: 'https://www.youtube.com/watch?v=\1',
|
||||||
SQL
|
created_at: now,
|
||||||
|
updated_at: now },
|
||||||
|
{ priority: 60,
|
||||||
|
source_pattern: '\Ahttps?://nico\.ms/([^/?#]+)(?:[?#].*)?\z',
|
||||||
|
replacement: 'https://www.nicovideo.jp/watch/\1',
|
||||||
|
created_at: now,
|
||||||
|
updated_at: now },
|
||||||
|
{ priority: 70,
|
||||||
|
source_pattern: '\Ahttps?://(?:www\.)?nicovideo\.jp/watch/([^?#/]+)(?:[?#].*)?\z',
|
||||||
|
replacement: 'https://www.nicovideo.jp/watch/\1',
|
||||||
|
created_at: now,
|
||||||
|
updated_at: now }])
|
||||||
end
|
end
|
||||||
|
|
||||||
def down
|
def down
|
||||||
|
|||||||
新しい課題から参照
ユーザをブロックする