-
- Downloads
Refactor `Gitlab::GitAccess`
1. Don't use case statements for dispatch anymore. This leads to a lot of duplication, and makes the logic harder to follow. 2. Remove duplicated logic. - For example, the `can_push_to_branch?` exists, but we also have a different way of checking the same condition within `change_access_check`. - This kind of duplication is removed, and the `can_push_to_branch?` method is used in both places. 3. Move checks returning true/false to `UserAccess`. - All public methods in `GitAccess` now return an instance of `GitAccessStatus`. Previously, some methods would return true/false as well, which was confusing. - It makes sense for these kinds of checks to be at the level of a user, so the `UserAccess` class was repurposed for this. The prior `UserAccess.allowed?` classmethod is converted into an instance method. - All external uses of these checks have been migrated to use the `UserAccess` class 4. Move the "change_access_check" into a separate class. - Create the `GitAccess::ChangeAccessCheck` class to run these checks, which are quite substantial. - `ChangeAccessCheck` returns an instance of `GitAccessStatus` as well. 5. Break out the boolean logic in `ChangeAccessCheck` into `if/else` chains - this seems more readable. 6. I can understand that this might look like overkill for !4892, but I think this is a good opportunity to clean it up. - http://martinfowler.com/bliki/OpportunisticRefactoring.html
Showing
- app/helpers/branches_helper.rb 1 addition, 1 deletionapp/helpers/branches_helper.rb
- app/models/merge_request.rb 1 addition, 1 deletionapp/models/merge_request.rb
- app/services/commits/change_service.rb 2 additions, 2 deletionsapp/services/commits/change_service.rb
- app/services/files/base_service.rb 1 addition, 1 deletionapp/services/files/base_service.rb
- lib/api/helpers.rb 1 addition, 1 deletionlib/api/helpers.rb
- lib/gitlab/git_access.rb 30 additions, 129 deletionslib/gitlab/git_access.rb
- lib/gitlab/git_access/change_access_check.rb 96 additions, 0 deletionslib/gitlab/git_access/change_access_check.rb
- lib/gitlab/git_access_wiki.rb 1 addition, 1 deletionlib/gitlab/git_access_wiki.rb
- lib/gitlab/user_access.rb 45 additions, 3 deletionslib/gitlab/user_access.rb
- spec/lib/gitlab/git_access_spec.rb 0 additions, 82 deletionsspec/lib/gitlab/git_access_spec.rb
- spec/lib/gitlab/user_access_spec.rb 90 additions, 0 deletionsspec/lib/gitlab/user_access_spec.rb
- spec/requests/api/api_helpers_spec.rb 2 additions, 2 deletionsspec/requests/api/api_helpers_spec.rb
lib/gitlab/git_access/change_access_check.rb
0 → 100644
spec/lib/gitlab/user_access_spec.rb
0 → 100644
Please register or sign in to comment