module Psychgus::Stylables::CapStylable

(see Stylers::CapStyler)

Attributes

delim[R]
each_word[RW]
new_delim[RW]

Public Class Methods

new(each_word: true,new_delim: nil,delim: /[\s_\-]/,**kargs) click to toggle source

@param each_word [true,false] whether to capitalize each word separated by delim @param new_delim [nil,String] the replacement for each delim if not nil @param delim [String,Regexp] the delimiter to split on @param kargs [Hash] capture extra keyword args, so no error for undefined args

# File lib/psychgus/stylables.rb, line 74
def initialize(each_word: true,new_delim: nil,delim: /[\s_\-]/,**kargs)
  delim = Regexp.quote(delim.to_s) unless delim.is_a?(Regexp)

  @delim = Regexp.new("(#{delim})")
  @each_word = each_word
  @new_delim = new_delim
end

Public Instance Methods

cap_word(word) click to toggle source

Capitalize an individual word (not words).

This method can safely be overridden with a new implementation.

@param word [nil,String] the word to capitalize

@return [String] the capitalized word

# File lib/psychgus/stylables.rb, line 89
def cap_word(word)
  return word if word.nil? || word.empty?

  # Already capitalized, good for all-capitalized words, like 'BBQ'
  return word if word[0] == word[0].upcase

  return word.capitalize
end
style_scalar(sniffer,node) click to toggle source

Capitalize node.value.

@see cap_word @see Styler#style_scalar

# File lib/psychgus/stylables.rb, line 102
def style_scalar(sniffer,node)
  if !@each_word || node.value.nil? || node.value.empty?
    node.value = cap_word(node.value)
    return
  end

  is_delim = false

  node.value = node.value.split(@delim).map do |v|
    if is_delim
      v = @new_delim unless @new_delim.nil?
    else
      v = cap_word(v)
    end

    is_delim = !is_delim
    v
  end.join
end