Class: Infobar::Message
- Extended by:
- Tins::Delegate
- Defined in:
- lib/infobar/message.rb
Instance Attribute Summary collapse
-
#format ⇒ Object
(also: #to_s)
readonly
Returns the value of attribute format.
-
#opts ⇒ Object
readonly
Returns the value of attribute opts.
Class Method Summary collapse
- .directive_default_options ⇒ Object
- .directives ⇒ Object
- .register(directive, **opts, &block) ⇒ Object
Instance Method Summary collapse
-
#initialize(opts = {}) ⇒ Message
constructor
A new instance of Message.
- #opts_for(directive) ⇒ Object
- #to_hash ⇒ Object
- #to_str ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ Message
Returns a new instance of Message.
119 120 121 122 123 |
# File 'lib/infobar/message.rb', line 119 def initialize(opts = {}) @format = opts.delete(:format) or raise ArgumentError, 'format option required' @opts = opts.each_with_object({}) { |(k, v), h| h[k.to_s] = v } end |
Instance Attribute Details
#format ⇒ Object (readonly) Also known as: to_s
Returns the value of attribute format.
142 143 144 |
# File 'lib/infobar/message.rb', line 142 def format @format end |
#opts ⇒ Object (readonly)
Returns the value of attribute opts.
125 126 127 |
# File 'lib/infobar/message.rb', line 125 def opts @opts end |
Class Method Details
.directive_default_options ⇒ Object
22 23 24 |
# File 'lib/infobar/message.rb', line 22 def @directive_default_options ||= {} end |
.directives ⇒ Object
18 19 20 |
# File 'lib/infobar/message.rb', line 18 def directives @directives ||= {} end |
.register(directive, **opts, &block) ⇒ Object
10 11 12 13 14 15 16 |
# File 'lib/infobar/message.rb', line 10 def register(directive, **opts, &block) directives.key?(directive) and warn "Overwriting old directive #{directive}." directives[directive] = block [directive] = opts self end |
Instance Method Details
#opts_for(directive) ⇒ Object
131 132 133 |
# File 'lib/infobar/message.rb', line 131 def opts_for(directive) @opts.fetch(directive, [directive]) end |
#to_hash ⇒ Object
146 147 148 149 150 |
# File 'lib/infobar/message.rb', line 146 def to_hash { format: format, }.merge(@opts) end |
#to_str ⇒ Object
135 136 137 138 139 140 |
# File 'lib/infobar/message.rb', line 135 def to_str keys = directives.keys.sort_by { |k| -k.size } @format.gsub(/(?<!%)(#{keys * ?|})/) do directives[$1].call($1, opts_for($1)) end end |