license_finder 0.8.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. data/.gitignore +12 -0
  2. data/.rspec +1 -0
  3. data/.travis.yml +15 -0
  4. data/Gemfile +3 -0
  5. data/LICENSE +22 -0
  6. data/Rakefile +21 -0
  7. data/bin/license_finder +54 -0
  8. data/db/migrate/201303290935_create_dependencies.rb +14 -0
  9. data/db/migrate/201303291155_create_licenses.rb +13 -0
  10. data/db/migrate/201303291402_create_approvals.rb +13 -0
  11. data/db/migrate/201303291456_create_ancestries.rb +9 -0
  12. data/db/migrate/201303291519_create_bundler_groups.rb +13 -0
  13. data/db/migrate/201303291720_move_manual_from_approvals_to_licenses.rb +11 -0
  14. data/db/migrate/201303291753_allow_null_license_names.rb +7 -0
  15. data/db/migrate/201304011027_allow_null_dependency_version.rb +7 -0
  16. data/db/migrate/201304020947_change_table_name_licenses_to_license_aliases.rb +5 -0
  17. data/features/approve_dependencies.feature +14 -0
  18. data/features/html_report.feature +38 -0
  19. data/features/ignore_bundle_groups.feature +11 -0
  20. data/features/license_finder.feature +47 -0
  21. data/features/license_finder_rake_task.feature +37 -0
  22. data/features/rails_rake.feature +9 -0
  23. data/features/set_license.feature +12 -0
  24. data/features/step_definitions/license_finder_steps.rb +25 -0
  25. data/features/step_definitions/steps.rb +376 -0
  26. data/features/text_report.feature +27 -0
  27. data/features/whitelist.feature +24 -0
  28. data/files/license_finder.yml +8 -0
  29. data/lib/data/licenses/Apache2.txt +172 -0
  30. data/lib/data/licenses/BSD.txt +24 -0
  31. data/lib/data/licenses/GPLv2.txt +339 -0
  32. data/lib/data/licenses/ISC.txt +2 -0
  33. data/lib/data/licenses/LGPL.txt +165 -0
  34. data/lib/data/licenses/MIT.txt +9 -0
  35. data/lib/data/licenses/NewBSD.txt +21 -0
  36. data/lib/data/licenses/Ruby.txt +52 -0
  37. data/lib/data/licenses/SimplifiedBSD.txt +23 -0
  38. data/lib/license_finder.rb +47 -0
  39. data/lib/license_finder/bundle.rb +48 -0
  40. data/lib/license_finder/bundle_syncer.rb +11 -0
  41. data/lib/license_finder/bundled_gem.rb +48 -0
  42. data/lib/license_finder/cli.rb +49 -0
  43. data/lib/license_finder/configuration.rb +71 -0
  44. data/lib/license_finder/dependency_report.rb +30 -0
  45. data/lib/license_finder/gem_saver.rb +69 -0
  46. data/lib/license_finder/html_report.rb +14 -0
  47. data/lib/license_finder/license.rb +90 -0
  48. data/lib/license_finder/license/apache2.rb +8 -0
  49. data/lib/license_finder/license/bsd.rb +4 -0
  50. data/lib/license_finder/license/gplv2.rb +4 -0
  51. data/lib/license_finder/license/isc.rb +3 -0
  52. data/lib/license_finder/license/lgpl.rb +3 -0
  53. data/lib/license_finder/license/mit.rb +23 -0
  54. data/lib/license_finder/license/new_bsd.rb +8 -0
  55. data/lib/license_finder/license/ruby.rb +11 -0
  56. data/lib/license_finder/license/simplified_bsd.rb +8 -0
  57. data/lib/license_finder/license_files.rb +36 -0
  58. data/lib/license_finder/license_url.rb +12 -0
  59. data/lib/license_finder/platform.rb +32 -0
  60. data/lib/license_finder/possible_license_file.rb +32 -0
  61. data/lib/license_finder/railtie.rb +7 -0
  62. data/lib/license_finder/reporter.rb +20 -0
  63. data/lib/license_finder/tables.rb +7 -0
  64. data/lib/license_finder/tables/approval.rb +4 -0
  65. data/lib/license_finder/tables/bundler_group.rb +4 -0
  66. data/lib/license_finder/tables/dependency.rb +31 -0
  67. data/lib/license_finder/tables/license_alias.rb +22 -0
  68. data/lib/license_finder/text_report.rb +9 -0
  69. data/lib/license_finder/yml_to_sql.rb +127 -0
  70. data/lib/tasks/license_finder.rake +7 -0
  71. data/lib/templates/html_report.erb +111 -0
  72. data/lib/templates/text_report.erb +3 -0
  73. data/license_finder.gemspec +36 -0
  74. data/readme.md +115 -0
  75. data/spec/fixtures/APACHE-2-LICENSE +202 -0
  76. data/spec/fixtures/GPLv2 +339 -0
  77. data/spec/fixtures/ISC-LICENSE +10 -0
  78. data/spec/fixtures/MIT-LICENSE +22 -0
  79. data/spec/fixtures/MIT-LICENSE-with-varied-disclaimer +22 -0
  80. data/spec/fixtures/README-with-MIT-LICENSE +222 -0
  81. data/spec/fixtures/license_directory/COPYING +0 -0
  82. data/spec/fixtures/license_directory/LICENSE/BSD-2-Clause.txt +25 -0
  83. data/spec/fixtures/license_directory/LICENSE/GPL-2.0.txt +339 -0
  84. data/spec/fixtures/license_directory/LICENSE/LICENSE +191 -0
  85. data/spec/fixtures/license_directory/LICENSE/MIT.txt +21 -0
  86. data/spec/fixtures/license_directory/LICENSE/RUBY.txt +60 -0
  87. data/spec/fixtures/license_names/COPYING.txt +0 -0
  88. data/spec/fixtures/license_names/LICENSE +0 -0
  89. data/spec/fixtures/license_names/Licence.rdoc +0 -0
  90. data/spec/fixtures/license_names/Mit-License +0 -0
  91. data/spec/fixtures/license_names/README.rdoc +0 -0
  92. data/spec/fixtures/mit_licensed_gem/LICENSE +22 -0
  93. data/spec/fixtures/nested_gem/vendor/LICENSE +0 -0
  94. data/spec/fixtures/nested_readme/vendor/README +0 -0
  95. data/spec/fixtures/other_licensed_gem/LICENSE +3 -0
  96. data/spec/fixtures/readme/Project ReadMe b/data/spec/fixtures/readme/Project → ReadMe +0 -0
  97. data/spec/fixtures/readme/README +0 -0
  98. data/spec/fixtures/readme/Readme.markdown +0 -0
  99. data/spec/fixtures/utf8_gem/README +210 -0
  100. data/spec/lib/license_finder/bundle_spec.rb +61 -0
  101. data/spec/lib/license_finder/bundle_syncer_spec.rb +16 -0
  102. data/spec/lib/license_finder/bundled_gem_spec.rb +62 -0
  103. data/spec/lib/license_finder/cli_spec.rb +38 -0
  104. data/spec/lib/license_finder/configuration_spec.rb +70 -0
  105. data/spec/lib/license_finder/gem_saver_spec.rb +155 -0
  106. data/spec/lib/license_finder/html_report_spec.rb +84 -0
  107. data/spec/lib/license_finder/license/apache_spec.rb +7 -0
  108. data/spec/lib/license_finder/license/bsd_spec.rb +41 -0
  109. data/spec/lib/license_finder/license/gplv2_spec.rb +7 -0
  110. data/spec/lib/license_finder/license/isc_spec.rb +7 -0
  111. data/spec/lib/license_finder/license/lgpl_spec.rb +7 -0
  112. data/spec/lib/license_finder/license/mit_spec.rb +33 -0
  113. data/spec/lib/license_finder/license/new_bsd_spec.rb +35 -0
  114. data/spec/lib/license_finder/license/ruby_spec.rb +19 -0
  115. data/spec/lib/license_finder/license/simplified_bsd_spec.rb +7 -0
  116. data/spec/lib/license_finder/license_files_spec.rb +50 -0
  117. data/spec/lib/license_finder/license_spec.rb +45 -0
  118. data/spec/lib/license_finder/license_url_spec.rb +20 -0
  119. data/spec/lib/license_finder/possible_license_file_spec.rb +37 -0
  120. data/spec/lib/license_finder/reporter_spec.rb +4 -0
  121. data/spec/lib/license_finder/tables/dependency_spec.rb +102 -0
  122. data/spec/lib/license_finder/tables/license_alias_spec.rb +54 -0
  123. data/spec/lib/license_finder/text_report_spec.rb +31 -0
  124. data/spec/lib/license_finder/yml_to_sql_spec.rb +99 -0
  125. data/spec/lib/license_finder_spec.rb +82 -0
  126. data/spec/spec_helper.rb +31 -0
  127. data/spec/support/license_examples.rb +30 -0
  128. metadata +435 -0
@@ -0,0 +1,376 @@
1
+ require 'fileutils'
2
+ require 'pathname'
3
+ require 'bundler'
4
+ require 'capybara'
5
+
6
+ Given /^I have a rails app(?:lication)? with license finder$/ do
7
+ @user = ::DSL::User.new
8
+ @user.create_rails_app
9
+ end
10
+
11
+ Given /^I have an app(?:lication)? with license finder$/ do
12
+ @user = ::DSL::User.new
13
+ @user.create_nonrails_app
14
+ end
15
+
16
+ Given /^I have an app(?:lication)? with rake and license finder$/ do
17
+ @user = ::DSL::User.new
18
+ @user.create_nonrails_app
19
+ @user.add_license_finder_to_rakefile
20
+ end
21
+
22
+ Given /^my app(?:lication)? does not have a "([^"]+)" directory$/ do |name|
23
+ path = @user.app_path(name)
24
+
25
+ FileUtils.rm_rf(path)
26
+ File.should_not be_exists(path)
27
+ end
28
+
29
+ Given /^my (?:rails )?app(?:lication)? depends on a gem "(.*?)" licensed with "(.*?)"$/ do |gem_name, license|
30
+ @user.add_dependency_to_app gem_name, :license => license
31
+ end
32
+
33
+ Given /^my (?:rails )?app(?:lication)? depends on a gem "(.*?)" licensed with "(.*?)" in the "(.*?)" bundler groups$/ do |gem_name, license, bundler_groups|
34
+ @user.add_dependency_to_app gem_name, :license => license, :bundler_groups => bundler_groups
35
+ end
36
+
37
+ Given /^I whitelist the "(.*?)" license$/ do |license|
38
+ @user.configure_license_finder_whitelist [license]
39
+ end
40
+
41
+ Given /^I whitelist the following licenses: "([^"]*)"$/ do |licenses|
42
+ @user.configure_license_finder_whitelist licenses.split(", ")
43
+ end
44
+
45
+ Given /^I have a legacy dependencies\.yml file with "(.*?)" approved with its "(.*?)" license$/ do |gem_name, license_name|
46
+ @user.modifying_dependencies_file do |f|
47
+ f.write <<-YAML
48
+ - name: #{gem_name}
49
+ version: 1.5.0
50
+ license: #{license_name}
51
+ approved: true
52
+ notes: ''
53
+ license_files:
54
+ - path: /some/path/to/files/that/are/rad
55
+ YAML
56
+ end
57
+ end
58
+
59
+ And /^I have a legacy dependencies\.yml file with readme_files entry for gem "(.*?)"$/ do |gem_name|
60
+ @user.modifying_dependencies_file do |f|
61
+ f.write <<-YAML
62
+ - name: #{gem_name}
63
+ version: 1.5.0
64
+ license: some_license
65
+ approved: true
66
+ notes: ''
67
+ license_files:
68
+ - path: /some/path/to/files/that/are/rad
69
+ readme_files:
70
+ - path: /some/path/to/files/that/are/rad/readme
71
+ YAML
72
+ end
73
+ end
74
+
75
+ Given /^I have a legacy dependencies\.yml file with a blank readme_files entry for gem "(.*?)"$/ do |gem_name|
76
+ @user.modifying_dependencies_file do |f|
77
+ f.write(<<-YAML)
78
+ - name: #{gem_name}
79
+ version: 1.5.0
80
+ license: some_license
81
+ approved: true
82
+ notes: ''
83
+ license_files:
84
+ - path: /some/path/to/files/that/are/rad
85
+ readme_files:
86
+ YAML
87
+ end
88
+ end
89
+
90
+ When /^I run "(.*?)"$/ do |command|
91
+ @output = @user.execute_command command
92
+ end
93
+
94
+ When /^I update the settings for "([^"]*)" with the following content:$/ do |gem, text|
95
+ @user.update_gem(gem, YAML.load(text))
96
+ end
97
+
98
+ When /^I add the following content to "([^"]*)":$/ do |filename, text|
99
+ @user.append_to_file(filename, @content = text)
100
+ end
101
+
102
+ When /^my app(?:lication)? depends on a gem "([^"]*)" with:$/ do |gem_name, gem_info|
103
+ info = gem_info.hashes.first
104
+ @user.add_dependency_to_app(gem_name,
105
+ :license => info["license"],
106
+ :summary => info["summary"],
107
+ :description => info["description"],
108
+ :version => info["version"],
109
+ :homepage => info["homepage"],
110
+ :bundler_groups => info["bundler_groups"]
111
+ )
112
+ end
113
+
114
+ When /^the text "([^"]*)" should link to "([^"]*)"$/ do |text, link|
115
+ html = Capybara.string File.read(@user.dependencies_html_path)
116
+ html.all(:xpath, "//a[@href='#{link}']").first.text.should == text
117
+ end
118
+
119
+ When /^"([^"]*)" is an alternative name for the "MIT" license$/ do |alternative_name|
120
+ # this step is simply for readability
121
+ end
122
+
123
+ When /^I whitelist the "([^"]*)" bundler group$/ do |group|
124
+ @user.configure_license_finder_bundler_whitelist(group)
125
+ end
126
+
127
+ Then(/^I should see other_license_gem set to MIT license$/) do
128
+ @output.should =~ /other_license_gem.*MIT/
129
+ end
130
+
131
+ Then /^I should see a "([^"]+)" directory$/ do |name|
132
+ File.should be_exists(@user.app_path(name))
133
+ end
134
+
135
+ Then /^I should see "(.*?)" in its output$/ do |gem_name|
136
+ @output.should include gem_name
137
+ end
138
+
139
+ Then /^I should not see "(.*?)" in its output$/ do |gem_name|
140
+ @output.should_not include gem_name
141
+ end
142
+
143
+ Then /^I should see the file "([^"]*)" with the following content:$/ do |filename, text|
144
+ File.read(@user.app_path(filename)).should == text.gsub(/^\s+/, "")
145
+ end
146
+
147
+ Then /^I should see the file "([^"]*)" containing:$/ do |filename, text|
148
+ File.read(@user.app_path(filename)).should include(text.gsub(/^\s+/, ""))
149
+ end
150
+
151
+ Then /^I should see exactly one entry for "(.*?)" in "(.*?)"$/ do |gem_name, filename|
152
+ file_contents = File.read(@user.app_path(filename))
153
+ file_contents.scan(/#{gem_name}/).size.should == 1
154
+ end
155
+
156
+ Then /^I should not see an entry "(.*?)" for gem "(.*?)" in my dependencies\.yml$/ do |entry_key, gem_name|
157
+ settings = YAML.load(File.read(@user.dependencies_file_path))
158
+ gem_settings = settings.detect { |gem| gem['name'] == gem_name }
159
+ gem_settings.should_not have_key entry_key
160
+ end
161
+
162
+ Then /^it should exit with status code (\d)$/ do |status|
163
+ $?.exitstatus.should == status.to_i
164
+ end
165
+
166
+ Then /^I should see the "([^"]*)" in the html flagged as "([^"]*)"$/ do |gem_name, css_class|
167
+ html = File.read(@user.dependencies_html_path)
168
+ page = Capybara.string(html)
169
+ gpl_gem = page.find("##{gem_name}")
170
+ gpl_gem[:class].should == css_class
171
+ end
172
+
173
+ Then /^I should see (?:the )?"([^"]*)" in the html with the following details:$/ do |gem_name, table|
174
+ html = File.read(@user.dependencies_html_path)
175
+ page = Capybara.string(html)
176
+ section = page.find("##{gem_name}")
177
+
178
+ table.hashes.first.each do |property_name, property_value|
179
+ section.should have_content property_value
180
+ end
181
+ end
182
+
183
+ Then /^I should see "([^"]*)" in the html$/ do |text|
184
+ html = File.read(@user.dependencies_html_path)
185
+ page = Capybara.string(html)
186
+
187
+ page.should have_content text
188
+ end
189
+
190
+ module DSL
191
+ class User
192
+ def create_nonrails_app
193
+ reset_projects!
194
+
195
+ `cd #{projects_path} && bundle gem #{app_name}`
196
+
197
+ add_gem_dependency('rake')
198
+ add_gem_dependency('license_finder', :path => root_path)
199
+
200
+ bundle_app
201
+ end
202
+
203
+ def create_rails_app
204
+ reset_projects!
205
+
206
+ `bundle exec rails new #{app_path} --skip-bundle`
207
+
208
+ add_gem_dependency('license_finder', :path => root_path)
209
+
210
+ bundle_app
211
+ end
212
+
213
+ def add_license_finder_to_rakefile
214
+ add_to_rakefile <<-RUBY
215
+ require 'bundler/setup'
216
+ require 'license_finder'
217
+ LicenseFinder.load_rake_tasks
218
+ RUBY
219
+ end
220
+
221
+ def update_gem(name, attrs)
222
+ file_contents = YAML.load(File.read(dependencies_file_path))
223
+
224
+ index = file_contents.index { |gem| gem['name'] == name }
225
+ file_contents[index].merge!(attrs)
226
+
227
+ File.open(dependencies_file_path, "w") do |f|
228
+ f.puts file_contents.to_yaml
229
+ end
230
+ end
231
+
232
+ def append_to_file(filename, text)
233
+ File.open(File.join(app_path, filename), "a") do |f|
234
+ f.puts text
235
+ end
236
+ end
237
+
238
+ def add_dependency_to_app(gem_name, options={})
239
+ license = options.fetch(:license)
240
+ summary = options.fetch(:summary, "")
241
+ description = options.fetch(:description, "")
242
+ bundler_groups = options.fetch(:bundler_groups, "").to_s.split(',').map(&:strip)
243
+ version = options[:version] || "0.0.0"
244
+ homepage = options[:homepage]
245
+
246
+ gem_dir = File.join(projects_path, gem_name)
247
+
248
+ FileUtils.mkdir(gem_dir)
249
+ File.open(File.join(gem_dir, "#{gem_name}.gemspec"), 'w') do |file|
250
+ file.write <<-GEMSPEC
251
+ Gem::Specification.new do |s|
252
+ s.name = "#{gem_name}"
253
+ s.version = "#{version}"
254
+ s.author = "Cucumber"
255
+ s.summary = "#{summary}"
256
+ s.license = "#{license}"
257
+ s.description = "#{description}"
258
+ s.homepage = "#{homepage}"
259
+ end
260
+ GEMSPEC
261
+ end
262
+
263
+ gem_options = {}
264
+ gem_options[:path] = File.join(projects_path, gem_name)
265
+ gem_options[:groups] = bundler_groups unless bundler_groups.empty?
266
+
267
+ add_gem_dependency(gem_name, gem_options)
268
+
269
+ bundle_app
270
+ end
271
+
272
+ def configure_license_finder_whitelist(whitelisted_licenses=[])
273
+ FileUtils.mkdir_p(config_path)
274
+ File.open(File.join(config_path, "license_finder.yml"), "w") do |f|
275
+ f.write({'whitelist' => whitelisted_licenses}.to_yaml)
276
+ end
277
+ end
278
+
279
+ def configure_license_finder_bundler_whitelist(whitelisted_groups=[])
280
+ whitelisted_groups = Array whitelisted_groups
281
+ FileUtils.mkdir_p(config_path)
282
+ File.open(File.join(config_path, "license_finder.yml"), "w") do |f|
283
+ f.write({'ignore_groups' => whitelisted_groups}.to_yaml)
284
+ end
285
+ end
286
+
287
+ def execute_command(command)
288
+ Bundler.with_clean_env do
289
+ @output = `cd #{app_path} && bundle exec #{command}`
290
+ end
291
+
292
+ @output
293
+ end
294
+
295
+ def app_path(sub_directory = nil)
296
+ path = app_path = Pathname.new(File.join(projects_path, app_name)).cleanpath.to_s
297
+
298
+ if sub_directory
299
+ path = Pathname.new(File.join(app_path, sub_directory)).cleanpath.to_s
300
+
301
+ raise "#{name} is outside of the app" unless path =~ %r{^#{app_path}/}
302
+ end
303
+
304
+ path
305
+ end
306
+
307
+ def config_path
308
+ File.join(app_path, 'config')
309
+ end
310
+
311
+ def doc_path
312
+ File.join(app_path, 'doc')
313
+ end
314
+
315
+ def dependencies_file_path
316
+ File.join(doc_path, 'dependencies.yml')
317
+ end
318
+
319
+ def dependencies_html_path
320
+ File.join(doc_path, 'dependencies.html')
321
+ end
322
+
323
+ def add_gem_dependency(name, options = {})
324
+ line = "gem #{name.inspect}"
325
+ line << ", " + options.inspect unless options.empty?
326
+
327
+ add_to_gemfile(line)
328
+ end
329
+
330
+ def bundle_app
331
+ Bundler.with_clean_env do
332
+ `bundle install --gemfile=#{File.join(app_path, "Gemfile")} --path=#{bundle_path}`
333
+ end
334
+ end
335
+
336
+ def modifying_dependencies_file
337
+ FileUtils.mkdir_p(File.dirname(dependencies_file_path))
338
+ File.open(dependencies_file_path, 'w+') { |f| yield f }
339
+ end
340
+
341
+ private
342
+
343
+ def add_to_gemfile(line)
344
+ `echo #{line.inspect} >> #{File.join(app_path, "Gemfile")}`
345
+ end
346
+
347
+ def add_to_rakefile(line)
348
+ `echo #{line.inspect} >> #{File.join(app_path, "Rakefile")}`
349
+ end
350
+
351
+ def app_name
352
+ "my_app"
353
+ end
354
+
355
+ def sandbox_path
356
+ File.join(root_path, "tmp")
357
+ end
358
+
359
+ def projects_path
360
+ File.join(sandbox_path, "projects")
361
+ end
362
+
363
+ def bundle_path
364
+ File.join(sandbox_path, "bundle")
365
+ end
366
+
367
+ def reset_projects!
368
+ `rm -rf #{projects_path}`
369
+ `mkdir -p #{projects_path}`
370
+ end
371
+
372
+ def root_path
373
+ Pathname.new(File.join(File.dirname(__FILE__), "..", "..")).realpath.to_s
374
+ end
375
+ end
376
+ end
@@ -0,0 +1,27 @@
1
+ Feature: Text Report
2
+ So that I can easily view a report outlining my application dependencies and licenses
3
+ As a non-technical application product owner
4
+ I want license finder to generate an easy-to-understand text report
5
+
6
+ Scenario: Viewing dependencies
7
+ Given I have an app with license finder
8
+ And my application depends on a gem "descriptive_gem" with:
9
+ | license | version |
10
+ | MIT | 1.1.1 |
11
+ When I run "license_finder"
12
+ Then I should see the file "doc/dependencies.txt" containing:
13
+ """
14
+ descriptive_gem, 1.1.1, MIT
15
+ """
16
+
17
+ Scenario: Viewing dependencies after multiple runs
18
+ Given I have an app with license finder
19
+ And my application depends on a gem "descriptive_gem" with:
20
+ | license | version |
21
+ | MIT | 1.1.1 |
22
+ When I run "license_finder"
23
+ And I run "license_finder"
24
+ Then I should see the file "doc/dependencies.txt" containing:
25
+ """
26
+ descriptive_gem, 1.1.1, MIT
27
+ """
@@ -0,0 +1,24 @@
1
+ Feature: Whitelist licenses
2
+ As a developer
3
+ I want to whitelist certain OSS licenses that my business has pre-approved
4
+ So that any dependencies with those licenses do not show up as action items
5
+
6
+ Scenario: Auditing an application with whitelisted licenses
7
+ Given I have an app with license finder
8
+ And my app depends on a gem "mit_licensed_gem" licensed with "MIT"
9
+ When I run "license_finder"
10
+ Then I should see "mit_licensed_gem" in its output
11
+ When I whitelist the following licenses: "MIT, other"
12
+ And I run "license_finder"
13
+ Then I should see "All gems are approved for use" in its output
14
+ And it should exit with status code 0
15
+
16
+ Scenario: Whitelist with MIT License alternative name "Expat" should whitelist "MIT" licenses
17
+ Given I have an app with license finder
18
+ And "Expat" is an alternative name for the "MIT" license
19
+ And my app depends on a gem "mit_licensed_gem" licensed with "MIT"
20
+ When I run "license_finder"
21
+ Then I should see "mit_licensed_gem" in its output
22
+ When I whitelist the "Expat" license
23
+ And I run "license_finder"
24
+ Then I should not see "mit_licensed_gem" in its output
@@ -0,0 +1,8 @@
1
+ ---
2
+ whitelist:
3
+ #- MIT
4
+ #- Apache 2.0
5
+ ignore_groups:
6
+ #- test
7
+ #- development
8
+ dependencies_file_dir: './doc/'
@@ -0,0 +1,172 @@
1
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
2
+
3
+ 1. Definitions.
4
+
5
+ "License" shall mean the terms and conditions for use, reproduction,
6
+ and distribution as defined by Sections 1 through 9 of this document.
7
+
8
+ "Licensor" shall mean the copyright owner or entity authorized by
9
+ the copyright owner that is granting the License.
10
+
11
+ "Legal Entity" shall mean the union of the acting entity and all
12
+ other entities that control, are controlled by, or are under common
13
+ control with that entity. For the purposes of this definition,
14
+ "control" means (i) the power, direct or indirect, to cause the
15
+ direction or management of such entity, whether by contract or
16
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
17
+ outstanding shares, or (iii) beneficial ownership of such entity.
18
+
19
+ "You" (or "Your") shall mean an individual or Legal Entity
20
+ exercising permissions granted by this License.
21
+
22
+ "Source" form shall mean the preferred form for making modifications,
23
+ including but not limited to software source code, documentation
24
+ source, and configuration files.
25
+
26
+ "Object" form shall mean any form resulting from mechanical
27
+ transformation or translation of a Source form, including but
28
+ not limited to compiled object code, generated documentation,
29
+ and conversions to other media types.
30
+
31
+ "Work" shall mean the work of authorship, whether in Source or
32
+ Object form, made available under the License, as indicated by a
33
+ copyright notice that is included in or attached to the work
34
+ (an example is provided in the Appendix below).
35
+
36
+ "Derivative Works" shall mean any work, whether in Source or Object
37
+ form, that is based on (or derived from) the Work and for which the
38
+ editorial revisions, annotations, elaborations, or other modifications
39
+ represent, as a whole, an original work of authorship. For the purposes
40
+ of this License, Derivative Works shall not include works that remain
41
+ separable from, or merely link (or bind by name) to the interfaces of,
42
+ the Work and Derivative Works thereof.
43
+
44
+ "Contribution" shall mean any work of authorship, including
45
+ the original version of the Work and any modifications or additions
46
+ to that Work or Derivative Works thereof, that is intentionally
47
+ submitted to Licensor for inclusion in the Work by the copyright owner
48
+ or by an individual or Legal Entity authorized to submit on behalf of
49
+ the copyright owner. For the purposes of this definition, "submitted"
50
+ means any form of electronic, verbal, or written communication sent
51
+ to the Licensor or its representatives, including but not limited to
52
+ communication on electronic mailing lists, source code control systems,
53
+ and issue tracking systems that are managed by, or on behalf of, the
54
+ Licensor for the purpose of discussing and improving the Work, but
55
+ excluding communication that is conspicuously marked or otherwise
56
+ designated in writing by the copyright owner as "Not a Contribution."
57
+
58
+ "Contributor" shall mean Licensor and any individual or Legal Entity
59
+ on behalf of whom a Contribution has been received by Licensor and
60
+ subsequently incorporated within the Work.
61
+
62
+ 2. Grant of Copyright License. Subject to the terms and conditions of
63
+ this License, each Contributor hereby grants to You a perpetual,
64
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
65
+ copyright license to reproduce, prepare Derivative Works of,
66
+ publicly display, publicly perform, sublicense, and distribute the
67
+ Work and such Derivative Works in Source or Object form.
68
+
69
+ 3. Grant of Patent License. Subject to the terms and conditions of
70
+ this License, each Contributor hereby grants to You a perpetual,
71
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
72
+ (except as stated in this section) patent license to make, have made,
73
+ use, offer to sell, sell, import, and otherwise transfer the Work,
74
+ where such license applies only to those patent claims licensable
75
+ by such Contributor that are necessarily infringed by their
76
+ Contribution(s) alone or by combination of their Contribution(s)
77
+ with the Work to which such Contribution(s) was submitted. If You
78
+ institute patent litigation against any entity (including a
79
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
80
+ or a Contribution incorporated within the Work constitutes direct
81
+ or contributory patent infringement, then any patent licenses
82
+ granted to You under this License for that Work shall terminate
83
+ as of the date such litigation is filed.
84
+
85
+ 4. Redistribution. You may reproduce and distribute copies of the
86
+ Work or Derivative Works thereof in any medium, with or without
87
+ modifications, and in Source or Object form, provided that You
88
+ meet the following conditions:
89
+
90
+ (a) You must give any other recipients of the Work or
91
+ Derivative Works a copy of this License; and
92
+
93
+ (b) You must cause any modified files to carry prominent notices
94
+ stating that You changed the files; and
95
+
96
+ (c) You must retain, in the Source form of any Derivative Works
97
+ that You distribute, all copyright, patent, trademark, and
98
+ attribution notices from the Source form of the Work,
99
+ excluding those notices that do not pertain to any part of
100
+ the Derivative Works; and
101
+
102
+ (d) If the Work includes a "NOTICE" text file as part of its
103
+ distribution, then any Derivative Works that You distribute must
104
+ include a readable copy of the attribution notices contained
105
+ within such NOTICE file, excluding those notices that do not
106
+ pertain to any part of the Derivative Works, in at least one
107
+ of the following places: within a NOTICE text file distributed
108
+ as part of the Derivative Works; within the Source form or
109
+ documentation, if provided along with the Derivative Works; or,
110
+ within a display generated by the Derivative Works, if and
111
+ wherever such third-party notices normally appear. The contents
112
+ of the NOTICE file are for informational purposes only and
113
+ do not modify the License. You may add Your own attribution
114
+ notices within Derivative Works that You distribute, alongside
115
+ or as an addendum to the NOTICE text from the Work, provided
116
+ that such additional attribution notices cannot be construed
117
+ as modifying the License.
118
+
119
+ You may add Your own copyright statement to Your modifications and
120
+ may provide additional or different license terms and conditions
121
+ for use, reproduction, or distribution of Your modifications, or
122
+ for any such Derivative Works as a whole, provided Your use,
123
+ reproduction, and distribution of the Work otherwise complies with
124
+ the conditions stated in this License.
125
+
126
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
127
+ any Contribution intentionally submitted for inclusion in the Work
128
+ by You to the Licensor shall be under the terms and conditions of
129
+ this License, without any additional terms or conditions.
130
+ Notwithstanding the above, nothing herein shall supersede or modify
131
+ the terms of any separate license agreement you may have executed
132
+ with Licensor regarding such Contributions.
133
+
134
+ 6. Trademarks. This License does not grant permission to use the trade
135
+ names, trademarks, service marks, or product names of the Licensor,
136
+ except as required for reasonable and customary use in describing the
137
+ origin of the Work and reproducing the content of the NOTICE file.
138
+
139
+ 7. Disclaimer of Warranty. Unless required by applicable law or
140
+ agreed to in writing, Licensor provides the Work (and each
141
+ Contributor provides its Contributions) on an "AS IS" BASIS,
142
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
143
+ implied, including, without limitation, any warranties or conditions
144
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
145
+ PARTICULAR PURPOSE. You are solely responsible for determining the
146
+ appropriateness of using or redistributing the Work and assume any
147
+ risks associated with Your exercise of permissions under this License.
148
+
149
+ 8. Limitation of Liability. In no event and under no legal theory,
150
+ whether in tort (including negligence), contract, or otherwise,
151
+ unless required by applicable law (such as deliberate and grossly
152
+ negligent acts) or agreed to in writing, shall any Contributor be
153
+ liable to You for damages, including any direct, indirect, special,
154
+ incidental, or consequential damages of any character arising as a
155
+ result of this License or out of the use or inability to use the
156
+ Work (including but not limited to damages for loss of goodwill,
157
+ work stoppage, computer failure or malfunction, or any and all
158
+ other commercial damages or losses), even if such Contributor
159
+ has been advised of the possibility of such damages.
160
+
161
+ 9. Accepting Warranty or Additional Liability. While redistributing
162
+ the Work or Derivative Works thereof, You may choose to offer,
163
+ and charge a fee for, acceptance of support, warranty, indemnity,
164
+ or other liability obligations and/or rights consistent with this
165
+ License. However, in accepting such obligations, You may act only
166
+ on Your own behalf and on Your sole responsibility, not on behalf
167
+ of any other Contributor, and only if You agree to indemnify,
168
+ defend, and hold each Contributor harmless for any liability
169
+ incurred by, or claims asserted against, such Contributor by reason
170
+ of your accepting any such warranty or additional liability.
171
+
172
+ END OF TERMS AND CONDITIONS