Class: Arrolio::Style::Registry
- Inherits:
-
Object
- Object
- Arrolio::Style::Registry
- Defined in:
- lib/arrolio/style/registry.rb
Instance Attribute Summary collapse
-
#overrides ⇒ Object
readonly
Returns the value of attribute overrides.
Instance Method Summary collapse
- #==(other) ⇒ Object (also: #eql?)
- #[](name) ⇒ Object
- #hash ⇒ Object
-
#initialize(overrides = {}) ⇒ Registry
constructor
A new instance of Registry.
- #key?(name) ⇒ Boolean
- #names ⇒ Object
- #register(name, **opts) ⇒ Object
- #resolve(name, fallback: Definition.new) ⇒ Object
Constructor Details
#initialize(overrides = {}) ⇒ Registry
Returns a new instance of Registry.
10 11 12 13 14 |
# File 'lib/arrolio/style/registry.rb', line 10 def initialize(overrides = {}) @overrides = {} overrides.each { |name, attrs| register(name, **attrs) } freeze end |
Instance Attribute Details
#overrides ⇒ Object (readonly)
Returns the value of attribute overrides.
8 9 10 |
# File 'lib/arrolio/style/registry.rb', line 8 def overrides @overrides end |
Instance Method Details
#==(other) ⇒ Object Also known as: eql?
42 43 44 |
# File 'lib/arrolio/style/registry.rb', line 42 def ==(other) other.is_a?(self.class) && overrides == other.overrides end |
#[](name) ⇒ Object
40 |
# File 'lib/arrolio/style/registry.rb', line 40 def [](name) = @overrides.[](name.to_sym) |
#hash ⇒ Object
48 49 50 |
# File 'lib/arrolio/style/registry.rb', line 48 def hash [self.class, overrides].hash end |
#key?(name) ⇒ Boolean
39 |
# File 'lib/arrolio/style/registry.rb', line 39 def key?(name) = @overrides.key?(name.to_sym) |
#names ⇒ Object
38 |
# File 'lib/arrolio/style/registry.rb', line 38 def names = @overrides.keys |
#register(name, **opts) ⇒ Object
16 17 18 19 |
# File 'lib/arrolio/style/registry.rb', line 16 def register(name, **opts) @overrides[name.to_sym] = opts.transform_keys(&:to_sym) name.to_sym end |
#resolve(name, fallback: Definition.new) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/arrolio/style/registry.rb', line 21 def resolve(name, fallback: Definition.new) key = name.to_sym return fallback unless @overrides.key?(key) chain = [] cursor = key seen = Set.new while cursor && @overrides.key?(cursor) && seen.add?(cursor) chain << @overrides[cursor] parent = @overrides[cursor][:parent] cursor = parent&.to_sym end merged = chain.reverse_each.reduce({}) { |acc, h| acc.merge(h) } merged.delete(:parent) Definition.new(**merged) end |