Class: Rigor::BleedingEdge::Feature
- Inherits:
-
Data
- Object
- Data
- Rigor::BleedingEdge::Feature
- 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
-
#id ⇒ String
The stable feature id (contract vocabulary).
-
#kind ⇒ Symbol
One of KINDS.
-
#severity_overrides ⇒ Hash{String => Symbol}
Canonical rule id → the severity this feature imposes.
-
#summary ⇒ String
A one-line description of what it changes.
Instance Method Summary collapse
- #behaviour? ⇒ Boolean
-
#initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES) ⇒ Feature
constructor
A new instance of Feature.
- #severity? ⇒ Boolean
- #to_h ⇒ Object
Constructor Details
#initialize(id:, summary:, kind:, severity_overrides: NO_SEVERITY_OVERRIDES) ⇒ Feature
Returns a new instance of Feature.
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
#id ⇒ String
Returns 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 |
#kind ⇒ Symbol
Returns 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_overrides ⇒ Hash{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.
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 |
#summary ⇒ String
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.
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
85 86 87 |
# File 'lib/rigor/bleeding_edge.rb', line 85 def behaviour? kind == :behaviour end |
#severity? ⇒ Boolean
80 81 82 |
# File 'lib/rigor/bleeding_edge.rb', line 80 def severity? kind == :severity end |
#to_h ⇒ Object
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 |