Sha256: 681a172d2acae0ed13b6f7ef7af03bbdb063781a5989ce6a1324c36c562901a2

Contents?: true

Size: 1.72 KB

Versions: 22

Compression:

Stored size: 1.72 KB

Contents

module Dradis::Plugins::CSV
  class Exporter < Dradis::Plugins::Export::Base
    def export(args={})
      issues = content_service.all_issues

      if issues.empty?
        return "The project didn't contain any issues"
      else
        # All fields from all Issues in the project
        issue_keys    = issues.map(&:fields).map(&:keys).flatten.uniq

        # All fields from all Evidence in the project
        evidence_keys = issues.map do |issue|
          if issue.evidence.any?
            issue.evidence.map(&:fields).map(&:keys).flatten.uniq
          else
            []
          end
        end.flatten.uniq

        keys = issue_keys + evidence_keys

        issue_row    = []
        evidence_row = []

        # Create the CSV data
        csv_string = ::CSV.generate do |csv|

          # Add the header line with all the field names. Remember note.field returns
          # a hash: {'Title' => 'Foo', 'Description' => 'Bar'}
          csv << keys

          # For each of the notes in our category, we dump the field values.
          # This assumes all notes have the same fields, in the same order
          issues.each do |issue|
            issue_row = issue_keys.map do |key|
              issue.fields.fetch(key, 'n/a')
            end

            # If we've got multiple Evidence, we add one row per Evidence
            if issue.evidence.any?
              issue.evidence.each do |evidence|
                evidence_row = evidence_keys.map do |key|
                  evidence.fields.fetch(key, 'n/a')
                end

                csv << issue_row + evidence_row
              end
            else
              csv << issue_row
            end
          end
        end

        csv_string
      end

    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
dradis-csv-4.4.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-4.3.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-4.2.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-4.1.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-4.0.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.22.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.21.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.20.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.19.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.18.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.17.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.16.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.15.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.14.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.13.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.12.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.11.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.10.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.9.0 lib/dradis/plugins/csv/exporter.rb
dradis-csv-3.8.0 lib/dradis/plugins/csv/exporter.rb