class Dradis::Plugins::Projects::Export::V1::Template

Constants

VERSION

Protected Instance Methods

build_activities_for(builder, trackable) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 7
def build_activities_for(builder, trackable)
  builder.activities do |activities_builder|
    trackable.activities.each do |activity|
      activities_builder.activity do |activity_builder|
        activity_builder.action(activity.action)
        activity_builder.user_email(user_email_for_activity(activity))
        activity_builder.created_at(activity.created_at.to_i)
      end
    end
  end
end
build_categories(builder) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 19
def build_categories(builder)
  categories = []
  categories << Category.issue if @issues.any?
  categories += @nodes.map do |node|
    node.notes.map { |note| note.category }.uniq
  end.flatten.uniq

  builder.categories do |categories_builder|
    categories.each do |category|
      categories_builder.category do |category_builder|
        category_builder.id(category.id)
        category_builder.name(category.name)
      end
    end
  end
end
build_comments_for(builder, commentable) click to toggle source

No-op here, overwritten in V2

# File lib/dradis/plugins/projects/export/v1/template.rb, line 37
def build_comments_for(builder, commentable); end
build_evidence_for_node(builder, node) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 39
def build_evidence_for_node(builder, node)
  builder.evidence do |evidences_builder|
    node.evidence.each do |evidence|
      evidences_builder.evidence do |evidence_builder|
        evidence_builder.id(evidence.id)
        evidence_builder.author(evidence.author)
        evidence_builder.tag!('issue-id', evidence.issue_id)
        evidence_builder.content do
          evidence_builder.cdata!(evidence.content)
        end
        build_activities_for(evidence_builder, evidence)
        build_comments_for(evidence_builder, evidence)
      end
    end
  end
end
build_issues(builder) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 56
def build_issues(builder)
  @issues = Issue.where(node_id: project.issue_library).includes(:activities)

  builder.issues do |issues_builder|
    @issues.each do |issue|
      issues_builder.issue do |issue_builder|
        issue_builder.id(issue.id)
        issue_builder.author(issue.author)
        issue_builder.text do
          issue_builder.cdata!(issue.text)
        end
        build_activities_for(issue_builder, issue)
        build_comments_for(issue_builder, issue)
      end
    end
  end
end
build_methodologies(builder) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 74
def build_methodologies(builder)
  methodologies = project.methodology_library.notes
  builder.methodologies do |methodologies_builder|
    methodologies.each do |methodology|
      methodologies_builder.methodology(version: VERSION) do |methodology_builder|
        methodology_builder.text do
          methodology_builder.cdata!(methodology.text)
        end
      end
    end
  end
end
build_nodes(builder) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 87
def build_nodes(builder)
  @nodes = project.nodes.includes(:activities, :evidence, :notes, evidence: [:activities], notes: [:activities, :category]).all.reject do |node|
    [Node::Types::METHODOLOGY,
      Node::Types::ISSUELIB].include?(node.type_id)
  end

  builder.nodes do |nodes_builder|
    @nodes.each do |node|
      nodes_builder.node do |node_builder|
        node_builder.id(node.id)
        node_builder.label(node.label)
        node_builder.tag!('parent-id', node.parent_id)
        node_builder.position(node.position)
        node_builder.properties do
          node_builder.cdata!(node.raw_properties)
        end
        node_builder.tag!('type-id', node.type_id)
        # Notes
        build_notes_for_node(node_builder, node)
        # Evidence
        build_evidence_for_node(node_builder, node)
        build_activities_for(node_builder, node)
      end
    end
  end
end
build_notes_for_node(builder, node) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 114
def build_notes_for_node(builder, node)
  builder.notes do |notes_builder|
    node.notes.each do |note|
      notes_builder.note do |note_builder|
        note_builder.id(note.id)
        note_builder.author(note.author)
        note_builder.tag!('category-id', note.category_id)
        note_builder.text do
          note_builder.cdata!(note.text)
        end
        build_activities_for(note_builder, note)
        build_comments_for(note_builder, note)
      end
    end
  end
end
build_report_content(builder) click to toggle source

No-op here, overwritten in PRO

# File lib/dradis/plugins/projects/export/v1/template.rb, line 132
def build_report_content(builder); end
build_tags(builder) click to toggle source
# File lib/dradis/plugins/projects/export/v1/template.rb, line 134
def build_tags(builder)
  tags = project.tags
  builder.tags do |tags_builder|
    tags.each do |tag|
      tags_builder.tag do |tag_builder|
        tag_builder.id(tag.id)
        tag_builder.name(tag.name)
        tag_builder.taggings do |taggings_builder|
          tag.taggings.each do |tagging|
            taggings_builder.tagging do |tagging_builder|
              tagging_builder.tag!('taggable-id', tagging.taggable_id)
              tagging_builder.tag!('taggable-type', tagging.taggable_type)
            end
          end
        end
      end
    end
  end
end
user_email_for_activity(activity) click to toggle source

Cache user emails so we don't have to make an extra SQL request for every activity

# File lib/dradis/plugins/projects/export/v1/template.rb, line 157
def user_email_for_activity(activity)
  return activity.user if activity.user.is_a?(String)

  @user_emails ||= begin
    User.select([:id, :email]).all.each_with_object({}) do |user, hash|
      hash[user.id] = user.email
    end
  end
  @user_emails[activity.user_id]
end
version() click to toggle source

Use the class VERSION constant, but allow for subclasses to overwrite it.

See:

http://stackoverflow.com/questions/3174563/how-to-use-an-overridden-constant-in-an-inheritanced-class
# File lib/dradis/plugins/projects/export/v1/template.rb, line 172
def version
  self.class::VERSION
end