summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2019-08-21 10:31:01 -0600
committermo khan <mo.khan@gmail.com>2019-08-21 10:31:01 -0600
commit27888daf19c84e646ffdae7a635f38db8bc05cdb (patch)
tree12b2ed19c3fe0ec622f7cce9c2d2c3e51c97b49b
parent170f3bee921b24f9ee12191662afe68aea2e8788 (diff)
Move version classes to Report namespace
-rw-r--r--lib/license/management.rb6
-rw-r--r--lib/license/management/report.rb (renamed from lib/license/management/json_report.rb)15
-rw-r--r--lib/license/management/report/versions/base.rb40
-rw-r--r--lib/license/management/report/versions/v1.rb77
-rw-r--r--lib/license/management/versions/base.rb39
-rw-r--r--lib/license/management/versions/v1.rb75
6 files changed, 128 insertions, 124 deletions
diff --git a/lib/license/management.rb b/lib/license/management.rb
index 2fdb6b5..64fd4e8 100644
--- a/lib/license/management.rb
+++ b/lib/license/management.rb
@@ -6,13 +6,11 @@ require 'license_finder'
require 'license/management/loggable'
require 'license/management/verifiable'
require 'license/management/repository'
-require 'license/management/versions/base'
-require 'license/management/versions/v1'
-require 'license/management/json_report'
+require 'license/management/report'
require 'license/management/version'
# This applies a monkey patch to the JsonReport found in the `license_finder` gem.
-LicenseFinder::JsonReport.prepend(License::Management::JsonReport)
+LicenseFinder::JsonReport.prepend(License::Management::Report)
module License
module Management
diff --git a/lib/license/management/json_report.rb b/lib/license/management/report.rb
index fde30ef..40fa854 100644
--- a/lib/license/management/json_report.rb
+++ b/lib/license/management/report.rb
@@ -1,17 +1,20 @@
# frozen_string_literal: true
+require 'license/management/report/versions/base'
+require 'license/management/report/versions/v1'
+
module License
module Management
- module JsonReport
+ module Report
DEFAULT_VERSION = '1'
VERSIONS = {
- nil => ::License::Management::Versions::V1,
- '' => ::License::Management::Versions::V1,
- '1' => ::License::Management::Versions::V1,
- '1.0' => ::License::Management::Versions::V1
+ nil => Versions::V1,
+ '' => Versions::V1,
+ '1' => Versions::V1,
+ '1.0' => Versions::V1
}.freeze
- # This method overrides the method defined in `License::Management::JsonReport` to
+ # This method overrides the method defined in `LicenseFinder::JsonReport` to
# allow us to generate a custom json report.
def to_s
JSON.pretty_generate(version_for(report_version).to_h) + "\n"
diff --git a/lib/license/management/report/versions/base.rb b/lib/license/management/report/versions/base.rb
new file mode 100644
index 0000000..68bd41f
--- /dev/null
+++ b/lib/license/management/report/versions/base.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+module License
+ module Management
+ module Report
+ module Versions
+ class Base
+ include Loggable
+ include Verifiable
+
+ attr_reader :dependencies, :repository
+
+ def initialize(dependencies)
+ @dependencies = dependencies
+ @repository = License::Management::Repository.new
+ end
+
+ def to_h
+ raise NotImplementedError
+ end
+
+ private
+
+ def paths_from(dependency)
+ return [] unless dependency.respond_to?(:aggregate_paths)
+
+ paths = dependency.aggregate_paths
+ return [] if blank?(paths)
+
+ paths.map { |x| x.gsub(Dir.pwd, '.') }
+ end
+
+ def description_for(dependency)
+ present?(dependency.summary) ? dependency.summary : dependency.description
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/license/management/report/versions/v1.rb b/lib/license/management/report/versions/v1.rb
new file mode 100644
index 0000000..c14864b
--- /dev/null
+++ b/lib/license/management/report/versions/v1.rb
@@ -0,0 +1,77 @@
+# frozen_string_literal: true
+
+module License
+ module Management
+ module Report
+ module Versions
+ class V1 < Base
+ def to_h
+ {
+ licenses: license_summary,
+ dependencies: formatted_dependencies(dependencies)
+ }
+ end
+
+ private
+
+ # when a dependency has multiple licenses, this will join the licenses into a single name
+ # this defect was backported from the html2json version of this script.
+ def license_summary
+ dependencies
+ .map { |dependency| join_license_names(dependency.licenses) }
+ .flatten
+ .group_by { |name| name }
+ .map { |license, items| { count: items.count, name: license } }
+ .sort_by { |hash| [-hash[:count], hash[:name]] }
+ end
+
+ # when a dependency has more than one license
+ # this method chooses one of the urls.
+ # to maintain backwards compatibility this bug has been carried forward.
+ def license_for(dependency)
+ license = { name: join_license_names(dependency.licenses) }
+
+ urls = dependency.licenses.map(&:url).reject { |x| blank?(x) }.uniq.sort
+ log_info("multiple urls detected: #{urls.inspect}") if urls.size > 1
+ url = urls[0] || license_data(dependency.licenses.first)['url']
+
+ license[:url] = url if present?(url)
+ license
+ end
+
+ def join_license_names(licenses)
+ licenses.map { |x| best_name_for(x) }.sort.reverse.join(', ')
+ end
+
+ def map_from_dependency(dependency)
+ result = {
+ license: license_for(dependency),
+ dependency: {
+ name: dependency.name,
+ url: dependency.homepage,
+ description: description_for(dependency),
+ pathes: paths_from(dependency)
+ }
+ }
+ result[:dependency].delete(:url) if blank?(dependency.homepage)
+ result
+ end
+
+ def formatted_dependencies(dependencies)
+ dependencies
+ .sort_by(&:name)
+ .map { |x| map_from_dependency(x) }
+ end
+
+ def best_name_for(license)
+ license_data(license)['name']
+ end
+
+ def license_data(license)
+ repository.item_for(license)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/lib/license/management/versions/base.rb b/lib/license/management/versions/base.rb
deleted file mode 100644
index a087520..0000000
--- a/lib/license/management/versions/base.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-# frozen_string_literal: true
-
-module License
- module Management
- module Versions
- class Base
- include Loggable
- include Verifiable
-
- attr_reader :dependencies, :repository
-
- def initialize(dependencies)
- @dependencies = dependencies
- @repository = License::Management::Repository.new
- end
-
- def to_h
- raise NotImplementedError
- end
-
- private
-
-
- def paths_from(dependency)
- return [] unless dependency.respond_to?(:aggregate_paths)
-
- paths = dependency.aggregate_paths
- return [] if blank?(paths)
-
- paths.map { |x| x.gsub(Dir.pwd, '.') }
- end
-
- def description_for(dependency)
- present?(dependency.summary) ? dependency.summary : dependency.description
- end
- end
- end
- end
-end
diff --git a/lib/license/management/versions/v1.rb b/lib/license/management/versions/v1.rb
deleted file mode 100644
index 1ef81c0..0000000
--- a/lib/license/management/versions/v1.rb
+++ /dev/null
@@ -1,75 +0,0 @@
-# frozen_string_literal: true
-
-module License
- module Management
- module Versions
- class V1 < Base
- def to_h
- {
- licenses: license_summary,
- dependencies: formatted_dependencies(dependencies)
- }
- end
-
- private
-
- # when a dependency has multiple licenses, this will join the licenses into a single name
- # this defect was backported from the html2json version of this script.
- def license_summary
- dependencies
- .map { |dependency| join_license_names(dependency.licenses) }
- .flatten
- .group_by { |name| name }
- .map { |license, items| { count: items.count, name: license } }
- .sort_by { |hash| [-hash[:count], hash[:name]] }
- end
-
- # when a dependency has more than one license
- # this method chooses one of the urls.
- # to maintain backwards compatibility this bug has been carried forward.
- def license_for(dependency)
- license = { name: join_license_names(dependency.licenses) }
-
- urls = dependency.licenses.map(&:url).reject { |x| blank?(x) }.uniq.sort
- log_info("multiple urls detected: #{urls.inspect}") if urls.size > 1
- url = urls[0] || license_data(dependency.licenses.first)['url']
-
- license[:url] = url if present?(url)
- license
- end
-
- def join_license_names(licenses)
- licenses.map { |x| best_name_for(x) }.sort.reverse.join(', ')
- end
-
- def map_from_dependency(dependency)
- result = {
- license: license_for(dependency),
- dependency: {
- name: dependency.name,
- url: dependency.homepage,
- description: description_for(dependency),
- pathes: paths_from(dependency)
- }
- }
- result[:dependency].delete(:url) if blank?(dependency.homepage)
- result
- end
-
- def formatted_dependencies(dependencies)
- dependencies
- .sort_by(&:name)
- .map { |x| map_from_dependency(x) }
- end
-
- def best_name_for(license)
- license_data(license)['name']
- end
-
- def license_data(license)
- repository.item_for(license)
- end
- end
- end
- end
-end