Sha256: 9d55acf6a874fa3c6559cd2a1eb5c590bc47cc5a8bea29fad7928a211c43abf9

Contents?: true

Size: 1.92 KB

Versions: 22

Compression:

Stored size: 1.92 KB

Contents

module Workflow

  def self.doc_parse_first_line(str)
    if str.match(/^([^\n]*)\n\n(.*)/sm)
      str.replace $2
      $1
    else
      ""
    end
  end

  def self.doc_parse_up_to(str, pattern, keep = false)
    pre, _pat, _post = str.partition pattern
    if _pat
      [pre, (keep ? _pat << _post : _post)]
    else
      _post
    end
  end

  def self.doc_parse_chunks(str, pattern)
    parts = str.split(pattern)
    return {} if parts.length < 2
    tasks = Hash[*parts[1..-1].collect{|v| v.strip}]
    tasks.delete_if{|t,d| d.empty?}
    tasks
  end

  def self.parse_workflow_doc(doc)
    title = doc_parse_first_line doc
    description, task_info = doc_parse_up_to doc, /^# Tasks/i
    task_description, tasks = doc_parse_up_to task_info, /^##/, true
    tasks = doc_parse_chunks tasks, /## (.*)/ 
    {:title => title.strip, :description => description.strip, :task_description => task_description.strip, :tasks => tasks}
  end

  def documentation_markdown
    return "" if @libdir.nil?
    file = @libdir['workflow.md'].find
    file = @libdir['README.md'].find unless file.exists?
    if file.exists?
      file.read
    else
      ""
    end
  end

  def load_documentation
    return if @documentation
    @documentation ||= Workflow.parse_workflow_doc documentation_markdown
    @documentation[:tasks].each do |task, description|
      if task.include? "#"
        workflow, task = task.split("#")
        workflow = begin
                     Kernel.const_get workflow
                   rescue
                     next
                   end
      else
        workflow = self
      end

      if workflow.tasks.include? task.to_sym
        workflow.tasks[task.to_sym].description = description
      else
        Log.low "Documentation for #{ task }, but not a #{ workflow.to_s } task" 
      end
    end
  end

  attr_accessor :documentation
  def documentation
    load_documentation if @documentation.nil?
    @documentation 
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
rbbt-util-5.40.5 lib/rbbt/workflow/doc.rb
rbbt-util-5.40.4 lib/rbbt/workflow/doc.rb
rbbt-util-5.40.3 lib/rbbt/workflow/doc.rb
rbbt-util-5.40.0 lib/rbbt/workflow/doc.rb
rbbt-util-5.39.0 lib/rbbt/workflow/doc.rb
rbbt-util-5.38.1 lib/rbbt/workflow/doc.rb
rbbt-util-5.38.0 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.16 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.15 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.14 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.13 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.12 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.11 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.10 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.9 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.8 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.6 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.4 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.3 lib/rbbt/workflow/doc.rb
rbbt-util-5.37.1 lib/rbbt/workflow/doc.rb