base_service.rb 1.7 KB
Newer Older
1 2
module ProtectedBranches
  class BaseService < ::BaseService
3 4 5 6 7 8
    def initialize(project, current_user, params = {})
      super(project, current_user, params)
      @allowed_to_push = params[:allowed_to_push]
      @allowed_to_merge = params[:allowed_to_merge]
    end

9
    def set_access_levels!
10
      translate_api_params!
11 12 13 14
      set_merge_access_levels!
      set_push_access_levels!
    end

15
    private
16 17

    def set_merge_access_levels!
18
      case @allowed_to_merge
19
      when 'masters'
20
        @protected_branch.merge_access_level.masters!
21
      when 'developers'
22 23
        @protected_branch.merge_access_level.developers!
      end
24
    end
25

26
    def set_push_access_levels!
27
      case @allowed_to_push
28 29 30 31 32 33 34
      when 'masters'
        @protected_branch.push_access_level.masters!
      when 'developers'
        @protected_branch.push_access_level.developers!
      when 'no_one'
        @protected_branch.push_access_level.no_one!
      end
35
    end
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

    # The `branches` API still uses `developers_can_push` and `developers_can_merge`,
    # which need to be translated to `allowed_to_push` and `allowed_to_merge`,
    # respectively.
    def translate_api_params!
      @allowed_to_push ||=
        case to_boolean(params[:developers_can_push])
        when true
          'developers'
        when false
          'masters'
        end

      @allowed_to_merge ||=
        case to_boolean(params[:developers_can_merge])
        when true
          'developers'
        when false
          'masters'
        end
    end
57 58 59 60 61 62 63 64 65

    protected

    def to_boolean(value)
      return true if value =~ /^(true|t|yes|y|1|on)$/i
      return false if value =~ /^(false|f|no|n|0|off)$/i

      nil
    end
66 67
  end
end