class Object

Public Instance Methods

clean(string) click to toggle source

remove spaces at the beginning of string replace extra spaces and special chars with a single space

# File lib/resme/renderer/renderer.rb, line 8
def clean string
  string.gsub(/^[\t\n ]+/, "").gsub(/[\t\n ]+/, " ")
end
day(string) click to toggle source
# File lib/resme/renderer/renderer.rb, line 116
def day string
  string.to_s[8..9]
end
full_name(data) click to toggle source
# File lib/resme/renderer/renderer.rb, line 12
def full_name data
  [data.basics["first_name"], data.basics["middle_name"], data.basics["last_name"]].join(" ")
end
has_day(input) click to toggle source
# File lib/resme/renderer/renderer.rb, line 128
def has_day input
  if input.class == Date
    true
  else
    input.size == 10
  end
end
has_month(input) click to toggle source
# File lib/resme/renderer/renderer.rb, line 120
def has_month input
  if input.class == Date
    true
  else
    input.size >= 7
  end
end
itemize(entry, header = ["role", "who", "address"]) click to toggle source

make an entry into an item of a list

  • first argument, entry, is a hash containing the symbols specified in header and the following fields: summary and then from, till, or date

  • second argument, header, is an array of symbols, whose values, comma-separated will generate the header line

The output is along the lines of:

  • value of key1, value of key2 period reflowed summary

# File lib/resme/renderer/renderer.rb, line 87
def itemize entry, header = ["role", "who", "address"]
<<EOS
- #{clean header.map { |x| entry[x] }.join(", ")}
  #{period entry}
#{reflow_to_string entry["summary"], 72, "  "}
EOS
end
month(string) click to toggle source
# File lib/resme/renderer/renderer.rb, line 112
def month string
  string.to_s[5..6]
end
period(entry) click to toggle source

manage dates of an entry flexibly supporting the following formats:

  • from - till (with `from` or `till` possibly partial or empty)

  • date (possibly partial)

abstract dates at the year level, taking care of periods if from and till are in two different years

# File lib/resme/renderer/renderer.rb, line 61
def period entry
  if entry["date"] then
    "#{year entry.date}"
  else
    from_year = entry["from"] ? year(entry.from.to_s) : nil
    till_year = entry["till"] ? year(entry.till.to_s) : nil

    if from_year and till_year and from_year == till_year then
      from_year
    else
      "#{from_year} -- #{till_year ? till_year : "today"}"
    end
  end
end
propertify(item, indentation="") click to toggle source

generate a list of org-mode properties from item and exclude summary from the list

# File lib/resme/renderer/renderer.rb, line 96
def propertify item, indentation=""
  output = ":PROPERTIES:\n"
  item.each do |k, v|
    if not ["summary", "details"].include? k
      output << ":#{k.upcase}: #{v}\n"
    end
  end
  output << ":END:"
  output.gsub!(/^/, indentation)
end
reflow_to_array(string, chars) click to toggle source

break a string into substrings of length chars breaking at spaces and newlines

  • `string` string to reflow

  • `chars` number of characters to break the string at

  • returns an array of strings of length < chars (with exceptions for special cases)

special cases: if one line is longer than chars characters, then break at the first space after chars

# File lib/resme/renderer/renderer.rb, line 27
def reflow_to_array string, chars
  if string.length < chars
    return [clean(string)]
  else
    chars.downto(0).each do |index|
      if string[index] == " " or string[index] == "\n" or string[index] == "\t"
        return [clean(string[0..index-1])] + reflow_to_array(string[index+1..-1], chars)
      end
    end
    chars.upto(string.length).each do |index|
      if string[index] == " " or string[index] == "\n" or string[index] == "\t"
        return [clean(string[0..index-1])] + reflow_to_array(string[index+1..-1], chars)
      end
    end
    return [clean(string)]
  end
end
reflow_to_string(string, chars, indentation = "") click to toggle source
# File lib/resme/renderer/renderer.rb, line 45
def reflow_to_string string, chars, indentation = ""
  array = reflow_to_array string, chars
  output = ""
  array.each do |line|
    output << indentation + line + "\n"
  end
  output
end
year(string) click to toggle source

Utility function for managing dates (2015-01-01) and partial dates (2015-05)

# File lib/resme/renderer/renderer.rb, line 108
def year string
  string.to_s[0..3]
end