deriving_license 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.coveralls.yml +1 -0
- data/README.md +1 -1
- data/deriving_license.gemspec +2 -2
- data/lib/deriving_license.rb +61 -61
- data/test/test_deriving_license.rb +2 -2
- metadata +4 -3
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/README.md
CHANGED
@@ -9,7 +9,7 @@ Strategies:
|
|
9
9
|
* from\_scraping\_homepage
|
10
10
|
* from\_parsing\_readme
|
11
11
|
|
12
|
-
[![Build Status](https://travis-ci.org/Schwolop/deriving_license.png)](https://travis-ci.org/Schwolop/deriving_license)
|
12
|
+
[![Build Status](https://travis-ci.org/Schwolop/deriving_license.png)](https://travis-ci.org/Schwolop/deriving_license) [![Coverage Status](https://coveralls.io/repos/Schwolop/deriving_license/badge.png)](https://coveralls.io/r/Schwolop/deriving_license) [![Code Climate](https://codeclimate.com/github/Schwolop/deriving_license.png)](https://codeclimate.com/github/Schwolop/deriving_license)
|
13
13
|
|
14
14
|
Example output:
|
15
15
|
|
data/deriving_license.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'deriving_license'
|
3
|
-
s.version = '0.3.
|
3
|
+
s.version = '0.3.1'
|
4
4
|
s.summary = "Deriving Licence finds the license agreements for all gems in your Gemfile"
|
5
5
|
s.description = "Deriving Licence finds the license agreements for all gems in your Gemfile if included in your project, or in a Gemfile passed to the included binary"
|
6
6
|
s.authors = ["Tom Allen"]
|
@@ -16,5 +16,5 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.add_runtime_dependency "gemnasium-parser"
|
17
17
|
s.add_runtime_dependency "safe_yaml"
|
18
18
|
s.add_runtime_dependency "curb"
|
19
|
-
s.add_development_dependency "
|
19
|
+
s.add_development_dependency "coveralls"
|
20
20
|
end
|
data/lib/deriving_license.rb
CHANGED
@@ -42,7 +42,7 @@ class DerivingLicense
|
|
42
42
|
|
43
43
|
@specs_cache = {} # Cache of gem specifications previously fetched.
|
44
44
|
|
45
|
-
def self.run(path=nil, strategies=
|
45
|
+
def self.run(path=nil, strategies=[])
|
46
46
|
unless path
|
47
47
|
raise ArgumentError.new("Path to Gemfile or Gemspec required")
|
48
48
|
end
|
@@ -57,71 +57,17 @@ class DerivingLicense
|
|
57
57
|
raise "Invalid path to gemfile or gemspec."
|
58
58
|
end
|
59
59
|
|
60
|
-
strategies.
|
61
|
-
|
62
|
-
|
63
|
-
end
|
64
|
-
end unless strategies.nil?
|
65
|
-
available_strategies = strategies.nil? ? @strategies : strategies
|
60
|
+
available_strategies = strategies.select{|s| @strategies.include?(s)}
|
61
|
+
raise "Supplied strategies must be from the following list: [#{@strategies.join(', ')}]" if available_strategies.count != strategies.count
|
62
|
+
available_strategies = @strategies if strategies.empty?
|
66
63
|
|
67
|
-
|
68
|
-
deps = []
|
69
|
-
if /gemspec/.match(path.downcase) # Gemspecs...
|
70
|
-
deps = Gemnasium::Parser::Gemspec.new(content).dependencies
|
71
|
-
else # Gemfiles...
|
72
|
-
content = Gemnasium::Parser::Gemfile.new(content)
|
73
|
-
if content.gemspec? # If the gemfile sources a gemspec.
|
74
|
-
begin
|
75
|
-
gemspec_content = File.open(content.gemspec, "r").read
|
76
|
-
rescue # If we fail to read the gemspec, search current directory
|
77
|
-
possible_gemspec_files = Find.find( File.dirname(content.gemspec) )
|
78
|
-
if possible_gemspec_files.count == 1
|
79
|
-
begin
|
80
|
-
gemspec_content = File.open(possible_gemspec_files[0], "r").read
|
81
|
-
rescue
|
82
|
-
raise "Could not open gemspec file \"#{possible_gemspec_files[0]}\" that was called by gemfile."
|
83
|
-
end
|
84
|
-
else
|
85
|
-
raise "Gemfile calls out to unnamed gemspec, but multiple gemspec files found in gemfile's directory. Tell the developer to name their sources!"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
deps = content.dependencies
|
90
|
-
deps += Gemnasium::Parser::Gemspec.new(gemspec_content).dependencies unless gemspec_content.empty?
|
91
|
-
end
|
64
|
+
deps = find_deps(path, content)
|
92
65
|
detected_licenses = Hash.new(0)
|
93
66
|
detected_licenses["custom"]=[]
|
94
67
|
|
95
68
|
# For each dependency specified...
|
96
|
-
|
97
|
-
|
98
|
-
print "Determining license for #{d.name}:\n"
|
99
|
-
# Try each license finding strategy...
|
100
|
-
available_strategies.each do |s|
|
101
|
-
print "\tTrying #{s} strategy..."
|
102
|
-
licenses = eval("#{s}(\"#{d.name}\")")
|
103
|
-
unless licenses.empty? # and break out of the search if successful
|
104
|
-
if licenses.count == 1 and licenses[0] == "custom"
|
105
|
-
print "CUSTOM\n"
|
106
|
-
else
|
107
|
-
print "SUCCESS\n"
|
108
|
-
end
|
109
|
-
break
|
110
|
-
end
|
111
|
-
print "FAILED\n"
|
112
|
-
end
|
113
|
-
licenses.each do |l| # add each detected license to the results
|
114
|
-
unless l == "custom"
|
115
|
-
detected_licenses[l]+=1
|
116
|
-
else
|
117
|
-
detected_licenses["custom"] << "#{d.name}" # the 'custom' key is
|
118
|
-
# special and holds an array of the deps with custom licenses.
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
if detected_licenses["custom"].empty?
|
123
|
-
detected_licenses.delete("custom")
|
124
|
-
end
|
69
|
+
determine_licenses(deps,detected_licenses,available_strategies)
|
70
|
+
|
125
71
|
detected_licenses
|
126
72
|
end
|
127
73
|
|
@@ -155,6 +101,60 @@ class DerivingLicense
|
|
155
101
|
end
|
156
102
|
end
|
157
103
|
|
104
|
+
def self.find_deps(path, content)
|
105
|
+
deps = []
|
106
|
+
if /gemspec/.match(path.downcase) # Gemspecs...
|
107
|
+
deps = Gemnasium::Parser::Gemspec.new(content).dependencies
|
108
|
+
else # Gemfiles...
|
109
|
+
content = Gemnasium::Parser::Gemfile.new(content)
|
110
|
+
gemspec_content = ""
|
111
|
+
begin
|
112
|
+
gemspec_content = File.open(content.gemspec, "r").read
|
113
|
+
rescue # If we fail to read the gemspec, search current directory
|
114
|
+
possible_gemspec_files = Find.find( File.dirname(content.gemspec) )
|
115
|
+
raise "Gemfile calls out to unnamed gemspec, but multiple gemspec files found in gemfile's directory. Tell the developer to name their sources!" unless possible_gemspec_files.count == 1
|
116
|
+
begin
|
117
|
+
gemspec_content = File.open(possible_gemspec_files[0], "r").read
|
118
|
+
rescue
|
119
|
+
raise "Could not open gemspec file \"#{possible_gemspec_files[0]}\" that was called by gemfile."
|
120
|
+
end
|
121
|
+
end if content.gemspec? # If the gemfile sources a gemspec.
|
122
|
+
deps = content.dependencies
|
123
|
+
deps += Gemnasium::Parser::Gemspec.new(gemspec_content).dependencies unless gemspec_content.empty?
|
124
|
+
end
|
125
|
+
deps
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.determine_licenses(deps,detected_licenses,available_strategies)
|
129
|
+
licenses = []
|
130
|
+
deps.each do |d|
|
131
|
+
print "Determining license for #{d.name}:\n"
|
132
|
+
# Try each license finding strategy...
|
133
|
+
available_strategies.each do |s|
|
134
|
+
print "\tTrying #{s} strategy..."
|
135
|
+
licenses = eval("#{s}(\"#{d.name}\")")
|
136
|
+
unless licenses.empty? # and break out of the search if successful
|
137
|
+
print "#{licenses.count == 1 and licenses[0] == "custom" ? "CUSTOM\n" : "SUCCESS\n"}"
|
138
|
+
break
|
139
|
+
end
|
140
|
+
print "FAILED\n"
|
141
|
+
end
|
142
|
+
add_to_detected_licenses(licenses,detected_licenses,d.name)
|
143
|
+
end
|
144
|
+
detected_licenses.delete("custom") if detected_licenses["custom"].empty?
|
145
|
+
end
|
146
|
+
|
147
|
+
def self.add_to_detected_licenses(licenses,detected_licenses,dep_name)
|
148
|
+
licenses.each do |l| # add each detected license to the results
|
149
|
+
if l == "custom"
|
150
|
+
detected_licenses["custom"] << "#{dep_name}" # the 'custom' key is
|
151
|
+
# special and holds an array of the deps with custom licenses.
|
152
|
+
else
|
153
|
+
detected_licenses[l]+=1
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
158
|
def self.get_gem_spec(dep)
|
159
159
|
# Check spec cache first.
|
160
160
|
spec = @specs_cache[dep]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: deriving_license
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: gemnasium-parser
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: coveralls
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
@@ -83,6 +83,7 @@ executables:
|
|
83
83
|
extensions: []
|
84
84
|
extra_rdoc_files: []
|
85
85
|
files:
|
86
|
+
- .coveralls.yml
|
86
87
|
- .gitignore
|
87
88
|
- .travis.yml
|
88
89
|
- Gemfile
|