Autofix Rubocop Regex Style rules (#23690)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>gh/dev
parent
9a653899e9
commit
c66250abf1
|
@ -1412,52 +1412,6 @@ Style/RedundantFetchBlock:
|
||||||
- 'config/initializers/paperclip.rb'
|
- 'config/initializers/paperclip.rb'
|
||||||
- 'config/puma.rb'
|
- 'config/puma.rb'
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
Style/RedundantRegexpCharacterClass:
|
|
||||||
Exclude:
|
|
||||||
- 'app/lib/link_details_extractor.rb'
|
|
||||||
- 'app/lib/tag_manager.rb'
|
|
||||||
- 'app/models/domain_allow.rb'
|
|
||||||
- 'app/models/domain_block.rb'
|
|
||||||
- 'app/services/fetch_oembed_service.rb'
|
|
||||||
- 'config/initializers/rack_attack.rb'
|
|
||||||
- 'lib/tasks/emojis.rake'
|
|
||||||
- 'lib/tasks/mastodon.rake'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
Style/RedundantRegexpEscape:
|
|
||||||
Exclude:
|
|
||||||
- 'app/lib/webfinger_resource.rb'
|
|
||||||
- 'app/models/account.rb'
|
|
||||||
- 'app/models/tag.rb'
|
|
||||||
- 'app/services/fetch_link_card_service.rb'
|
|
||||||
- 'config/initializers/twitter_regex.rb'
|
|
||||||
- 'lib/paperclip/color_extractor.rb'
|
|
||||||
- 'lib/tasks/mastodon.rake'
|
|
||||||
|
|
||||||
# This cop supports safe autocorrection (--autocorrect).
|
|
||||||
# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
|
|
||||||
# SupportedStyles: slashes, percent_r, mixed
|
|
||||||
Style/RegexpLiteral:
|
|
||||||
Exclude:
|
|
||||||
- 'app/lib/link_details_extractor.rb'
|
|
||||||
- 'app/lib/plain_text_formatter.rb'
|
|
||||||
- 'app/lib/tag_manager.rb'
|
|
||||||
- 'app/lib/text_formatter.rb'
|
|
||||||
- 'app/models/account.rb'
|
|
||||||
- 'app/models/domain_allow.rb'
|
|
||||||
- 'app/models/domain_block.rb'
|
|
||||||
- 'app/models/site_upload.rb'
|
|
||||||
- 'app/models/tag.rb'
|
|
||||||
- 'app/services/backup_service.rb'
|
|
||||||
- 'app/services/fetch_oembed_service.rb'
|
|
||||||
- 'app/services/search_service.rb'
|
|
||||||
- 'config/initializers/rack_attack.rb'
|
|
||||||
- 'config/initializers/twitter_regex.rb'
|
|
||||||
- 'config/routes.rb'
|
|
||||||
- 'lib/mastodon/premailer_webpack_strategy.rb'
|
|
||||||
- 'lib/tasks/mastodon.rake'
|
|
||||||
|
|
||||||
# This cop supports unsafe autocorrection (--autocorrect-all).
|
# This cop supports unsafe autocorrection (--autocorrect-all).
|
||||||
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
|
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
|
||||||
# AllowedMethods: present?, blank?, presence, try, try!
|
# AllowedMethods: present?, blank?, presence, try, try!
|
||||||
|
|
|
@ -7,15 +7,15 @@ class LinkDetailsExtractor
|
||||||
# Some publications wrap their JSON-LD data in their <script> tags
|
# Some publications wrap their JSON-LD data in their <script> tags
|
||||||
# in commented-out CDATA blocks, they need to be removed before
|
# in commented-out CDATA blocks, they need to be removed before
|
||||||
# attempting to parse JSON
|
# attempting to parse JSON
|
||||||
CDATA_JUNK_PATTERN = %r{^[\s]*(
|
CDATA_JUNK_PATTERN = %r{^\s*(
|
||||||
(/\*[\s]*<!\[CDATA\[[\s]*\*/) # Block comment style opening
|
(/\*\s*<!\[CDATA\[\s*\*/) # Block comment style opening
|
||||||
|
|
|
|
||||||
(//[\s]*<!\[CDATA\[) # Single-line comment style opening
|
(//\s*<!\[CDATA\[) # Single-line comment style opening
|
||||||
|
|
|
|
||||||
(/\*[\s]*\]\]>[\s]*\*/) # Block comment style closing
|
(/\*\s*\]\]>\s*\*/) # Block comment style closing
|
||||||
|
|
|
|
||||||
(//[\s]*\]\]>) # Single-line comment style closing
|
(//\s*\]\]>) # Single-line comment style closing
|
||||||
)[\s]*$}x
|
)\s*$}x
|
||||||
|
|
||||||
class StructuredData
|
class StructuredData
|
||||||
SUPPORTED_TYPES = %w(
|
SUPPORTED_TYPES = %w(
|
||||||
|
@ -204,7 +204,7 @@ class LinkDetailsExtractor
|
||||||
def host_to_url(str)
|
def host_to_url(str)
|
||||||
return if str.blank?
|
return if str.blank?
|
||||||
|
|
||||||
str.start_with?(/https?:\/\//) ? str : "http://#{str}"
|
str.start_with?(%r{https?://}) ? str : "http://#{str}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def valid_url_or_nil(str, same_origin_only: false)
|
def valid_url_or_nil(str, same_origin_only: false)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
class PlainTextFormatter
|
class PlainTextFormatter
|
||||||
include ActionView::Helpers::TextHelper
|
include ActionView::Helpers::TextHelper
|
||||||
|
|
||||||
NEWLINE_TAGS_RE = /(<br \/>|<br>|<\/p>)+/
|
NEWLINE_TAGS_RE = %r{(<br />|<br>|</p>)+}
|
||||||
|
|
||||||
attr_reader :text, :local
|
attr_reader :text, :local
|
||||||
|
|
||||||
|
|
|
@ -7,18 +7,18 @@ class TagManager
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
|
|
||||||
def web_domain?(domain)
|
def web_domain?(domain)
|
||||||
domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.web_domain).zero?
|
domain.nil? || domain.delete('/').casecmp(Rails.configuration.x.web_domain).zero?
|
||||||
end
|
end
|
||||||
|
|
||||||
def local_domain?(domain)
|
def local_domain?(domain)
|
||||||
domain.nil? || domain.gsub(/[\/]/, '').casecmp(Rails.configuration.x.local_domain).zero?
|
domain.nil? || domain.delete('/').casecmp(Rails.configuration.x.local_domain).zero?
|
||||||
end
|
end
|
||||||
|
|
||||||
def normalize_domain(domain)
|
def normalize_domain(domain)
|
||||||
return if domain.nil?
|
return if domain.nil?
|
||||||
|
|
||||||
uri = Addressable::URI.new
|
uri = Addressable::URI.new
|
||||||
uri.host = domain.gsub(/[\/]/, '')
|
uri.host = domain.delete('/')
|
||||||
uri.normalized_host
|
uri.normalized_host
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ class TextFormatter
|
||||||
include ERB::Util
|
include ERB::Util
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
|
|
||||||
URL_PREFIX_REGEX = /\A(https?:\/\/(www\.)?|xmpp:)/
|
URL_PREFIX_REGEX = %r{\A(https?://(www\.)?|xmpp:)}
|
||||||
|
|
||||||
DEFAULT_REL = %w(nofollow noopener noreferrer).freeze
|
DEFAULT_REL = %w(nofollow noopener noreferrer).freeze
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ class WebfingerResource
|
||||||
case resource
|
case resource
|
||||||
when /\Ahttps?/i
|
when /\Ahttps?/i
|
||||||
username_from_url
|
username_from_url
|
||||||
when /\@/
|
when /@/
|
||||||
username_from_acct
|
username_from_acct
|
||||||
else
|
else
|
||||||
raise InvalidRequest
|
raise InvalidRequest
|
||||||
|
|
|
@ -62,9 +62,9 @@ class Account < ApplicationRecord
|
||||||
trust_level
|
trust_level
|
||||||
)
|
)
|
||||||
|
|
||||||
USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
|
USERNAME_RE = /[a-z0-9_]+([a-z0-9_.-]+[a-z0-9_]+)?/i
|
||||||
MENTION_RE = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[[:word:]\.\-]+[[:word:]]+)?)/i
|
MENTION_RE = %r{(?<=^|[^/[:word:]])@((#{USERNAME_RE})(?:@[[:word:].-]+[[:word:]]+)?)}i
|
||||||
URL_PREFIX_RE = /\Ahttp(s?):\/\/[^\/]+/
|
URL_PREFIX_RE = %r{\Ahttp(s?)://[^/]+}
|
||||||
USERNAME_ONLY_RE = /\A#{USERNAME_RE}\z/i
|
USERNAME_ONLY_RE = /\A#{USERNAME_RE}\z/i
|
||||||
|
|
||||||
include Attachmentable
|
include Attachmentable
|
||||||
|
|
|
@ -35,7 +35,7 @@ class DomainAllow < ApplicationRecord
|
||||||
def rule_for(domain)
|
def rule_for(domain)
|
||||||
return if domain.blank?
|
return if domain.blank?
|
||||||
|
|
||||||
uri = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') }
|
uri = Addressable::URI.new.tap { |u| u.host = domain.delete('/') }
|
||||||
|
|
||||||
find_by(domain: uri.normalized_host)
|
find_by(domain: uri.normalized_host)
|
||||||
end
|
end
|
||||||
|
|
|
@ -67,7 +67,7 @@ class DomainBlock < ApplicationRecord
|
||||||
def rule_for(domain)
|
def rule_for(domain)
|
||||||
return if domain.blank?
|
return if domain.blank?
|
||||||
|
|
||||||
uri = Addressable::URI.new.tap { |u| u.host = domain.strip.gsub(/[\/]/, '') }
|
uri = Addressable::URI.new.tap { |u| u.host = domain.strip.delete('/') }
|
||||||
segments = uri.normalized_host.split('.')
|
segments = uri.normalized_host.split('.')
|
||||||
variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
|
variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ class SiteUpload < ApplicationRecord
|
||||||
|
|
||||||
has_attached_file :file, styles: ->(file) { STYLES[file.instance.var.to_sym] }, convert_options: { all: '-coalesce +profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail, :blurhash_transcoder, :type_corrector]
|
has_attached_file :file, styles: ->(file) { STYLES[file.instance.var.to_sym] }, convert_options: { all: '-coalesce +profile "!icc,*" +set modify-date +set create-date' }, processors: [:lazy_thumbnail, :blurhash_transcoder, :type_corrector]
|
||||||
|
|
||||||
validates_attachment_content_type :file, content_type: /\Aimage\/.*\z/
|
validates_attachment_content_type :file, content_type: %r{\Aimage/.*\z}
|
||||||
validates :file, presence: true
|
validates :file, presence: true
|
||||||
validates :var, presence: true, uniqueness: true
|
validates :var, presence: true, uniqueness: true
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ class Tag < ApplicationRecord
|
||||||
HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)'
|
HASHTAG_LAST_SEQUENCE = '([[:word:]_]*[[:alpha:]][[:word:]_]*)'
|
||||||
HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}"
|
HASHTAG_NAME_PAT = "#{HASHTAG_FIRST_SEQUENCE}|#{HASHTAG_LAST_SEQUENCE}"
|
||||||
|
|
||||||
HASHTAG_RE = /(?:^|[^\/\)\w])#(#{HASHTAG_NAME_PAT})/i
|
HASHTAG_RE = %r{(?:^|[^/)\w])#(#{HASHTAG_NAME_PAT})}i
|
||||||
HASHTAG_NAME_RE = /\A(#{HASHTAG_NAME_PAT})\z/i
|
HASHTAG_NAME_RE = /\A(#{HASHTAG_NAME_PAT})\z/i
|
||||||
HASHTAG_INVALID_CHARS_RE = /[^[:alnum:]#{HASHTAG_SEPARATORS}]/
|
HASHTAG_INVALID_CHARS_RE = /[^[:alnum:]#{HASHTAG_SEPARATORS}]/
|
||||||
|
|
||||||
|
|
|
@ -77,8 +77,8 @@ class BackupService < BaseService
|
||||||
path = m.file&.path
|
path = m.file&.path
|
||||||
next unless path
|
next unless path
|
||||||
|
|
||||||
path = path.gsub(/\A.*\/system\//, '')
|
path = path.gsub(%r{\A.*/system/}, '')
|
||||||
path = path.gsub(/\A\/+/, '')
|
path = path.gsub(%r{\A/+}, '')
|
||||||
download_to_zip(zipfile, m.file, path)
|
download_to_zip(zipfile, m.file, path)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ class FetchLinkCardService < BaseService
|
||||||
URL_PATTERN = %r{
|
URL_PATTERN = %r{
|
||||||
(#{Twitter::TwitterText::Regex[:valid_url_preceding_chars]}) # $1 preceding chars
|
(#{Twitter::TwitterText::Regex[:valid_url_preceding_chars]}) # $1 preceding chars
|
||||||
( # $2 URL
|
( # $2 URL
|
||||||
(https?:\/\/) # $3 Protocol (required)
|
(https?://) # $3 Protocol (required)
|
||||||
(#{Twitter::TwitterText::Regex[:valid_domain]}) # $4 Domain(s)
|
(#{Twitter::TwitterText::Regex[:valid_domain]}) # $4 Domain(s)
|
||||||
(?::(#{Twitter::TwitterText::Regex[:valid_port_number]}))? # $5 Port number (optional)
|
(?::(#{Twitter::TwitterText::Regex[:valid_port_number]}))? # $5 Port number (optional)
|
||||||
(/#{Twitter::TwitterText::Regex[:valid_url_path]}*)? # $6 URL Path and anchor
|
(/#{Twitter::TwitterText::Regex[:valid_url_path]}*)? # $6 URL Path and anchor
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
class FetchOEmbedService
|
class FetchOEmbedService
|
||||||
ENDPOINT_CACHE_EXPIRES_IN = 24.hours.freeze
|
ENDPOINT_CACHE_EXPIRES_IN = 24.hours.freeze
|
||||||
URL_REGEX = /(=(http[s]?(%3A|:)(\/\/|%2F%2F)))([^&]*)/i
|
URL_REGEX = %r{(=(https?(%3A|:)(//|%2F%2F)))([^&]*)}i
|
||||||
|
|
||||||
attr_reader :url, :options, :format, :endpoint_url
|
attr_reader :url, :options, :format, :endpoint_url
|
||||||
|
|
||||||
|
|
|
@ -70,7 +70,7 @@ class SearchService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def url_query?
|
def url_query?
|
||||||
@resolve && /\Ahttps?:\/\//.match?(@query)
|
@resolve && %r{\Ahttps?://}.match?(@query)
|
||||||
end
|
end
|
||||||
|
|
||||||
def url_resource_results
|
def url_resource_results
|
||||||
|
|
|
@ -79,7 +79,7 @@ class Rack::Attack
|
||||||
end
|
end
|
||||||
|
|
||||||
throttle('throttle_api_media', limit: 30, period: 30.minutes) do |req|
|
throttle('throttle_api_media', limit: 30, period: 30.minutes) do |req|
|
||||||
req.authenticated_user_id if req.post? && req.path.match?(/\A\/api\/v\d+\/media\z/i)
|
req.authenticated_user_id if req.post? && req.path.match?(%r{\A/api/v\d+/media\z}i)
|
||||||
end
|
end
|
||||||
|
|
||||||
throttle('throttle_media_proxy', limit: 30, period: 10.minutes) do |req|
|
throttle('throttle_media_proxy', limit: 30, period: 10.minutes) do |req|
|
||||||
|
@ -98,8 +98,8 @@ class Rack::Attack
|
||||||
req.throttleable_remote_ip if req.paging_request? && req.unauthenticated?
|
req.throttleable_remote_ip if req.paging_request? && req.unauthenticated?
|
||||||
end
|
end
|
||||||
|
|
||||||
API_DELETE_REBLOG_REGEX = /\A\/api\/v1\/statuses\/[\d]+\/unreblog\z/
|
API_DELETE_REBLOG_REGEX = %r{\A/api/v1/statuses/\d+/unreblog\z}
|
||||||
API_DELETE_STATUS_REGEX = /\A\/api\/v1\/statuses\/[\d]+\z/
|
API_DELETE_STATUS_REGEX = %r{\A/api/v1/statuses/\d+\z}
|
||||||
|
|
||||||
throttle('throttle_api_delete', limit: 30, period: 30.minutes) do |req|
|
throttle('throttle_api_delete', limit: 30, period: 30.minutes) do |req|
|
||||||
req.authenticated_user_id if (req.post? && req.path.match?(API_DELETE_REBLOG_REGEX)) || (req.delete? && req.path.match?(API_DELETE_STATUS_REGEX))
|
req.authenticated_user_id if (req.post? && req.path.match?(API_DELETE_REBLOG_REGEX)) || (req.delete? && req.path.match?(API_DELETE_STATUS_REGEX))
|
||||||
|
|
|
@ -6,8 +6,8 @@ module Twitter::TwitterText
|
||||||
end
|
end
|
||||||
|
|
||||||
class Regex
|
class Regex
|
||||||
REGEXEN[:valid_general_url_path_chars] = /[^\p{White_Space}<>\(\)\?]/iou
|
REGEXEN[:valid_general_url_path_chars] = /[^\p{White_Space}<>()?]/iou
|
||||||
REGEXEN[:valid_url_path_ending_chars] = /[^\p{White_Space}\(\)\?!\*"'「」<>;:=\,\.\$%\[\]~&\|@]|(?:#{REGEXEN[:valid_url_balanced_parens]})/iou
|
REGEXEN[:valid_url_path_ending_chars] = /[^\p{White_Space}()?!*"'「」<>;:=,.$%\[\]~&|@]|(?:#{REGEXEN[:valid_url_balanced_parens]})/iou
|
||||||
REGEXEN[:valid_url_balanced_parens] = /
|
REGEXEN[:valid_url_balanced_parens] = /
|
||||||
\(
|
\(
|
||||||
(?:
|
(?:
|
||||||
|
@ -25,20 +25,20 @@ module Twitter::TwitterText
|
||||||
\)
|
\)
|
||||||
/iox
|
/iox
|
||||||
UCHARS = '\u{A0}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFEF}\u{10000}-\u{1FFFD}\u{20000}-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}\u{50000}-\u{5FFFD}\u{60000}-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}\u{90000}-\u{9FFFD}\u{A0000}-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}\u{D0000}-\u{DFFFD}\u{E1000}-\u{EFFFD}\u{E000}-\u{F8FF}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}'
|
UCHARS = '\u{A0}-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFEF}\u{10000}-\u{1FFFD}\u{20000}-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}\u{50000}-\u{5FFFD}\u{60000}-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}\u{90000}-\u{9FFFD}\u{A0000}-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}\u{D0000}-\u{DFFFD}\u{E1000}-\u{EFFFD}\u{E000}-\u{F8FF}\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}'
|
||||||
REGEXEN[:valid_url_query_chars] = /[a-z0-9!?\*'\(\);:&=\+\$\/%#\[\]\-_\.,~|@\^#{UCHARS}]/iou
|
REGEXEN[:valid_url_query_chars] = %r{[a-z0-9!?*'();:&=+$/%#\[\]\-_.,~|@\^#{UCHARS}]}iou
|
||||||
REGEXEN[:valid_url_query_ending_chars] = /[a-z0-9_&=#\/\-#{UCHARS}]/iou
|
REGEXEN[:valid_url_query_ending_chars] = %r{[a-z0-9_&=#/\-#{UCHARS}]}iou
|
||||||
REGEXEN[:valid_url_path] = /(?:
|
REGEXEN[:valid_url_path] = %r{(?:
|
||||||
(?:
|
(?:
|
||||||
#{REGEXEN[:valid_general_url_path_chars]}*
|
#{REGEXEN[:valid_general_url_path_chars]}*
|
||||||
(?:#{REGEXEN[:valid_url_balanced_parens]} #{REGEXEN[:valid_general_url_path_chars]}*)*
|
(?:#{REGEXEN[:valid_url_balanced_parens]} #{REGEXEN[:valid_general_url_path_chars]}*)*
|
||||||
#{REGEXEN[:valid_url_path_ending_chars]}
|
#{REGEXEN[:valid_url_path_ending_chars]}
|
||||||
)|(?:#{REGEXEN[:valid_general_url_path_chars]}+\/)
|
)|(?:#{REGEXEN[:valid_general_url_path_chars]}+/)
|
||||||
)/iox
|
)}iox
|
||||||
REGEXEN[:valid_url] = %r{
|
REGEXEN[:valid_url] = %r{
|
||||||
( # $1 total match
|
( # $1 total match
|
||||||
(#{REGEXEN[:valid_url_preceding_chars]}) # $2 Preceding character
|
(#{REGEXEN[:valid_url_preceding_chars]}) # $2 Preceding character
|
||||||
( # $3 URL
|
( # $3 URL
|
||||||
((?:https?|dat|dweb|ipfs|ipns|ssb|gopher|gemini):\/\/)? # $4 Protocol (optional)
|
((?:https?|dat|dweb|ipfs|ipns|ssb|gopher|gemini)://)? # $4 Protocol (optional)
|
||||||
(#{REGEXEN[:valid_domain]}) # $5 Domain(s)
|
(#{REGEXEN[:valid_domain]}) # $5 Domain(s)
|
||||||
(?::(#{REGEXEN[:valid_port_number]}))? # $6 Port number (optional)
|
(?::(#{REGEXEN[:valid_port_number]}))? # $6 Port number (optional)
|
||||||
(/#{REGEXEN[:valid_url_path]}*)? # $7 URL Path and anchor
|
(/#{REGEXEN[:valid_url_path]}*)? # $7 URL Path and anchor
|
||||||
|
|
|
@ -115,21 +115,21 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
get '/:encoded_at(*path)', to: redirect("/@%{path}"), constraints: { encoded_at: /%40/ }
|
get '/:encoded_at(*path)', to: redirect("/@%{path}"), constraints: { encoded_at: /%40/ }
|
||||||
|
|
||||||
constraints(username: /[^@\/.]+/) do
|
constraints(username: %r{[^@/.]+}) do
|
||||||
get '/@:username', to: 'accounts#show', as: :short_account
|
get '/@:username', to: 'accounts#show', as: :short_account
|
||||||
get '/@:username/with_replies', to: 'accounts#show', as: :short_account_with_replies
|
get '/@:username/with_replies', to: 'accounts#show', as: :short_account_with_replies
|
||||||
get '/@:username/media', to: 'accounts#show', as: :short_account_media
|
get '/@:username/media', to: 'accounts#show', as: :short_account_media
|
||||||
get '/@:username/tagged/:tag', to: 'accounts#show', as: :short_account_tag
|
get '/@:username/tagged/:tag', to: 'accounts#show', as: :short_account_tag
|
||||||
end
|
end
|
||||||
|
|
||||||
constraints(account_username: /[^@\/.]+/) do
|
constraints(account_username: %r{[^@/.]+}) do
|
||||||
get '/@:account_username/following', to: 'following_accounts#index'
|
get '/@:account_username/following', to: 'following_accounts#index'
|
||||||
get '/@:account_username/followers', to: 'follower_accounts#index'
|
get '/@:account_username/followers', to: 'follower_accounts#index'
|
||||||
get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
|
get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
|
||||||
get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
|
get '/@:account_username/:id/embed', to: 'statuses#embed', as: :embed_short_account_status
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/@:username_with_domain/(*any)', to: 'home#index', constraints: { username_with_domain: /([^\/])+?/ }, format: false
|
get '/@:username_with_domain/(*any)', to: 'home#index', constraints: { username_with_domain: %r{([^/])+?} }, format: false
|
||||||
get '/settings', to: redirect('/settings/profile')
|
get '/settings', to: redirect('/settings/profile')
|
||||||
|
|
||||||
draw(:settings)
|
draw(:settings)
|
||||||
|
|
|
@ -16,7 +16,7 @@ module PremailerWebpackStrategy
|
||||||
Rails.public_path.join(url).read
|
Rails.public_path.join(url).read
|
||||||
end
|
end
|
||||||
|
|
||||||
css.gsub(/url\(\//, "url(#{asset_host}/")
|
css.gsub(%r{url\(/}, "url(#{asset_host}/")
|
||||||
end
|
end
|
||||||
|
|
||||||
module_function :load
|
module_function :load
|
||||||
|
|
|
@ -171,7 +171,7 @@ module Paperclip
|
||||||
end
|
end
|
||||||
|
|
||||||
def palette_from_histogram(result, quantity)
|
def palette_from_histogram(result, quantity)
|
||||||
frequencies = result.scan(/([0-9]+)\:/).flatten.map(&:to_f)
|
frequencies = result.scan(/([0-9]+):/).flatten.map(&:to_f)
|
||||||
hex_values = result.scan(/\#([0-9A-Fa-f]{6,8})/).flatten
|
hex_values = result.scan(/\#([0-9A-Fa-f]{6,8})/).flatten
|
||||||
total_frequencies = frequencies.sum.to_f
|
total_frequencies = frequencies.sum.to_f
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ def gen_border(codepoint, color)
|
||||||
end
|
end
|
||||||
|
|
||||||
def codepoints_to_filename(codepoints)
|
def codepoints_to_filename(codepoints)
|
||||||
codepoints.downcase.gsub(/\A[0]+/, '').tr(' ', '-')
|
codepoints.downcase.gsub(/\A0+/, '').tr(' ', '-')
|
||||||
end
|
end
|
||||||
|
|
||||||
def codepoints_to_unicode(codepoints)
|
def codepoints_to_unicode(codepoints)
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace :mastodon do
|
||||||
env['LOCAL_DOMAIN'] = prompt.ask('Domain name:') do |q|
|
env['LOCAL_DOMAIN'] = prompt.ask('Domain name:') do |q|
|
||||||
q.required true
|
q.required true
|
||||||
q.modify :strip
|
q.modify :strip
|
||||||
q.validate(/\A[a-z0-9\.\-]+\z/i)
|
q.validate(/\A[a-z0-9.-]+\z/i)
|
||||||
q.messages[:valid?] = 'Invalid domain. If you intend to use unicode characters, enter punycode here'
|
q.messages[:valid?] = 'Invalid domain. If you intend to use unicode characters, enter punycode here'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -240,7 +240,7 @@ namespace :mastodon do
|
||||||
end
|
end
|
||||||
|
|
||||||
env['S3_PROTOCOL'] = env['S3_ENDPOINT'].start_with?('https') ? 'https' : 'http'
|
env['S3_PROTOCOL'] = env['S3_ENDPOINT'].start_with?('https') ? 'https' : 'http'
|
||||||
env['S3_HOSTNAME'] = env['S3_ENDPOINT'].gsub(/\Ahttps?:\/\//, '')
|
env['S3_HOSTNAME'] = env['S3_ENDPOINT'].gsub(%r{\Ahttps?://}, '')
|
||||||
|
|
||||||
env['S3_BUCKET'] = prompt.ask('Minio bucket name:') do |q|
|
env['S3_BUCKET'] = prompt.ask('Minio bucket name:') do |q|
|
||||||
q.required true
|
q.required true
|
||||||
|
@ -269,7 +269,7 @@ namespace :mastodon do
|
||||||
end
|
end
|
||||||
|
|
||||||
env['S3_PROTOCOL'] = env['S3_ENDPOINT'].start_with?('https') ? 'https' : 'http'
|
env['S3_PROTOCOL'] = env['S3_ENDPOINT'].start_with?('https') ? 'https' : 'http'
|
||||||
env['S3_HOSTNAME'] = env['S3_ENDPOINT'].gsub(/\Ahttps?:\/\//, '')
|
env['S3_HOSTNAME'] = env['S3_ENDPOINT'].gsub(%r{\Ahttps?://}, '')
|
||||||
|
|
||||||
env['S3_BUCKET'] = prompt.ask('Storj DCS bucket name:') do |q|
|
env['S3_BUCKET'] = prompt.ask('Storj DCS bucket name:') do |q|
|
||||||
q.required true
|
q.required true
|
||||||
|
@ -573,7 +573,7 @@ def dotenv_escape(value)
|
||||||
|
|
||||||
# As long as the value doesn't include single quotes, we can safely
|
# As long as the value doesn't include single quotes, we can safely
|
||||||
# rely on single quotes
|
# rely on single quotes
|
||||||
return "'#{value}'" unless /[']/.match?(value)
|
return "'#{value}'" unless value.include?("'")
|
||||||
|
|
||||||
# If the value contains the string '\n' or '\r' we simply can't use
|
# If the value contains the string '\n' or '\r' we simply can't use
|
||||||
# a double-quoted string, because Dotenv will expand \n or \r no
|
# a double-quoted string, because Dotenv will expand \n or \r no
|
||||||
|
|
Reference in New Issue