summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2019-08-21 14:05:52 -0600
committermo khan <mo.khan@gmail.com>2019-08-21 14:05:52 -0600
commit47d34c5b04ccb0018329cb35cb587911510d7f3e (patch)
treed04a37b98627db467fb2e54787847f55ff2ffd3d
parent450d9b983df6c616f74759c59a7e1ae1098a2dff (diff)
collapse versions namespace
-rw-r--r--lib/license/management/report.rb12
-rw-r--r--lib/license/management/report/base.rb38
-rw-r--r--lib/license/management/report/v1.rb84
-rw-r--r--lib/license/management/report/versions/base.rb40
-rw-r--r--lib/license/management/report/versions/v1.rb86
5 files changed, 128 insertions, 132 deletions
diff --git a/lib/license/management/report.rb b/lib/license/management/report.rb
index 40fa854..5ac41bb 100644
--- a/lib/license/management/report.rb
+++ b/lib/license/management/report.rb
@@ -1,17 +1,17 @@
# frozen_string_literal: true
-require 'license/management/report/versions/base'
-require 'license/management/report/versions/v1'
+require 'license/management/report/base'
+require 'license/management/report/v1'
module License
module Management
module Report
DEFAULT_VERSION = '1'
VERSIONS = {
- nil => Versions::V1,
- '' => Versions::V1,
- '1' => Versions::V1,
- '1.0' => Versions::V1
+ nil => V1,
+ '' => V1,
+ '1' => V1,
+ '1.0' => V1
}.freeze
# This method overrides the method defined in `LicenseFinder::JsonReport` to
diff --git a/lib/license/management/report/base.rb b/lib/license/management/report/base.rb
new file mode 100644
index 0000000..ab9b6a1
--- /dev/null
+++ b/lib/license/management/report/base.rb
@@ -0,0 +1,38 @@
+# frozen_string_literal: true
+
+module License
+ module Management
+ module Report
+ 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/report/v1.rb b/lib/license/management/report/v1.rb
new file mode 100644
index 0000000..5882f72
--- /dev/null
+++ b/lib/license/management/report/v1.rb
@@ -0,0 +1,84 @@
+# frozen_string_literal: true
+
+module License
+ module Management
+ module Report
+ 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)
+ return repository.item_for(license) if canonicalize?
+
+ {
+ 'name' => license.name.split(/[\r\n]+/)[0],
+ 'url' => license.url
+ }
+ end
+
+ def canonicalize?
+ ENV.fetch('LM_V1_CANONICALIZE', 'false') == 'true'
+ end
+ end
+ end
+ end
+end
diff --git a/lib/license/management/report/versions/base.rb b/lib/license/management/report/versions/base.rb
deleted file mode 100644
index 68bd41f..0000000
--- a/lib/license/management/report/versions/base.rb
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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
deleted file mode 100644
index e897960..0000000
--- a/lib/license/management/report/versions/v1.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-# 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)
- return repository.item_for(license) if canonicalize?
-
- {
- 'name' => license.name.split(/[\r\n]+/)[0],
- 'url' => license.url
- }
- end
-
- def canonicalize?
- ENV.fetch('LM_V1_CANONICALIZE', 'false') == 'true'
- end
- end
- end
- end
- end
-end