Class: Infobar::Message

Inherits:
Object show all
Extended by:
Tins::Delegate
Defined in:
lib/infobar/message.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Message

Returns a new instance of Message.



122
123
124
125
126
# File 'lib/infobar/message.rb', line 122

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

#formatObject (readonly) Also known as: to_s

Returns the value of attribute format.



145
146
147
# File 'lib/infobar/message.rb', line 145

def format
  @format
end

#optsObject (readonly)

Returns the value of attribute opts.



128
129
130
# File 'lib/infobar/message.rb', line 128

def opts
  @opts
end

Class Method Details

.directive_default_optionsObject



21
22
23
# File 'lib/infobar/message.rb', line 21

def directive_default_options
  @directive_default_options ||= {}
end

.directivesObject



17
18
19
# File 'lib/infobar/message.rb', line 17

def directives
  @directives ||= {}
end

.register(directive, **opts, &block) ⇒ Object



9
10
11
12
13
14
15
# File 'lib/infobar/message.rb', line 9

def register(directive, **opts, &block)
  directives.key?(directive) and
    warn "Overwriting old directive #{directive}."
  directives[directive]                = block
  directive_default_options[directive] = opts
  self
end

Instance Method Details

#opts_for(directive) ⇒ Object



134
135
136
# File 'lib/infobar/message.rb', line 134

def opts_for(directive)
  @opts.fetch(directive, directive_default_options[directive])
end

#to_hashObject



149
150
151
152
153
# File 'lib/infobar/message.rb', line 149

def to_hash
  {
    format: format,
  }.merge(@opts)
end

#to_strObject



138
139
140
141
142
143
# File 'lib/infobar/message.rb', line 138

def to_str
  keys = directives.keys.sort_by { |k| -k.size }
  @format.gsub(/(?<!%)(#{keys * ?|})/) do
    directives[$1].call($1, opts_for($1))
  end
end