license_auto 0.1.1.2 → 0.1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitmodules +3 -0
  4. data/.travis.yml +9 -2
  5. data/README.md +10 -8
  6. data/lib/license_auto/exceptions.rb +10 -0
  7. data/lib/license_auto/license/frequency.rb +1 -1
  8. data/lib/license_auto/license/readme.rb +21 -2
  9. data/lib/license_auto/license/similarity.rb +4 -3
  10. data/lib/license_auto/license_info_wrapper.rb +16 -0
  11. data/lib/license_auto/matcher.rb +14 -4
  12. data/lib/license_auto/package.rb +29 -15
  13. data/lib/license_auto/package_manager.rb +6 -2
  14. data/lib/license_auto/package_manager/bundler.rb +10 -6
  15. data/lib/license_auto/package_manager/gemfury.rb +2 -0
  16. data/lib/license_auto/package_manager/git_module.rb +73 -0
  17. data/lib/license_auto/package_manager/golang.rb +155 -0
  18. data/lib/license_auto/package_manager/gradle.rb +145 -0
  19. data/lib/license_auto/package_manager/maven.rb +133 -0
  20. data/lib/license_auto/package_manager/npm.rb +117 -1
  21. data/lib/license_auto/package_manager/pip.rb +8 -2
  22. data/lib/license_auto/repo.rb +51 -3
  23. data/lib/license_auto/source_code_server.rb +13 -0
  24. data/lib/license_auto/var/golang_std_libs.rb +160 -0
  25. data/lib/license_auto/version.rb +1 -1
  26. data/lib/license_auto/website.rb +1 -0
  27. data/lib/license_auto/website/cocoapods_org.rb +10 -0
  28. data/lib/license_auto/website/github_com.rb +43 -18
  29. data/lib/license_auto/website/homepage_spider.rb +56 -0
  30. data/lib/license_auto/website/maven_central_repository.rb +258 -0
  31. data/lib/license_auto/website/npm_registry.rb +178 -0
  32. data/lib/license_auto/website/ruby_gems_org.rb +119 -8
  33. data/license_auto.gemspec +1 -0
  34. data/package.json +30 -0
  35. metadata +25 -40
  36. data/lib/license_auto/package_manager/golang_stdlibs.rb +0 -161
  37. data/remove/api.rb +0 -60
  38. data/remove/api/bitbucket.rb +0 -142
  39. data/remove/api/code_google_com.rb +0 -66
  40. data/remove/api/excel_export.rb +0 -189
  41. data/remove/api/gem_data.rb +0 -30
  42. data/remove/api/git_kernel_org.rb +0 -59
  43. data/remove/api/github.rb +0 -376
  44. data/remove/api/go_pkg_in.rb +0 -41
  45. data/remove/api/golang_org.rb +0 -63
  46. data/remove/api/google_source_com.rb +0 -68
  47. data/remove/api/gradle2.rb +0 -41
  48. data/remove/api/helper.rb +0 -26
  49. data/remove/api/j_center.rb +0 -23
  50. data/remove/api/maven_central_repository.rb +0 -192
  51. data/remove/api/mq.rb +0 -30
  52. data/remove/api/npm_registry.rb +0 -169
  53. data/remove/api/pattern.rb +0 -33
  54. data/remove/api/remote_source_package.rb +0 -319
  55. data/remove/api/spider.rb +0 -47
  56. data/remove/cloner.rb +0 -154
  57. data/remove/db.rb +0 -267
  58. data/remove/license_auto +0 -4
  59. data/remove/misc.rb +0 -131
  60. data/remove/mq_pack.rb +0 -219
  61. data/remove/mq_repo.rb +0 -106
  62. data/remove/parser/gemfile_parser.rb +0 -221
  63. data/remove/parser/golang_parser.rb +0 -104
  64. data/remove/parser/gradle_parser.rb +0 -141
  65. data/remove/parser/manifest_parser.rb +0 -66
  66. data/remove/parser/maven_parser.rb +0 -91
  67. data/remove/parser/npm_parser.rb +0 -82
  68. data/remove/parser/pip_parser.rb +0 -1
  69. data/remove/parser/rebar_parser.rb +0 -61
  70. data/remove/recorder.rb +0 -184
  71. data/remove/script/apt-get.deps.sh +0 -37
  72. data/remove/script/debian_dpkg_list.sh +0 -2
  73. data/remove/script/rubygems.org.importdb.sh +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28221a5f886be66f2e736ea91fb80c9ea928463b
4
- data.tar.gz: 3ad528e4241d9e8fc365784d40977308a8b92bfe
3
+ metadata.gz: 25e8473c8a7057ec658e75dc3118b48f0927c6de
4
+ data.tar.gz: fb83bc24a7e8d4e38708f6a5b8d7bec826b3a599
5
5
  SHA512:
6
- metadata.gz: 730d2a75e553e42632645a2165773a71bcd6f2b868c2149a2a2d2ad8f541a1e626062d0a21be80334fd66303d8b85112ecfa3778ab720ccf6ed45317797ceff2
7
- data.tar.gz: 69a29cfa34ba61d4667fd369925e4b020737f6c8827fd09845bc03a407cb354d7913fc5ac862f2d1c689d7969cd7243ffeecff22a5e449aa7c6f1a41c61e53f8
6
+ metadata.gz: eb3dafb0555ff74d75139208e68dd942e5d3fb1fc23661cc13bcdfc489cc479bff9dec9306c9827558fee739dd1a218f9b3528dced0a089ed732873216be355f
7
+ data.tar.gz: 7f171ed8fcf9d9313b56dddffc04e868445ae375b9b98c7d25b5d02f6b2da8bb595da5c94243382ffa606e5000738740cfd300f5a604d59ed11a26d874d9ffab
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ .gradle/
1
2
  foo.rb
2
3
  *.patch
3
4
  *.diff
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "spec/fixtures/github.com/mineworks/license_auto_test_case"]
2
+ path = spec/fixtures/github.com/mineworks/license_auto_test_case
3
+ url = https://github.com/mineworks/license_auto_test_case.git
data/.travis.yml CHANGED
@@ -1,8 +1,15 @@
1
- language: ruby
1
+ language: ruby, node_js
2
+
2
3
  rvm:
3
- - "2.0"
4
4
  - "2.2"
5
5
 
6
+ node_js:
7
+ - "5"
8
+
9
+ #install:
10
+ # - npm install
11
+ # - bundle install
12
+
6
13
  script:
7
14
  - bundle exec rake build
8
15
  - bundle exec rspec spec
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
- # license_auto(v0.1.1.2)
1
+ # license_auto
2
2
 
3
- ![Progress](http://progressed.io/bar/10?title=progress)
3
+ ![Progress](http://progressed.io/bar/30?title=progress)
4
+ [![Gem Version](https://badge.fury.io/rb/license_auto.svg)](https://badge.fury.io/rb/license_auto)
4
5
  [![Code Climate](https://codeclimate.com/github/mineworks/license_auto/badges/gpa.svg)](https://codeclimate.com/github/mineworks/license_auto)
5
6
  [![Build Status](https://travis-ci.org/mineworks/license_auto.svg?branch=master)](https://travis-ci.org/mineworks/license_auto)
6
7
 
@@ -21,21 +22,21 @@
21
22
  <td>Gemfile(.lock)</td>
22
23
  <td>https://rubygems.org/</td>
23
24
  <!-- <td> https://rubygems.org/pages/data</td> -->
24
- <td>50</td>
25
+ <td>70</td>
25
26
  </tr>
26
27
  <tr>
27
28
  <td>Java</td>
28
29
  <td>Gradle, Maven</td>
29
30
  <td>build.gradle, pom.xml</td>
30
31
  <td>https://repo1.maven.org/maven2</td>
31
- <td>0</td>
32
+ <td>100</td>
32
33
  </tr>
33
34
  <tr>
34
35
  <td>NodeJS</td>
35
36
  <td>npm</td>
36
37
  <td>package.json</td>
37
38
  <td>http://registry.npmjs.org</td>
38
- <td>0</td>
39
+ <td>100</td>
39
40
  </tr>
40
41
  <tr>
41
42
  <td>Debian</td>
@@ -49,7 +50,7 @@
49
50
  <td>go list -json ./...</td>
50
51
  <td></td>
51
52
  <td></td>
52
- <td>0</td>
53
+ <td>50</td>
53
54
  </tr>
54
55
  <tr>
55
56
  <td>Python</td>
@@ -75,9 +76,10 @@
75
76
  * Gradle v2.9
76
77
  * Maven v3.x
77
78
  * Rebar v2.6.1
78
- * npm v3.3.12
79
+ * NodeJS v5.7.0+
80
+ * npm v3.6.0
79
81
  * Python pip v1.5.6
80
- * go v1.4.2
82
+ * golang v1.6
81
83
 
82
84
  ## Install
83
85
  ``` bash
@@ -20,6 +20,16 @@ module LicenseAuto
20
20
  end
21
21
  end
22
22
 
23
+ class SourceURLNotFound < LicenseAutoError
24
+ def initialize(message=nil, server=nil)
25
+ @message = message
26
+ @server = server
27
+ end
28
+ def message
29
+ "Package #{@message} can not be found in server #{@server}"
30
+ end
31
+ end
32
+
23
33
  class VirtualMethodError < RuntimeError
24
34
  ##
25
35
  # Just call to super with some fancy message.
@@ -22,7 +22,7 @@ LICENSE_SORTED_FREQUENCY = [
22
22
  'PerlArtistic',
23
23
  'CDDL1.1',
24
24
  'Artistic2.0',
25
- 'TP-Free',
25
+ # 'TP-Free',
26
26
  'Artistic1.0',
27
27
  'AFL2.1',
28
28
  'CPL1.0',
@@ -14,12 +14,19 @@ module LicenseAuto
14
14
  attr_reader :license_content
15
15
 
16
16
  def initialize(filename, content)
17
+ @content = content.encode('UTF-8', :invalid => :replace, :undef => :replace)
17
18
  impl = formator(filename)
18
- @license_content = impl.cut_license(content)
19
+ @license_content =
20
+ if impl.nil?
21
+ LicenseAuto.info("Unknown readme format: #{filename}, returned full-text instead")
22
+ @content
23
+ else
24
+ impl.cut_license(@content)
25
+ end
19
26
  end
20
27
 
21
28
  def extensions
22
- [Markdown]
29
+ [Markdown, RDoc]
23
30
  end
24
31
 
25
32
  def formator(filename)
@@ -40,4 +47,16 @@ module LicenseAuto
40
47
  end
41
48
  end
42
49
  end
50
+
51
+ class RDoc
52
+ FILE_EXTENSION = /\.rdoc$/i
53
+ PATTERN = /(?<text>^==\s*(license|copy|copying)(.*\n*)*)($|(?=\n^==))/i
54
+
55
+ def self.cut_license(content)
56
+ matched = PATTERN.match(content)
57
+ if matched
58
+ matched[:text]
59
+ end
60
+ end
61
+ end
43
62
  end
@@ -10,7 +10,8 @@ module LicenseAuto
10
10
  SIM_RATIO = 0.85
11
11
 
12
12
  def initialize(license_content)
13
- # LicenseAuto.logger.debug(license_content)
13
+ @license_content = license_content.encode('UTF-8', :invalid => :replace, :undef => :replace)
14
+ # LicenseAuto.logger.debug("\n#{@license_content}")
14
15
  @license_template_documents =
15
16
  LICENSE_SORTED_FREQUENCY.reject {|template_name|
16
17
  abs_filename_path(template_name).nil?
@@ -19,7 +20,7 @@ module LicenseAuto
19
20
  TfIdfSimilarity::Document.new(File.read(abs_file))
20
21
  }.compact
21
22
  @license_template_documents.push(
22
- TfIdfSimilarity::Document.new(license_content)
23
+ TfIdfSimilarity::Document.new(@license_content)
23
24
  )
24
25
  model = TfIdfSimilarity::TfIdfModel.new(@license_template_documents)
25
26
  @matrix = model.similarity_matrix
@@ -49,7 +50,7 @@ module LicenseAuto
49
50
 
50
51
  license_name = LICENSE_SORTED_FREQUENCY[sim_license_index]
51
52
 
52
- debug = "License: #{license_name}, Ratio: #{max_sim_ratio}"
53
+ debug = "License: #{license_name}, Ratio: #{max_sim_ratio}, license_content:\n #{@license_content[0..70]}..."
53
54
  LicenseAuto.logger.debug(debug)
54
55
 
55
56
  [license_name, max_sim_ratio]
@@ -3,12 +3,28 @@ require 'hashie/mash'
3
3
 
4
4
  module LicenseAuto
5
5
 
6
+
7
+ class PackWrapper < Hashie::Dash
8
+ include Hashie::Extensions::Mash
9
+
10
+ property :pack_id
11
+ property :homepage, default: nil
12
+ property :project_url, default: nil
13
+ property :source_url, default: nil
14
+ property :cmt, default: nil
15
+ end
16
+
6
17
  class LicenseInfoWrapper < Hashie::Dash
7
18
  include Hashie::Extensions::Mash
19
+ include Hashie::Extensions::Coercion
8
20
 
9
21
  property :licenses, default: []
10
22
  property :readmes, default: []
11
23
  property :notices, default: []
24
+ property :cmt, default: nil
25
+ property :pack
26
+
27
+ coerce_key :pack, PackWrapper
12
28
 
13
29
  end
14
30
 
@@ -25,11 +25,15 @@ module LicenseAuto
25
25
  end
26
26
 
27
27
  def match_github_resource()
28
- matched = github_resource.match(@url)
28
+ github_resource.match(@url)
29
29
  end
30
30
 
31
31
  def match_bitbucket_resource
32
- matched = github_resource.match(@url)
32
+ github_resource.match(@url)
33
+ end
34
+
35
+ def match_maven_default_central
36
+ maven_default_central_resource.match(@url)
33
37
  end
34
38
 
35
39
  private
@@ -37,12 +41,16 @@ module LicenseAuto
37
41
  ##
38
42
  # vcs: Version Control System
39
43
 
44
+ def maven_default_central_resource
45
+ /repo1\.maven\.org\/maven2/
46
+ end
47
+
40
48
  # FIXME: @Cissy
41
49
  def github_resource
42
50
  # /(git\+)?(?<protocol>(http[s]?|git))(:\/\/|@)(?<host>(www\.)?github\.com)(\/|:)(?<owner>.+)\/(?<repo>[^\/.]+)(?<vcs>\.git)?/
43
51
  /(git\+)?
44
- (?<protocol>(http[s]?|git))
45
- (:\/\/|@)
52
+ (?<protocol>(http[s]?|git))?
53
+ (:\/\/|@)?
46
54
  (?<host>(www\.)?github\.com)
47
55
  (\/|:)
48
56
  (?<owner>.+)\/
@@ -90,7 +98,9 @@ module LicenseAuto
90
98
  ##
91
99
  # git ref: commit hash/branch/tag
92
100
  def match_the_ref(ref)
101
+ # LicenseAuto.logger.debug(ref)
93
102
  version_pattern = /[vV]?#{@name.gsub(/\./, '\.').gsub(/\//, '\/')}$/i
103
+ # LicenseAuto.logger.debug(version_pattern)
94
104
  version_pattern.match(ref)
95
105
  end
96
106
 
@@ -1,13 +1,15 @@
1
1
  require 'hashie/mash'
2
2
 
3
+ require 'license_auto/matcher'
3
4
  require 'license_auto/website/ruby_gems_org'
4
5
  require 'license_auto/website/gemfury_com'
5
6
  require 'license_auto/website/github_com'
7
+ require 'license_auto/website/npm_registry'
8
+ require 'license_auto/website/maven_central_repository'
6
9
 
7
10
 
8
11
  module LicenseAuto
9
12
 
10
- ##
11
13
  # Package: {
12
14
  # language: 'Ruby', # Ruby|Golang|Java|NodeJS|Erlang|Python|
13
15
  # name: 'bundler',
@@ -19,20 +21,21 @@ module LicenseAuto
19
21
  class Package < Hashie::Mash
20
22
  extend LicenseAuto
21
23
 
22
- ##
23
24
  # Default project server of all kinds of languages.
24
25
  #
25
26
  # Key: language name
26
27
  #
27
28
  # Value: default project server
28
29
 
29
- LANGUAGES_PACKAGE_SERVER = {
30
- Ruby: RubyGemsOrg
30
+ PACKAGE_SERVERS = {
31
+ Ruby: RubyGemsOrg,
32
+ NodeJS: NpmRegistry,
33
+ GitModule: GithubCom
34
+ # TODO: add many server, eg. http://gopkg.in
31
35
  }
32
36
 
33
- ALL_SERVERS = [
34
- RubyGemsOrg,
35
- GemfuryCom,
37
+ SOURCE_CODE_SERVERS = [
38
+ # GemfuryCom,
36
39
  GithubCom,
37
40
  ]
38
41
 
@@ -85,18 +88,16 @@ module LicenseAuto
85
88
  # ]
86
89
  # }
87
90
  def get_license_info()
91
+ @server.get_license_info if chose_package_server
88
92
 
89
93
  # args = {
90
94
  # fetch_license_text: true
91
95
  # }.merge(args)
92
96
 
93
- @server.get_license_info if chose_package_server
94
-
95
97
  # TODO: uncomment these line, add Google or Yahoo!
96
98
  # if @server.nil?
97
99
  # @server.get_license_info if chose_search_engine
98
100
  # end
99
-
100
101
  end
101
102
 
102
103
  private
@@ -104,11 +105,24 @@ module LicenseAuto
104
105
  def chose_package_server()
105
106
  begin
106
107
  @server =
107
- if self.server?
108
- # TODO:
109
- LANGUAGES_PACKAGE_SERVER.fetch(self.language.to_sym).new(self)
110
- elsif self.language
111
- LANGUAGES_PACKAGE_SERVER.fetch(self.language.to_sym).new(self)
108
+ if self.language == 'Golang' and self.server
109
+ matcher = Matcher::SourceURL.new(self.server)
110
+ github_matched = matcher.match_github_resource
111
+ if github_matched
112
+ GithubCom.new(self, github_matched[:owner], github_matched[:repo])
113
+ else
114
+ LicenseAuto.logger.fatal("Golang server: #{self.server} should be supported!")
115
+ end
116
+ elsif self.language == 'Java' # and self.server
117
+ matcher = Matcher::SourceURL.new(self.server)
118
+ maven_default_matched = matcher.match_maven_default_central
119
+ if maven_default_matched
120
+ LicenseAuto::MavenCentralRepository.new(self.group, self.name, self.version)
121
+ else
122
+ LicenseAuto.logger.fatal("Maven server: #{self.server} should be supported!")
123
+ end
124
+ elsif self.server
125
+ PACKAGE_SERVERS.fetch(self.language.to_sym).new(self)
112
126
  end
113
127
  rescue KeyError => e
114
128
  LicenseAuto.logger.fatal("#{e}")
@@ -4,11 +4,12 @@ require 'license_auto/logger'
4
4
  require 'license_auto/module'
5
5
 
6
6
  module LicenseAuto
7
- class VirtualPackageManager
7
+ class PackageManager
8
8
 
9
9
  virtual :initialize,
10
10
  :parse_dependencies,
11
- :dependency_file_pattern
11
+ :dependency_file_pattern,
12
+ :check_cli
12
13
 
13
14
  # def self.package_managers
14
15
  # [Bundler, NPM, Pip, Bower, Maven, Gradle, CocoaPods, Rebar, Nuget]
@@ -28,6 +29,9 @@ module LicenseAuto
28
29
  # @return Array[Regexp]
29
30
  def dependency_file_pattern; end
30
31
 
32
+ # return Boolean
33
+ def check_cli; end
34
+
31
35
  def dependency_file_path_names(pattern=dependency_file_pattern)
32
36
  if FileTest.directory?(@path)
33
37
  Find.find(@path).select do |filename|
@@ -4,7 +4,7 @@ require 'license_auto/website/ruby_gems_org'
4
4
  # require 'license_auto/package_manager/gemfury'
5
5
 
6
6
  module LicenseAuto
7
- class Bundler < LicenseAuto::VirtualPackageManager
7
+ class Bundler < LicenseAuto::PackageManager
8
8
 
9
9
  LANGUAGE = 'Ruby'
10
10
 
@@ -13,11 +13,11 @@ module LicenseAuto
13
13
  end
14
14
 
15
15
  def dependency_file_pattern
16
- /#{@path}\/gem.*\.lock$/i
16
+ /#{@path}\/[0-9a-zA-Z_.]*gem.*\.lock$/i
17
17
  end
18
18
 
19
19
  def gemfile_pattern
20
- /gemfile$/i
20
+ /#{@path}\/[0-9a-zA-Z_.]*gemfile$/i
21
21
  end
22
22
 
23
23
  def parse_dependencies
@@ -30,13 +30,12 @@ module LicenseAuto
30
30
 
31
31
  lock_files = dependency_file_path_names
32
32
  if lock_files.empty?
33
- LicenseAuto.logger.info("Gemfile.lock file not exisit")
33
+ LicenseAuto.logger.info("#{LANGUAGE}: #{dependency_file_pattern} file not exist")
34
34
  gem_files = dependency_file_path_names(pattern=gemfile_pattern)
35
35
  # TODO: parse gem_files
36
36
  unless gem_files.empty?
37
- LicenseAuto.logger.info("Gemfile exisit: #{gem_files}")
37
+ LicenseAuto.logger.warn("#{LANGUAGE}: Gemfile exisit: #{gem_files}")
38
38
  end
39
-
40
39
  return []
41
40
  else
42
41
  lock_files.map {|dep_file|
@@ -83,5 +82,10 @@ module LicenseAuto
83
82
  end
84
83
  # LicenseAuto.logger.debug(JSON.pretty_generate(dep_files))
85
84
  end
85
+
86
+ def self.check_cli
87
+ # TODO check bundle
88
+ true
89
+ end
86
90
  end
87
91
  end
@@ -1,3 +1,5 @@
1
+ # https://github.com/gemfury/gemfury
2
+
1
3
  module Bundler
2
4
  class Source
3
5
  class Gemfury