diff options
Diffstat (limited to 'app/services/labels')
-rw-r--r-- | app/services/labels/base_service.rb | 161 | ||||
-rw-r--r-- | app/services/labels/create_service.rb | 25 | ||||
-rw-r--r-- | app/services/labels/find_or_create_service.rb | 4 | ||||
-rw-r--r-- | app/services/labels/update_service.rb | 15 |
4 files changed, 203 insertions, 2 deletions
diff --git a/app/services/labels/base_service.rb b/app/services/labels/base_service.rb new file mode 100644 index 00000000000..91d72a57b4e --- /dev/null +++ b/app/services/labels/base_service.rb @@ -0,0 +1,161 @@ +module Labels + class BaseService < ::BaseService + COLOR_NAME_TO_HEX = { + black: '#000000', + silver: '#C0C0C0', + gray: '#808080', + white: '#FFFFFF', + maroon: '#800000', + red: '#FF0000', + purple: '#800080', + fuchsia: '#FF00FF', + green: '#008000', + lime: '#00FF00', + olive: '#808000', + yellow: '#FFFF00', + navy: '#000080', + blue: '#0000FF', + teal: '#008080', + aqua: '#00FFFF', + orange: '#FFA500', + aliceblue: '#F0F8FF', + antiquewhite: '#FAEBD7', + aquamarine: '#7FFFD4', + azure: '#F0FFFF', + beige: '#F5F5DC', + bisque: '#FFE4C4', + blanchedalmond: '#FFEBCD', + blueviolet: '#8A2BE2', + brown: '#A52A2A', + burlywood: '#DEB887', + cadetblue: '#5F9EA0', + chartreuse: '#7FFF00', + chocolate: '#D2691E', + coral: '#FF7F50', + cornflowerblue: '#6495ED', + cornsilk: '#FFF8DC', + crimson: '#DC143C', + darkblue: '#00008B', + darkcyan: '#008B8B', + darkgoldenrod: '#B8860B', + darkgray: '#A9A9A9', + darkgreen: '#006400', + darkgrey: '#A9A9A9', + darkkhaki: '#BDB76B', + darkmagenta: '#8B008B', + darkolivegreen: '#556B2F', + darkorange: '#FF8C00', + darkorchid: '#9932CC', + darkred: '#8B0000', + darksalmon: '#E9967A', + darkseagreen: '#8FBC8F', + darkslateblue: '#483D8B', + darkslategray: '#2F4F4F', + darkslategrey: '#2F4F4F', + darkturquoise: '#00CED1', + darkviolet: '#9400D3', + deeppink: '#FF1493', + deepskyblue: '#00BFFF', + dimgray: '#696969', + dimgrey: '#696969', + dodgerblue: '#1E90FF', + firebrick: '#B22222', + floralwhite: '#FFFAF0', + forestgreen: '#228B22', + gainsboro: '#DCDCDC', + ghostwhite: '#F8F8FF', + gold: '#FFD700', + goldenrod: '#DAA520', + greenyellow: '#ADFF2F', + grey: '#808080', + honeydew: '#F0FFF0', + hotpink: '#FF69B4', + indianred: '#CD5C5C', + indigo: '#4B0082', + ivory: '#FFFFF0', + khaki: '#F0E68C', + lavender: '#E6E6FA', + lavenderblush: '#FFF0F5', + lawngreen: '#7CFC00', + lemonchiffon: '#FFFACD', + lightblue: '#ADD8E6', + lightcoral: '#F08080', + lightcyan: '#E0FFFF', + lightgoldenrodyellow: '#FAFAD2', + lightgray: '#D3D3D3', + lightgreen: '#90EE90', + lightgrey: '#D3D3D3', + lightpink: '#FFB6C1', + lightsalmon: '#FFA07A', + lightseagreen: '#20B2AA', + lightskyblue: '#87CEFA', + lightslategray: '#778899', + lightslategrey: '#778899', + lightsteelblue: '#B0C4DE', + lightyellow: '#FFFFE0', + limegreen: '#32CD32', + linen: '#FAF0E6', + mediumaquamarine: '#66CDAA', + mediumblue: '#0000CD', + mediumorchid: '#BA55D3', + mediumpurple: '#9370DB', + mediumseagreen: '#3CB371', + mediumslateblue: '#7B68EE', + mediumspringgreen: '#00FA9A', + mediumturquoise: '#48D1CC', + mediumvioletred: '#C71585', + midnightblue: '#191970', + mintcream: '#F5FFFA', + mistyrose: '#FFE4E1', + moccasin: '#FFE4B5', + navajowhite: '#FFDEAD', + oldlace: '#FDF5E6', + olivedrab: '#6B8E23', + orangered: '#FF4500', + orchid: '#DA70D6', + palegoldenrod: '#EEE8AA', + palegreen: '#98FB98', + paleturquoise: '#AFEEEE', + palevioletred: '#DB7093', + papayawhip: '#FFEFD5', + peachpuff: '#FFDAB9', + peru: '#CD853F', + pink: '#FFC0CB', + plum: '#DDA0DD', + powderblue: '#B0E0E6', + rosybrown: '#BC8F8F', + royalblue: '#4169E1', + saddlebrown: '#8B4513', + salmon: '#FA8072', + sandybrown: '#F4A460', + seagreen: '#2E8B57', + seashell: '#FFF5EE', + sienna: '#A0522D', + skyblue: '#87CEEB', + slateblue: '#6A5ACD', + slategray: '#708090', + slategrey: '#708090', + snow: '#FFFAFA', + springgreen: '#00FF7F', + steelblue: '#4682B4', + tan: '#D2B48C', + thistle: '#D8BFD8', + tomato: '#FF6347', + turquoise: '#40E0D0', + violet: '#EE82EE', + wheat: '#F5DEB3', + whitesmoke: '#F5F5F5', + yellowgreen: '#9ACD32', + rebeccapurple: '#663399' + }.freeze + + def convert_color_name_to_hex + color = params[:color] + color_name = color.strip.downcase + + return color if color_name.start_with?('#') + + COLOR_NAME_TO_HEX[color_name.to_sym] || color + end + end +end diff --git a/app/services/labels/create_service.rb b/app/services/labels/create_service.rb new file mode 100644 index 00000000000..6c399c92377 --- /dev/null +++ b/app/services/labels/create_service.rb @@ -0,0 +1,25 @@ +module Labels + class CreateService < Labels::BaseService + def initialize(params = {}) + @params = params.dup.with_indifferent_access + end + + # returns the created label + def execute(target_params) + params[:color] = convert_color_name_to_hex if params[:color].present? + + project_or_group = target_params[:project] || target_params[:group] + + if project_or_group.present? + project_or_group.labels.create(params) + elsif target_params[:template] + label = Label.new(params) + label.template = true + label.save + label + else + Rails.logger.warn("target_params should contain :project or :group or :template, actual value: #{target_params}") + end + end + end +end diff --git a/app/services/labels/find_or_create_service.rb b/app/services/labels/find_or_create_service.rb index cf4f7606c94..940c8b333d3 100644 --- a/app/services/labels/find_or_create_service.rb +++ b/app/services/labels/find_or_create_service.rb @@ -3,7 +3,7 @@ module Labels def initialize(current_user, project, params = {}) @current_user = current_user @project = project - @params = params.dup + @params = params.dup.with_indifferent_access end def execute(skip_authorization: false) @@ -28,7 +28,7 @@ module Labels new_label = available_labels.find_by(title: title) if new_label.nil? && (skip_authorization || Ability.allowed?(current_user, :admin_label, project)) - new_label = project.labels.create(params) + new_label = Labels::CreateService.new(params).execute(project: project) end new_label diff --git a/app/services/labels/update_service.rb b/app/services/labels/update_service.rb new file mode 100644 index 00000000000..28dcabf9541 --- /dev/null +++ b/app/services/labels/update_service.rb @@ -0,0 +1,15 @@ +module Labels + class UpdateService < Labels::BaseService + def initialize(params = {}) + @params = params.dup.with_indifferent_access + end + + # returns the updated label + def execute(label) + params[:color] = convert_color_name_to_hex if params[:color].present? + + label.update(params) + label + end + end +end |