class RuboCop::Schema::CopInfoMerger

Attributes

merged[R]

@return [CopInfo]

Public Class Methods

merge(old, new) click to toggle source

@param [CopInfo] old @param [CopInfo] new @return [CopInfo]

# File lib/rubocop/schema/cop_info_merger.rb, line 7
def self.merge(old, new)
  new(old, new).merged
end
new(old, new) click to toggle source
# File lib/rubocop/schema/cop_info_merger.rb, line 14
def initialize(old, new)
  @merged = old.dup
  @new = new
  merge
end

Private Instance Methods

merge() click to toggle source
# File lib/rubocop/schema/cop_info_merger.rb, line 22
def merge
  @merged.supports_autocorrect = @new.supports_autocorrect if @merged.supports_autocorrect.nil?
  @merged.enabled_by_default   = @new.enabled_by_default if @merged.enabled_by_default.nil?
  @merged.attributes           = merge_attribute_sets(@merged.attributes, @new.attributes)
  @merged.description          ||= @new.description
end
merge_attribute_sets(old, new) click to toggle source

@param [Array<Attribute>] old @param [Array<Attribute>] new @return [Array<Attribute>]

# File lib/rubocop/schema/cop_info_merger.rb, line 32
def merge_attribute_sets(old, new)
  return old || new unless old && new

  merged = old.map { |attr| [attr.name, attr] }.to_h
  new.each do |attr|
    merged[attr.name] = merged.key?(attr.name) ? merge_attributes(merged[attr.name], attr) : attr
  end

  merged.values
end
merge_attributes(old, new) click to toggle source

@param [Attribute] old @param [Attribute] new @return [Attribute]

# File lib/rubocop/schema/cop_info_merger.rb, line 46
def merge_attributes(old, new)
  old.dup.tap do |merged|
    merged.type    ||= new.type
    merged.default ||= new.default
  end
end