Class: XamplGenerator::YUMLOut
- Inherits:
-
Object
- Object
- XamplGenerator::YUMLOut
- Defined in:
- lib/xamplr/yuml-out.rb
Instance Method Summary collapse
- #devise_filename(filename) ⇒ Object
- #generate_class_nodes(element, include_mixins) ⇒ Object
- #generate_edges(element, include_mixins) ⇒ Object
- #ignore_package(package) ⇒ Object
-
#initialize(elements_map) ⇒ YUMLOut
constructor
A new instance of YUMLOut.
- #new_statement ⇒ Object
- #write_entity_node(class_name, kind) ⇒ Object
- #write_entity_ref_edge(class_node, external_node) ⇒ Object
- #write_internal_node(class_name, kind) ⇒ Object
- #write_internal_ref_edge(class_node, internal_node) ⇒ Object
- #write_mixin_node(class_name) ⇒ Object
- #write_mixin_ref_edge(class_node, mixin_node) ⇒ Object
- #write_yuml(base_filename, excluded_packages = [ ], included_packages = nil, include_mixins = false) ⇒ Object
Constructor Details
#initialize(elements_map) ⇒ YUMLOut
Returns a new instance of YUMLOut.
8 9 10 |
# File 'lib/xamplr/yuml-out.rb', line 8 def initialize(elements_map) @elements_map = elements_map end |
Instance Method Details
#devise_filename(filename) ⇒ Object
12 13 14 15 16 17 |
# File 'lib/xamplr/yuml-out.rb', line 12 def devise_filename(filename) bn = File.basename(filename) ext = File.extname(bn) bn = bn[0..(bn.size - ext.size - 1)] fn = "#{bn}.yuml" end |
#generate_class_nodes(element, include_mixins) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/xamplr/yuml-out.rb', line 19 def generate_class_nodes(element, include_mixins) return if ignore_package(element.package) class_name = "#{ element.package }::#{ element.class_name }" mixin_name = "#{ element.package }::#{ element.class_name }" @class_by_nstag[element.nstag] = element @class_names_by_nstag[element.nstag] = class_name if element.persisted then write_entity_node(class_name, element.kind) else write_internal_node(class_name, element.kind) end if include_mixins then write_mixin_node(class_name) end end |
#generate_edges(element, include_mixins) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/xamplr/yuml-out.rb', line 39 def generate_edges(element, include_mixins) return if ignore_package(element.package) element_name = @class_names_by_nstag[ element.nstag ] element.child_element_child.each do | celement | next if ignore_package(celement.package) celement_name = @class_names_by_nstag[ celement.name ] referenced_element = @class_by_nstag[ celement.name ] if referenced_element.persisted then write_entity_ref_edge(element_name, celement_name) else write_internal_ref_edge(element_name, celement_name) end if include_mixins then write_mixin_ref_edge(element_name, celement_name) end end end |
#ignore_package(package) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/xamplr/yuml-out.rb', line 61 def ignore_package(package) return true if @excluded_packages.member?(package) return false if @included_packages.nil? return true unless @included_packages.member?(package) return false end |
#new_statement ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/xamplr/yuml-out.rb', line 98 def new_statement if @initialise_output then @initialise_output = false else @out << ",\n" end end |
#write_entity_node(class_name, kind) ⇒ Object
106 107 108 109 |
# File 'lib/xamplr/yuml-out.rb', line 106 def write_entity_node(class_name, kind) new_statement @out << "[#{ class_name }{bg:red}]" end |
#write_entity_ref_edge(class_node, external_node) ⇒ Object
121 122 123 124 |
# File 'lib/xamplr/yuml-out.rb', line 121 def write_entity_ref_edge(class_node, external_node) new_statement @out << "[#{ class_node }]->[#{ external_node }]" end |
#write_internal_node(class_name, kind) ⇒ Object
111 112 113 114 |
# File 'lib/xamplr/yuml-out.rb', line 111 def write_internal_node(class_name, kind) new_statement @out << "[#{ class_name }{bg:blue}]" end |
#write_internal_ref_edge(class_node, internal_node) ⇒ Object
126 127 128 129 |
# File 'lib/xamplr/yuml-out.rb', line 126 def write_internal_ref_edge(class_node, internal_node) new_statement @out << "[#{ class_node }]->[#{ internal_node }]" end |
#write_mixin_node(class_name) ⇒ Object
116 117 118 119 |
# File 'lib/xamplr/yuml-out.rb', line 116 def write_mixin_node(class_name) new_statement @out << "[#{ class_name }Mixin]" end |
#write_mixin_ref_edge(class_node, mixin_node) ⇒ Object
131 132 133 134 |
# File 'lib/xamplr/yuml-out.rb', line 131 def write_mixin_ref_edge(class_node, mixin_node) new_statement @out << "[#{ mixin_node }Mixin]^[#{ class_node }]" end |
#write_yuml(base_filename, excluded_packages = [ ], included_packages = nil, include_mixins = false) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/xamplr/yuml-out.rb', line 68 def write_yuml(base_filename, excluded_packages=[ ], included_packages=nil, include_mixins=false) filename = devise_filename(base_filename) @excluded_packages = Set.new(excluded_packages) @included_packages = included_packages ? Set.new(included_packages) : nil @class_names_by_nstag = {} # NOTE -- this is used by yuml!! @class_by_nstag = {} # NOTE -- this is used by yuml!! @initialise_output = true File.open(filename, "w") do | out | @out = out @elements_map.each_value do |elements| elements.element_child.each do |element| generate_class_nodes(element, include_mixins) end end @elements_map.each_value do |elements| elements.element_child.each do |element| generate_edges(element, include_mixins) end end end return nil end |