Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-12-20 16:37:47 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-12-20 16:37:47 +0300
commitaee0a117a889461ce8ced6fcf73207fe017f1d99 (patch)
tree891d9ef189227a8445d83f35c1b0fc99573f4380 /app/models/snippet.rb
parent8d46af3258650d305f53b819eabf7ab18d22f59e (diff)
Add latest changes from gitlab-org/gitlab@14-6-stable-eev14.6.0-rc42
Diffstat (limited to 'app/models/snippet.rb')
-rw-r--r--app/models/snippet.rb169
1 files changed, 88 insertions, 81 deletions
diff --git a/app/models/snippet.rb b/app/models/snippet.rb
index dd76f2c3c84..6a8123b3c08 100644
--- a/app/models/snippet.rb
+++ b/app/models/snippet.rb
@@ -98,87 +98,115 @@ class Snippet < ApplicationRecord
mode: :per_attribute_iv,
algorithm: 'aes-256-cbc'
- def self.with_optional_visibility(value = nil)
- if value
- where(visibility_level: value)
- else
- all
+ class << self
+ # Searches for snippets with a matching title, description or file name.
+ #
+ # This method uses ILIKE on PostgreSQL.
+ #
+ # query - The search query as a String.
+ #
+ # Returns an ActiveRecord::Relation.
+ def search(query)
+ fuzzy_search(query, [:title, :description, :file_name])
end
- end
- def self.only_personal_snippets
- where(project_id: nil)
- end
+ def parent_class
+ ::Project
+ end
- def self.only_project_snippets
- where.not(project_id: nil)
- end
+ def sanitized_file_name(file_name)
+ file_name.gsub(/[^a-zA-Z0-9_\-\.]+/, '')
+ end
- def self.only_include_projects_visible_to(current_user = nil)
- levels = Gitlab::VisibilityLevel.levels_for_user(current_user)
+ def with_optional_visibility(value = nil)
+ if value
+ where(visibility_level: value)
+ else
+ all
+ end
+ end
- joins(:project).where(projects: { visibility_level: levels })
- end
+ def only_personal_snippets
+ where(project_id: nil)
+ end
- def self.only_include_projects_with_snippets_enabled(include_private: false)
- column = ProjectFeature.access_level_attribute(:snippets)
- levels = [ProjectFeature::ENABLED, ProjectFeature::PUBLIC]
+ def only_project_snippets
+ where.not(project_id: nil)
+ end
- levels << ProjectFeature::PRIVATE if include_private
+ def only_include_projects_visible_to(current_user = nil)
+ levels = Gitlab::VisibilityLevel.levels_for_user(current_user)
- joins(project: :project_feature)
- .where(project_features: { column => levels })
- end
+ joins(:project).where(projects: { visibility_level: levels })
+ end
- def self.only_include_authorized_projects(current_user)
- where(
- 'EXISTS (?)',
- ProjectAuthorization
- .select(1)
- .where('project_id = snippets.project_id')
- .where(user_id: current_user.id)
- )
- end
+ def only_include_projects_with_snippets_enabled(include_private: false)
+ column = ProjectFeature.access_level_attribute(:snippets)
+ levels = [ProjectFeature::ENABLED, ProjectFeature::PUBLIC]
- def self.for_project_with_user(project, user = nil)
- return none unless project.snippets_visible?(user)
+ levels << ProjectFeature::PRIVATE if include_private
- if user && project.team.member?(user)
- project.snippets
- else
- project.snippets.public_to_user(user)
+ joins(project: :project_feature)
+ .where(project_features: { column => levels })
end
- end
- def self.visible_to_or_authored_by(user)
- query = where(visibility_level: Gitlab::VisibilityLevel.levels_for_user(user))
- query.or(where(author_id: user.id))
- end
+ def only_include_authorized_projects(current_user)
+ where(
+ 'EXISTS (?)',
+ ProjectAuthorization
+ .select(1)
+ .where('project_id = snippets.project_id')
+ .where(user_id: current_user.id)
+ )
+ end
- def self.reference_prefix
- '$'
- end
+ def for_project_with_user(project, user = nil)
+ return none unless project.snippets_visible?(user)
+
+ if user && project.team.member?(user)
+ project.snippets
+ else
+ project.snippets.public_to_user(user)
+ end
+ end
- # Pattern used to extract `$123` snippet references from text
- #
- # This pattern supports cross-project references.
- def self.reference_pattern
- @reference_pattern ||= %r{
+ def visible_to_or_authored_by(user)
+ query = where(visibility_level: Gitlab::VisibilityLevel.levels_for_user(user))
+ query.or(where(author_id: user.id))
+ end
+
+ def reference_prefix
+ '$'
+ end
+
+ # Pattern used to extract `$123` snippet references from text
+ #
+ # This pattern supports cross-project references.
+ def reference_pattern
+ @reference_pattern ||= %r{
(#{Project.reference_pattern})?
#{Regexp.escape(reference_prefix)}(?<snippet>\d+)
}x
- end
+ end
- def self.link_reference_pattern
- @link_reference_pattern ||= super("snippets", /(?<snippet>\d+)/)
- end
+ def link_reference_pattern
+ @link_reference_pattern ||= super("snippets", /(?<snippet>\d+)/)
+ end
- def self.find_by_id_and_project(id:, project:)
- Snippet.find_by(id: id, project: project)
- end
+ def find_by_id_and_project(id:, project:)
+ Snippet.find_by(id: id, project: project)
+ end
+
+ def find_by_project_title_trunc_created_at(project, title, created_at)
+ where(project: project, title: title)
+ .find_by(
+ "date_trunc('second', created_at at time zone :tz) at time zone :tz = :created_at",
+ tz: created_at.zone, created_at: created_at)
+ end
- def self.max_file_limit
- MAX_FILE_COUNT
+ def max_file_limit
+ MAX_FILE_COUNT
+ end
end
def initialize(attributes = {})
@@ -230,10 +258,6 @@ class Snippet < ApplicationRecord
super.to_s
end
- def self.sanitized_file_name(file_name)
- file_name.gsub(/[^a-zA-Z0-9_\-\.]+/, '')
- end
-
def visibility_level_field
:visibility_level
end
@@ -371,23 +395,6 @@ class Snippet < ApplicationRecord
def multiple_files?
list_files.size > 1
end
-
- class << self
- # Searches for snippets with a matching title, description or file name.
- #
- # This method uses ILIKE on PostgreSQL.
- #
- # query - The search query as a String.
- #
- # Returns an ActiveRecord::Relation.
- def search(query)
- fuzzy_search(query, [:title, :description, :file_name])
- end
-
- def parent_class
- ::Project
- end
- end
end
Snippet.prepend_mod_with('Snippet')