lib/frappuccino.rb in frappuccino-0.0.1 vs lib/frappuccino.rb in frappuccino-0.2.0

- old
+ new

@@ -1,140 +1,3 @@ -require "erb" -require "fileutils" -class Frappuccino - attr_writer :files, :documentations, :doctree, :title - def initialize title, files - if File.directory? files - docfiles = [] - Dir.glob("#{files}/*").each do |file| - docfiles.push(file) unless File.directory? file - end - files = docfiles - end - @files = files - @documentations = [] - @doctree = {:namespaces => {}} - @title = title - iterate_files - documentations_to_doctree - # sort alphabetically - @doctree[:namespaces] = @doctree[:namespaces].sort_by {|k,v| k} - generate_html - end - - def iterate_files - for file in @files - File.open(file) do |opened_file| - puts "* Parsing documentation from #{file}" - collect_documentation opened_file - end - end - end - - # parses documentation bodies - def collect_documentation opened_file - doc_start = false - current_documentation = [] - opened_file.each_line do |line| - # documentation starts here - if line.include?("###") and !doc_start - doc_start = true - # documentation ends here - elsif line.include?("###") and doc_start - @documentations.push current_documentation - current_documentation = [] - doc_start = false - # in the middle of documentation - elsif doc_start - current_documentation.push line - end - end - end - - def documentations_to_doctree - @documentations.each do |docbody| - doctree_format docbody - end - end - - # transforms array of strings to doctree hash - def doctree_format docbody - doctree = {} - value_regexp = /^.*:\s(.*)/ - namespace_arr = [] - namespace_tree = {} - function_name = nil - object_name = nil - description = "" - rest_is_description = false - - docbody.each do |line| - if line.match(/^\s*function/) - function_name = line.match(value_regexp)[1] - elsif line.match(/^\s*object/) - object_name = line.match(value_regexp)[1] - elsif line.match(/^\s*description/) - rest_is_description = true - elsif line.match(/^\s*namespace/) - namespace_arr = line.match(value_regexp)[1].split(".") - elsif rest_is_description - description += line - end - end - - full_namespace = namespace_arr.join(".") - - - if !function_name.nil? - docdata = {:full_namespace => full_namespace, :functions => [{:function_name => function_name, :description => description}]} - elsif !object_name.nil? - docdata = {:full_namespace => full_namespace, :objects => [{:object_name => object_name, :description => description}]} - else - if rest_is_description - docdata = {:full_namespace => full_namespace, :description => description} - else - docdata = {:full_namespace => full_namespace} - end - end - - namespace_is_added = false - @doctree[:namespaces].each do |key, value| - namespace_is_added = true if key == full_namespace - end - - if namespace_is_added - @doctree[:namespaces][full_namespace] = deep_safe_merge(@doctree[:namespaces][full_namespace], docdata) - else - @doctree[:namespaces][full_namespace] = docdata - end - - end - - - def generate_html - template = ERB.new File.new("#{File.dirname(__FILE__)}/../template/index.erb").read - rendered_template = template.result(binding) - FileUtils.mkdir "docs" unless File.directory? "docs" - File.open("docs/index.html", "w") do |f| - f.write rendered_template - end - FileUtils.cp("#{File.dirname(__FILE__)}/../template/bg.png", "docs/bg.png") - puts "* Documentation file generated (docs/index.html)" - end - - # helpers: - - def deep_safe_merge(source_hash, new_hash) - source_hash.merge(new_hash) do |key, old, new| - if new.respond_to?(:blank) && new.blank? - old - elsif (old.kind_of?(Hash) and new.kind_of?(Hash)) - deep_merge(old, new) - elsif (old.kind_of?(Array) and new.kind_of?(Array)) - old.concat(new).uniq - else - new - end - end - end - -end \ No newline at end of file +require "frappuccino/version" +require "frappuccino/stream" +require "frappuccino/property"