• Drew Blessing's avatar
    Issue-4769 - Unable to update case of label · 45de7d26
    Drew Blessing authored
    Labels are saved in the database with the case they were originally created with.
    Before this change if a user created a label with the same text but different case
    the label would use the original case and no new label would be created in the
    database. With this change, labels are now case-sensitive.
    
    Steps to test:
    
    1. Before this change, create a new issue with a new label "FIxMe"
    2. Edit the issue and change the label to "FixMe"
    3. Note that the label reverted to "FIxMe"
    4. Apply this change
    5. Edit the issue again and change the label to "FixMe"
    Note that the new case was preserved. If you also look in the database in the "tags" table you will see that both labels are present - "FIxMe" and "FixMe".
    45de7d26
issue.rb 1.63 KB
# == Schema Information
#
# Table name: issues
#
#  id           :integer          not null, primary key
#  title        :string(255)
#  assignee_id  :integer
#  author_id    :integer
#  project_id   :integer
#  created_at   :datetime         not null
#  updated_at   :datetime         not null
#  position     :integer          default(0)
#  branch_name  :string(255)
#  description  :text
#  milestone_id :integer
#  state        :string(255)
#  iid          :integer
#

class Issue < ActiveRecord::Base
  include Issuable
  include InternalId

  ActsAsTaggableOn.strict_case_match = true

  belongs_to :project
  validates :project, presence: true

  scope :of_group, ->(group) { where(project_id: group.project_ids) }
  scope :of_user_team, ->(team) { where(project_id: team.project_ids, assignee_id: team.member_ids) }
  scope :opened, -> { with_state(:opened) }
  scope :closed, -> { with_state(:closed) }

  attr_accessible :title, :assignee_id, :position, :description,
                  :milestone_id, :label_list, :author_id_of_changes,
                  :state_event

  acts_as_taggable_on :labels

  scope :cared, ->(user) { where(assignee_id: user) }
  scope :open_for, ->(user) { opened.assigned_to(user) }

  state_machine :state, initial: :opened do
    event :close do
      transition [:reopened, :opened] => :closed
    end

    event :reopen do
      transition closed: :reopened
    end

    state :opened

    state :reopened

    state :closed
  end

  # Both open and reopened issues should be listed as opened
  scope :opened, -> { with_state(:opened, :reopened) }

  # Mentionable overrides.

  def gfm_reference
    "issue ##{iid}"
  end
end