license_auto 0.1.1.2 → 0.1.1.3

Sign up to get free protection for your applications and to get access to all the features.
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