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.



119
120
121
# File 'lib/infobar/message.rb', line 119

def initialize(opts)
  @opts = opts.each_with_object({}) { |(k, v), h| h[k.to_s] = v }
end

Instance Attribute Details

#optsObject (readonly)

Returns the value of attribute opts.



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

def opts
  @opts
end

Class Method Details

.directive_default_optionsObject



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

def directive_default_options
  @directive_default_options ||= {}
end

.directivesObject



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_default_options[directive] = opts
  self
end

Instance Method Details

#directive_default_optionsObject



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

def directive_default_options
  self.class.directive_default_options
end

#directivesObject



125
126
127
# File 'lib/infobar/message.rb', line 125

def directives
  self.class.directives
end

#formatObject Also known as: to_s



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

def format
  @opts['format']
end

#opts_for(directive) ⇒ Object



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

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

#to_hashObject



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

def to_hash
  result = @opts.dup
  result[:format] = result.delete('format')
  result
end

#to_strObject



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

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