Class: Rigor::BleedingEdge::Feature

Inherits:
Data
  • Object
show all
Defined in:
lib/rigor/bleeding_edge.rb

Overview

One queued change.

The two kinds are exclusive by construction: a :severity feature MUST name at least one rule, and a :behaviour feature MUST name none — a behaviour switch that also moved a severity would be two changes wearing one id, and the id is what a CHANGELOG migration note and a user's bleeding_edge: list both key on.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES) ⇒ Feature

Returns a new instance of Feature.

Raises:

  • (ArgumentError)


66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rigor/bleeding_edge.rb', line 66

def initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES)
  raise ArgumentError, "kind must be one of #{KINDS.inspect}, got #{kind.inspect}" unless KINDS.include?(kind)

  if kind == :severity && severity_overrides.empty?
    raise ArgumentError, "bleeding-edge feature #{id.inspect} is :severity but overrides no rule"
  end
  if kind == :behaviour && !severity_overrides.empty?
    raise ArgumentError, "bleeding-edge feature #{id.inspect} is :behaviour but carries severity_overrides"
  end

  super
end

Instance Attribute Details

#idString

Returns the stable feature id (contract vocabulary).

Returns:

  • (String)

    the stable feature id (contract vocabulary).



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/rigor/bleeding_edge.rb', line 65

Feature = Data.define(:id, :summary, :kind, :severity_overrides) do
  def initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES)
    raise ArgumentError, "kind must be one of #{KINDS.inspect}, got #{kind.inspect}" unless KINDS.include?(kind)

    if kind == :severity && severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :severity but overrides no rule"
    end
    if kind == :behaviour && !severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :behaviour but carries severity_overrides"
    end

    super
  end

  # @return [Boolean]
  def severity?
    kind == :severity
  end

  # @return [Boolean]
  def behaviour?
    kind == :behaviour
  end

  def to_h
    {
      "id" => id,
      "summary" => summary,
      "kind" => kind.to_s,
      "severity_overrides" => severity_overrides.transform_values(&:to_s)
    }
  end
end

#kindSymbol

Returns one of KINDS.

Returns:

  • (Symbol)

    one of KINDS.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/rigor/bleeding_edge.rb', line 65

Feature = Data.define(:id, :summary, :kind, :severity_overrides) do
  def initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES)
    raise ArgumentError, "kind must be one of #{KINDS.inspect}, got #{kind.inspect}" unless KINDS.include?(kind)

    if kind == :severity && severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :severity but overrides no rule"
    end
    if kind == :behaviour && !severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :behaviour but carries severity_overrides"
    end

    super
  end

  # @return [Boolean]
  def severity?
    kind == :severity
  end

  # @return [Boolean]
  def behaviour?
    kind == :behaviour
  end

  def to_h
    {
      "id" => id,
      "summary" => summary,
      "kind" => kind.to_s,
      "severity_overrides" => severity_overrides.transform_values(&:to_s)
    }
  end
end

#severity_overridesHash{String => Symbol}

Returns canonical rule id → the severity this feature imposes. Composed below the user's own severity_overrides: and above the active severity_profile (see Configuration::SeverityProfile.resolve). Empty for a :behaviour feature.

Returns:

  • (Hash{String => Symbol})

    canonical rule id → the severity this feature imposes. Composed below the user's own severity_overrides: and above the active severity_profile (see Configuration::SeverityProfile.resolve). Empty for a :behaviour feature.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/rigor/bleeding_edge.rb', line 65

Feature = Data.define(:id, :summary, :kind, :severity_overrides) do
  def initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES)
    raise ArgumentError, "kind must be one of #{KINDS.inspect}, got #{kind.inspect}" unless KINDS.include?(kind)

    if kind == :severity && severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :severity but overrides no rule"
    end
    if kind == :behaviour && !severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :behaviour but carries severity_overrides"
    end

    super
  end

  # @return [Boolean]
  def severity?
    kind == :severity
  end

  # @return [Boolean]
  def behaviour?
    kind == :behaviour
  end

  def to_h
    {
      "id" => id,
      "summary" => summary,
      "kind" => kind.to_s,
      "severity_overrides" => severity_overrides.transform_values(&:to_s)
    }
  end
end

#summaryString

Returns a one-line description of what it changes. For a :behaviour feature this is the whole explanation — there is no severity diff to read.

Returns:

  • (String)

    a one-line description of what it changes. For a :behaviour feature this is the whole explanation — there is no severity diff to read.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/rigor/bleeding_edge.rb', line 65

Feature = Data.define(:id, :summary, :kind, :severity_overrides) do
  def initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES)
    raise ArgumentError, "kind must be one of #{KINDS.inspect}, got #{kind.inspect}" unless KINDS.include?(kind)

    if kind == :severity && severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :severity but overrides no rule"
    end
    if kind == :behaviour && !severity_overrides.empty?
      raise ArgumentError, "bleeding-edge feature #{id.inspect} is :behaviour but carries severity_overrides"
    end

    super
  end

  # @return [Boolean]
  def severity?
    kind == :severity
  end

  # @return [Boolean]
  def behaviour?
    kind == :behaviour
  end

  def to_h
    {
      "id" => id,
      "summary" => summary,
      "kind" => kind.to_s,
      "severity_overrides" => severity_overrides.transform_values(&:to_s)
    }
  end
end

Instance Method Details

#behaviour?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/rigor/bleeding_edge.rb', line 85

def behaviour?
  kind == :behaviour
end

#severity?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/rigor/bleeding_edge.rb', line 80

def severity?
  kind == :severity
end

#to_hObject



89
90
91
92
93
94
95
96
# File 'lib/rigor/bleeding_edge.rb', line 89

def to_h
  {
    "id" => id,
    "summary" => summary,
    "kind" => kind.to_s,
    "severity_overrides" => severity_overrides.transform_values(&:to_s)
  }
end