lib/diagrams/resources.rb in diagrams-rb-0.0.3 vs lib/diagrams/resources.rb in diagrams-rb-0.1.0
- old
+ new
@@ -14,10 +14,11 @@
image_name_with_extension = path_parts.pop
image_name_without_extension = File.basename(image_name_with_extension, '.png')
current_module = self
path_parts.each do |part|
+ # Create or get the submodule dynamically
submodule = current_module.const_get(part.capitalize) rescue nil
unless submodule
submodule = Module.new
current_module.const_set(part.capitalize, submodule)
end
@@ -26,9 +27,96 @@
current_module.define_singleton_method(image_name_without_extension.gsub('-', '_')) do
file_path
end
end
+ end
+
+ def build_resources_md(path) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
+ resource_dir = "#{Dir.pwd}/#{path}"
+ FileUtils.mkdir_p(resource_dir) unless Dir.exist?(resource_dir)
+
+ @previous_title = ''.dup
+ module_resources.each do |mod, methods|
+ ns_name, title_idx = icon_namespace(mod)
+ next if title_idx.nil?
+
+ title = ns_name[0, title_idx]
+ File.open("#{path}/#{title}.md", 'a') do |file|
+ write_header(file, title)
+ methods.each do |method_sym|
+ file.write(
+ "|\!\[\]\(#{icon_path(mod, method_sym)}\)#{icon_fmt}|`#{ns_name}.#{method_sym}`#{method_fmt}|\n"
+ )
+ end
+ end
+ end
+ end
+
+ def clean_resources_md(path)
+ resource_dir = "#{Dir.pwd}/#{path}"
+ files_to_delete(Dir.glob(File.join(resource_dir, '**', '*.md'))).each { |f| FileUtils.rm(f) }
+ end
+
+ def files_to_delete(files)
+ files.select { |file| File.basename(file).match?(/^[A-Z]/) }
+ end
+
+ private
+
+ def icon_namespace(mod)
+ mod_sub = mod_substitute(mod)
+ [mod_sub, title_index(mod_sub)]
+ end
+
+ def title_index(mod_sub)
+ mod_sub.index(':') || mod_sub.index('.')
+ end
+
+ def mod_substitute(mod)
+ mod.to_s.gsub('Diagrams::Resources::', '')
+ end
+
+ def write_header(file, title) # rubocop:disable Metrics/MethodLength
+ return if title == @previous_title
+
+ file.write("---\n")
+ file.write("title: #{title}\n")
+ file.write("parent: Sources\n")
+ file.write("layout: page\n")
+ file.write("nav_enabled: true\n")
+ file.write("---\n")
+ file.write("\n")
+ file.write("| Icon | Source |\n")
+ file.write("|:-----|:-----|\n")
+ @previous_title = title
+ end
+
+ def icon_path(mod, method_sym)
+ mod.__send__(method_sym)
+ end
+
+ def icon_fmt
+ '{: width="22" }'
+ end
+
+ def method_fmt
+ '{: .language-ruby .highlighter-rouge .highlight style="font-size: 14px"}'
+ end
+
+ def module_resources(namespace = self, collected_methods = {})
+ namespace.constants.each do |const_name|
+ const_value = namespace.const_get(const_name)
+
+ next unless const_value.is_a?(Module)
+
+ class_methods = const_value.singleton_methods
+ collected_methods[const_value] = class_methods unless class_methods.empty?
+
+ module_resources(const_value, collected_methods)
+ end
+
+ collected_methods
end
end
end
end