From 5a1f73515c83cbf8ce17275c4c9d1af43d0db772 Mon Sep 17 00:00:00 2001 From: Vikram Yadav Date: Mon, 12 Nov 2018 17:03:24 -0500 Subject: [PATCH] [Added] Add support for JSON reports [#161595251] Signed-off-by: Parv Mital --- lib/license_finder/cli/main.rb | 3 +- lib/license_finder/report.rb | 1 + lib/license_finder/reports/json_report.rb | 28 ++++++++++++++++++ .../reports/json_report_spec.rb | 29 +++++++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 lib/license_finder/reports/json_report.rb create mode 100644 spec/lib/license_finder/reports/json_report_spec.rb diff --git a/lib/license_finder/cli/main.rb b/lib/license_finder/cli/main.rb index ee1eed2cd..6f64723a1 100644 --- a/lib/license_finder/cli/main.rb +++ b/lib/license_finder/cli/main.rb @@ -17,7 +17,8 @@ class Main < Base 'html' => HtmlReport, 'markdown' => MarkdownReport, 'csv' => CsvReport, - 'xml' => XmlReport + 'xml' => XmlReport, + 'json' => JsonReport }.freeze class_option :go_full_version, desc: 'Whether dependency version should include full version. Only meaningful if used with a Go project. Defaults to false.' diff --git a/lib/license_finder/report.rb b/lib/license_finder/report.rb index bd46e43f6..079a430a7 100644 --- a/lib/license_finder/report.rb +++ b/lib/license_finder/report.rb @@ -29,3 +29,4 @@ def sorted_dependencies require 'license_finder/reports/html_report' require 'license_finder/reports/markdown_report' require 'license_finder/reports/xml_report' +require 'license_finder/reports/json_report' diff --git a/lib/license_finder/reports/json_report.rb b/lib/license_finder/reports/json_report.rb new file mode 100644 index 000000000..7c7cdb615 --- /dev/null +++ b/lib/license_finder/reports/json_report.rb @@ -0,0 +1,28 @@ +require 'csv' + +module LicenseFinder + class JsonReport < CsvReport + def initialize(dependencies, options) + super(dependencies, options) + end + + def to_s + {dependencies: build_deps}.to_json + end + + private + + def build_deps + sorted_dependencies.map do |dep| + @columns.inject({}) do |memo, column| + memo[column] = send("format_#{column}", dep) + memo + end + end + end + + def format_licenses(dep) + dep.missing? ? [] : dep.licenses.map(&:name) + end + end +end diff --git a/spec/lib/license_finder/reports/json_report_spec.rb b/spec/lib/license_finder/reports/json_report_spec.rb new file mode 100644 index 000000000..5c1fe6f89 --- /dev/null +++ b/spec/lib/license_finder/reports/json_report_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'json' +require 'spec_helper' + +module LicenseFinder + describe JsonReport do + it 'understands many columns' do + dep = Package.new('gem_a', '1.0', authors: 'the authors', + description: 'A description', summary: 'A summary', + homepage: 'http://homepage.example.com') + dep.decide_on_license(License.find_by_name('MIT')) + dep.decide_on_license(License.find_by_name('GPL')) + dep.whitelisted! + subject = described_class.new([dep], columns: %w[name version authors licenses approved summary description homepage]) + expected = { + dependencies: + [ + { + name: 'gem_a', version: '1.0', authors: 'the authors', licenses: ['MIT','GPL'], + approved: 'Approved', summary: 'A summary', description: 'A description', homepage: 'http://homepage.example.com' + } + ] + }.to_json + + expect(subject.to_s).to eq(expected) + end + end +end \ No newline at end of file