module YUML

A module to create a DSL for yuml.me

Constants

ESCAPE_CHARACTERS

Public Instance Methods

attach_note(content, color = nil) click to toggle source
# File lib/yuml.rb, line 34
def attach_note(content, color = nil)
  notes << YUML::Note.create(content, color)
end
class(&block) click to toggle source
# File lib/yuml.rb, line 27
def class(&block)
  yuml_class = YUML::Class.new
  block.arity < 1 ? yuml_class.instance_eval(&block) : block.call(yuml_class)
  classes << yuml_class
  yuml_class
end
generate(file: '/tmp/yuml.pdf') { |self| ... } click to toggle source
# File lib/yuml.rb, line 20
def generate(file: '/tmp/yuml.pdf')
  classes.clear
  notes.clear
  yield self
  fetch_uml file
end

Private Instance Methods

classes() click to toggle source
# File lib/yuml.rb, line 40
def classes
  @classes ||= []
end
encodings() click to toggle source
# File lib/yuml.rb, line 67
def encodings
  "#{ESCAPE_CHARACTERS.values.join}[](){}+->|.,=;*^ "
end
extname(filename) click to toggle source
# File lib/yuml.rb, line 62
def extname(filename)
  return '.pdf' unless %w(.pdf .png .jpg .jpeg).include?(File.extname(filename))
  File.extname(filename).sub('.jpg', '.jpeg')
end
fetch_uml(file) click to toggle source
# File lib/yuml.rb, line 56
def fetch_uml(file)
  uri = URI("https://yuml.me/diagram/class/#{yuml}#{extname(file)}")
  response = Net::HTTP.get_response(uri)
  File.write(file, response.body)
end
notes() click to toggle source
# File lib/yuml.rb, line 44
def notes
  @notes ||= []
end
yuml() click to toggle source
# File lib/yuml.rb, line 48
def yuml
  uml = classes.map(&:to_s).join(',')
  relationships = classes.map(&:relationships).compact
  uml << ',' << relationships.join(',') unless relationships.empty?
  uml << ',' << notes.join(',') unless notes.empty?
  URI.encode(uml, encodings)
end