Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
heptapod
heptapod
Commits
8e60f0f43b35
Commit
8e60f0f4
authored
Feb 05, 2015
by
Dmitriy Zaporozhets
Browse files
Explicitly define ordering in models using default_scope
parent
3f50bcd8c494
Changes
22
Hide whitespace changes
Inline
Side-by-side
app/controllers/admin/dashboard_controller.rb
View file @
8e60f0f4
class
Admin::DashboardController
<
Admin
::
ApplicationController
def
index
@projects
=
Project
.
order
(
"created_at DESC"
).
limit
(
10
)
@users
=
User
.
order
(
"created_at DESC"
).
limit
(
10
)
@groups
=
Group
.
order
(
"created_at DESC"
).
limit
(
10
)
@projects
=
Project
.
limit
(
10
)
@users
=
User
.
limit
(
10
)
@groups
=
Group
.
limit
(
10
)
end
end
app/controllers/admin/groups_controller.rb
View file @
8e60f0f4
...
...
@@ -2,7 +2,7 @@
before_filter
:group
,
only:
[
:edit
,
:show
,
:update
,
:destroy
,
:project_update
,
:project_teams_update
]
def
index
@groups
=
Group
.
order
(
'
name
ASC'
)
@groups
=
Group
.
order
_
name
@groups
=
@groups
.
search
(
params
[
:name
])
if
params
[
:name
].
present?
@groups
=
@groups
.
page
(
params
[
:page
]).
per
(
20
)
end
...
...
app/controllers/admin/users_controller.rb
View file @
8e60f0f4
...
...
@@ -5,9 +5,9 @@
@users
=
User
.
filter
(
params
[
:filter
])
@users
=
@users
.
search
(
params
[
:name
])
if
params
[
:name
].
present?
@users
=
@users
.
sort
(
@sort
=
params
[
:sort
])
@users
=
@users
.
alphabetically
.
page
(
params
[
:page
])
@users
=
@users
.
order_name
.
page
(
params
[
:page
])
end
def
show
@personal_projects
=
user
.
personal_projects
@joined_projects
=
user
.
projects
.
joined
(
@user
)
...
...
@@ -9,9 +9,9 @@
end
def
show
@personal_projects
=
user
.
personal_projects
@joined_projects
=
user
.
projects
.
joined
(
@user
)
@keys
=
user
.
keys
.
order
(
'id DESC'
)
@keys
=
user
.
keys
end
def
new
...
...
app/controllers/profiles/keys_controller.rb
View file @
8e60f0f4
...
...
@@ -3,7 +3,7 @@
skip_before_filter
:authenticate_user!
,
only:
[
:get_keys
]
def
index
@keys
=
current_user
.
keys
.
order
(
'id DESC'
)
@keys
=
current_user
.
keys
end
def
show
...
...
app/models/broadcast_message.rb
View file @
8e60f0f4
...
...
@@ -14,6 +14,8 @@
#
class
BroadcastMessage
<
ActiveRecord
::
Base
include
Sortable
validates
:message
,
presence:
true
validates
:starts_at
,
presence:
true
validates
:ends_at
,
presence:
true
...
...
app/models/concerns/internal_id.rb
View file @
8e60f0f4
module
InternalId
extend
ActiveSupport
::
Concern
include
Sortable
included
do
validate
:set_iid
,
on: :create
...
...
app/models/concerns/sortable.rb
0 → 100644
View file @
8e60f0f4
# == Sortable concern
#
# Set default scope for ordering objects
#
module
Sortable
extend
ActiveSupport
::
Concern
included
do
# By default all models should be ordered
# by created_at field starting from newest
default_scope
{
order
(
created_at: :desc
,
id: :desc
)
}
scope
:order_name
,
->
{
reorder
(
name: :asc
)
}
scope
:order_recent
,
->
{
reorder
(
created_at: :desc
,
id: :desc
)
}
scope
:order_oldest
,
->
{
reorder
(
created_at: :asc
,
id: :asc
)
}
scope
:order_recent_updated
,
->
{
reorder
(
updated_at: :desc
,
id: :desc
)
}
scope
:order_oldest_updated
,
->
{
reorder
(
updated_at: :asc
,
id: :asc
)
}
end
module
ClassMethods
def
sort
(
method
)
case
method
.
to_s
when
'name'
then
order_name_asc
when
'recent'
then
order_recent
when
'oldest'
then
order_oldest
when
'recent_updated'
then
order_recent_updated
when
'oldest_updated'
then
order_oldest_updated
else
self
end
end
end
end
app/models/email.rb
View file @
8e60f0f4
...
...
@@ -10,6 +10,8 @@
#
class
Email
<
ActiveRecord
::
Base
include
Sortable
belongs_to
:user
validates
:user_id
,
presence:
true
...
...
app/models/event.rb
View file @
8e60f0f4
...
...
@@ -15,6 +15,7 @@
#
class
Event
<
ActiveRecord
::
Base
include
Sortable
default_scope
{
where
.
not
(
author_id:
nil
)
}
CREATED
=
1
...
...
app/models/hooks/web_hook.rb
View file @
8e60f0f4
...
...
@@ -16,6 +16,7 @@
#
class
WebHook
<
ActiveRecord
::
Base
include
Sortable
include
HTTParty
default_value_for
:push_events
,
true
...
...
app/models/identity.rb
View file @
8e60f0f4
...
...
@@ -9,6 +9,7 @@
#
class
Identity
<
ActiveRecord
::
Base
include
Sortable
belongs_to
:user
validates
:extern_uid
,
allow_blank:
true
,
uniqueness:
{
scope: :provider
}
...
...
app/models/key.rb
View file @
8e60f0f4
...
...
@@ -15,6 +15,7 @@
require
'digest/md5'
class
Key
<
ActiveRecord
::
Base
include
Sortable
include
Gitlab
::
Popen
belongs_to
:user
...
...
app/models/label.rb
View file @
8e60f0f4
...
...
@@ -11,6 +11,8 @@
#
class
Label
<
ActiveRecord
::
Base
include
Sortable
DEFAULT_COLOR
=
'#428BCA'
belongs_to
:project
...
...
app/models/member.rb
View file @
8e60f0f4
...
...
@@ -14,6 +14,7 @@
#
class
Member
<
ActiveRecord
::
Base
include
Sortable
include
Notifiable
include
Gitlab
::
Access
...
...
app/models/merge_request_diff.rb
View file @
8e60f0f4
...
...
@@ -14,6 +14,8 @@
require
Rails
.
root
.
join
(
"app/models/commit"
)
class
MergeRequestDiff
<
ActiveRecord
::
Base
include
Sortable
# Prevent store of diff
# if commits amount more then 200
COMMITS_SAFE_SIZE
=
200
...
...
app/models/namespace.rb
View file @
8e60f0f4
...
...
@@ -14,6 +14,7 @@
#
class
Namespace
<
ActiveRecord
::
Base
include
Sortable
include
Gitlab
::
ShellAdapter
has_many
:projects
,
dependent: :destroy
...
...
app/models/note.rb
View file @
8e60f0f4
...
...
@@ -23,6 +23,7 @@
class
Note
<
ActiveRecord
::
Base
include
Mentionable
default_scope
{
order
(
created_at: :asc
,
id: :asc
)
}
default_value_for
:system
,
false
attr_mentionable
:note
...
...
app/models/project.rb
View file @
8e60f0f4
...
...
@@ -33,6 +33,7 @@
require
'file_size_validator'
class
Project
<
ActiveRecord
::
Base
include
Sortable
include
Gitlab
::
ShellAdapter
include
Gitlab
::
VisibilityLevel
include
Gitlab
::
ConfigHelper
...
...
@@ -53,7 +54,7 @@
attr_accessor
:new_default_branch
# Relations
belongs_to
:creator
,
foreign_key:
'creator_id'
,
class_name:
'User'
belongs_to
:creator
,
foreign_key:
'creator_id'
,
class_name:
'User'
belongs_to
:group
,
->
{
where
(
type:
Group
)
},
foreign_key:
'namespace_id'
belongs_to
:namespace
...
...
@@ -86,7 +87,7 @@
has_many
:merge_requests
,
dependent: :destroy
,
foreign_key:
'target_project_id'
# Merge requests from source project should be kept when source project was removed
has_many
:fork_merge_requests
,
foreign_key:
'source_project_id'
,
class_name:
MergeRequest
has_many
:issues
,
->
{
order
'issues.state DESC, issues.created_at DESC'
},
dependent: :destroy
has_many
:issues
,
dependent: :destroy
has_many
:labels
,
dependent: :destroy
has_many
:services
,
dependent: :destroy
has_many
:events
,
dependent: :destroy
...
...
@@ -139,9 +140,13 @@
mount_uploader
:avatar
,
AttachmentUploader
# Scopes
scope
:sorted_by_activity
,
->
{
reorder
(
'projects.last_activity_at DESC'
)
}
scope
:sorted_by_stars
,
->
{
reorder
(
'projects.star_count DESC'
)
}
scope
:sorted_by_names
,
->
{
joins
(
:namespace
).
reorder
(
'namespaces.name ASC, projects.name ASC'
)
}
scope
:without_user
,
->
(
user
)
{
where
(
'projects.id NOT IN (:ids)'
,
ids:
user
.
authorized_projects
.
map
(
&
:id
)
)
}
scope
:without_team
,
->
(
team
)
{
team
.
projects
.
present?
?
where
(
'projects.id NOT IN (:ids)'
,
ids:
team
.
projects
.
map
(
&
:id
))
:
scoped
}
scope
:not_in_group
,
->
(
group
)
{
where
(
'projects.id NOT IN (:ids)'
,
ids:
group
.
project_ids
)
}
scope
:in_team
,
->
(
team
)
{
where
(
'projects.id IN (:ids)'
,
ids:
team
.
projects
.
map
(
&
:id
))
}
scope
:in_namespace
,
->
(
namespace
)
{
where
(
namespace_id:
namespace
.
id
)
}
scope
:in_group_namespace
,
->
{
joins
(
:group
)
}
...
...
@@ -142,11 +147,9 @@
scope
:without_user
,
->
(
user
)
{
where
(
'projects.id NOT IN (:ids)'
,
ids:
user
.
authorized_projects
.
map
(
&
:id
)
)
}
scope
:without_team
,
->
(
team
)
{
team
.
projects
.
present?
?
where
(
'projects.id NOT IN (:ids)'
,
ids:
team
.
projects
.
map
(
&
:id
))
:
scoped
}
scope
:not_in_group
,
->
(
group
)
{
where
(
'projects.id NOT IN (:ids)'
,
ids:
group
.
project_ids
)
}
scope
:in_team
,
->
(
team
)
{
where
(
'projects.id IN (:ids)'
,
ids:
team
.
projects
.
map
(
&
:id
))
}
scope
:in_namespace
,
->
(
namespace
)
{
where
(
namespace_id:
namespace
.
id
)
}
scope
:in_group_namespace
,
->
{
joins
(
:group
)
}
scope
:sorted_by_activity
,
->
{
reorder
(
'projects.last_activity_at DESC'
)
}
scope
:sorted_by_stars
,
->
{
reorder
(
'projects.star_count DESC'
)
}
scope
:personal
,
->
(
user
)
{
where
(
namespace_id:
user
.
namespace_id
)
}
scope
:joined
,
->
(
user
)
{
where
(
'namespace_id != ?'
,
user
.
namespace_id
)
}
scope
:public_only
,
->
{
where
(
visibility_level:
Project
::
PUBLIC
)
}
...
...
app/models/service.rb
View file @
8e60f0f4
...
...
@@ -15,6 +15,7 @@
# To add new service you should build a class inherited from Service
# and implement a set of methods
class
Service
<
ActiveRecord
::
Base
include
Sortable
serialize
:properties
,
JSON
default_value_for
:active
,
false
...
...
app/models/snippet.rb
View file @
8e60f0f4
...
...
@@ -16,6 +16,7 @@
#
class
Snippet
<
ActiveRecord
::
Base
include
Sortable
include
Linguist
::
BlobHelper
include
Gitlab
::
VisibilityLevel
...
...
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment