yolice 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/README.md +21 -0
- data/Rakefile +15 -0
- data/lib/licenses/license_features.yml +302 -0
- data/lib/yolice.rb +133 -0
- metadata +50 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#Yolice
|
2
|
+
|
3
|
+
###Easy licensing for lazy people
|
4
|
+
|
5
|
+
__DISCLAIMER__ - _I'm not a lawyer, and this gem is very simple. The aim is awareness, not to cover your ass._
|
6
|
+
|
7
|
+
Just add the gem to your Gemfile:
|
8
|
+
|
9
|
+
gem 'yolice'
|
10
|
+
|
11
|
+
Then you can run the rake tasks.
|
12
|
+
|
13
|
+
###Tasks
|
14
|
+
|
15
|
+
* List all licenses:
|
16
|
+
|
17
|
+
bundle exec rake licensing:list
|
18
|
+
|
19
|
+
* Explain my rights and obligations:
|
20
|
+
|
21
|
+
bundle exec rake licensing:explain
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require './lib/yolice'
|
2
|
+
|
3
|
+
namespace :licenses do
|
4
|
+
|
5
|
+
desc "List the licenses of your gems"
|
6
|
+
task :list do
|
7
|
+
puts Yolice::YoLicense.new.raw_licenses
|
8
|
+
end
|
9
|
+
|
10
|
+
desc "Explain what licensing situation"
|
11
|
+
task :explain do
|
12
|
+
Yolice::YoLicense.new.match_licenses.col_features.print_explanations
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,302 @@
|
|
1
|
+
---
|
2
|
+
features:
|
3
|
+
include-copyright:
|
4
|
+
name: License and copyright notice
|
5
|
+
required: Include a copy of the license and copyright notice with the code.
|
6
|
+
document-changes:
|
7
|
+
name: State Changes
|
8
|
+
required: Indicate significant changes made to the code.
|
9
|
+
disclose-source:
|
10
|
+
name: Disclose source
|
11
|
+
required: Source code must be made available when distributing the software. In the case of LGPL, the source for the library (and not the entire program) must be made available.
|
12
|
+
library-usage:
|
13
|
+
name: Library usage
|
14
|
+
permitted: The library may be used within a non-open-source application.
|
15
|
+
rename:
|
16
|
+
name:
|
17
|
+
required: You must change the name of the software if you modify it.
|
18
|
+
commercial-use:
|
19
|
+
name: Commercial use
|
20
|
+
permitted: This software and derivatives may be used for commercial purposes.
|
21
|
+
modifications:
|
22
|
+
name: Modification
|
23
|
+
permitted: This software may be modified.
|
24
|
+
forbidden: This software may not be modified.
|
25
|
+
distribution:
|
26
|
+
name: Distribution
|
27
|
+
permitted: You may distribute this software.
|
28
|
+
forbidden: You may not distribute this software.
|
29
|
+
sublicense:
|
30
|
+
name: Sublicensing
|
31
|
+
permitted: You may grant a sublicense to modify and distribute this software to third parties not included in the license.
|
32
|
+
forbidden: You may not grant a sublicense to modify and distribute this software to third parties not included in the license.
|
33
|
+
private-use:
|
34
|
+
name: Private use
|
35
|
+
permitted: You may use and modify the software without distributing it.
|
36
|
+
patent-grant:
|
37
|
+
name: Patent Grant
|
38
|
+
permitted: This license provides an express grant of patent rights from the contributor to the recipient.
|
39
|
+
trademark-use:
|
40
|
+
name: Use trademark
|
41
|
+
forbidden: While this may be implicitly true of all licenses, this license explicitly states that you may NOT use the names, logos, or trademarks of contributors.
|
42
|
+
no-liability:
|
43
|
+
name: Hold liable
|
44
|
+
forbidden: Software is provided without warranty and the software author/license owner cannot be held liable for damages.
|
45
|
+
|
46
|
+
licenses:
|
47
|
+
gpl_2:
|
48
|
+
- feature: include-copyright
|
49
|
+
permission: required
|
50
|
+
- feature: document-changes
|
51
|
+
permission: required
|
52
|
+
- feature: disclose-source
|
53
|
+
permission: required
|
54
|
+
- feature: commercial-use
|
55
|
+
permission: permitted
|
56
|
+
- feature: modifications
|
57
|
+
permission: permitted
|
58
|
+
- feature: distribution
|
59
|
+
permission: permitted
|
60
|
+
- feature: patent-grant
|
61
|
+
permission: permitted
|
62
|
+
- feature: private-use
|
63
|
+
permission: permitted
|
64
|
+
- feature: no-liability
|
65
|
+
permission: forbidden
|
66
|
+
- feature: sublicense
|
67
|
+
permission: forbidden
|
68
|
+
apache_2:
|
69
|
+
- feature: include-copyright
|
70
|
+
permission: required
|
71
|
+
- feature: document-changes
|
72
|
+
permission: required
|
73
|
+
- feature: commercial-use
|
74
|
+
permission: permitted
|
75
|
+
- feature: modifications
|
76
|
+
permission: permitted
|
77
|
+
- feature: distribution
|
78
|
+
permission: permitted
|
79
|
+
- feature: patent-grant
|
80
|
+
permission: permitted
|
81
|
+
- feature: private-use
|
82
|
+
permission: permitted
|
83
|
+
- feature: no-liability
|
84
|
+
permission: forbidden
|
85
|
+
- feature: sublicense
|
86
|
+
permission: permitted
|
87
|
+
- feature: trademark-use
|
88
|
+
permission: forbidden
|
89
|
+
mit:
|
90
|
+
- feature: include-copyright
|
91
|
+
permission: required
|
92
|
+
- feature: commercial-use
|
93
|
+
permission: permitted
|
94
|
+
- feature: modifications
|
95
|
+
permission: permitted
|
96
|
+
- feature: distribution
|
97
|
+
permission: permitted
|
98
|
+
- feature: private-use
|
99
|
+
permission: permitted
|
100
|
+
- feature: no-liability
|
101
|
+
permission: forbidden
|
102
|
+
- feature: sublicense
|
103
|
+
permission: permitted
|
104
|
+
bsd_2_clause:
|
105
|
+
- feature: include-copyright
|
106
|
+
permission: required
|
107
|
+
- feature: commercial-use
|
108
|
+
permission: permitted
|
109
|
+
- feature: modifications
|
110
|
+
permission: permitted
|
111
|
+
- feature: distribution
|
112
|
+
permission: permitted
|
113
|
+
- feature: private-use
|
114
|
+
permission: permitted
|
115
|
+
- feature: no-liability
|
116
|
+
permission: forbidden
|
117
|
+
- feature: sublicense
|
118
|
+
permission: permitted
|
119
|
+
affero_gpl:
|
120
|
+
- feature: include-copyright
|
121
|
+
permission: required
|
122
|
+
- feature: document-changes
|
123
|
+
permission: required
|
124
|
+
- feature: disclose-source
|
125
|
+
permission: required
|
126
|
+
- feature: commercial-use
|
127
|
+
permission: permitted
|
128
|
+
- feature: modifications
|
129
|
+
permission: permitted
|
130
|
+
- feature: distribution
|
131
|
+
permission: permitted
|
132
|
+
- feature: private-use
|
133
|
+
permission: permitted
|
134
|
+
- feature: no-liability
|
135
|
+
permission: forbidden
|
136
|
+
- feature: sublicense
|
137
|
+
permission: forbidden
|
138
|
+
eclipse_v1:
|
139
|
+
- feature: include-copyright
|
140
|
+
permission: required
|
141
|
+
- feature: disclose-source
|
142
|
+
permission: required
|
143
|
+
- feature: commercial-use
|
144
|
+
permission: permitted
|
145
|
+
- feature: modifications
|
146
|
+
permission: permitted
|
147
|
+
- feature: distribution
|
148
|
+
permission: permitted
|
149
|
+
- feature: patent-grant
|
150
|
+
permission: permitted
|
151
|
+
- feature: private-use
|
152
|
+
permission: permitted
|
153
|
+
- feature: no-liability
|
154
|
+
permission: forbidden
|
155
|
+
- feature: sublicense
|
156
|
+
permission: permitted
|
157
|
+
public_domain:
|
158
|
+
- feature: commercial-use
|
159
|
+
permission: permitted
|
160
|
+
- feature: modifications
|
161
|
+
permission: permitted
|
162
|
+
- feature: distribution
|
163
|
+
permission: permitted
|
164
|
+
- feature: private-use
|
165
|
+
permission: permitted
|
166
|
+
- feature: no-liability
|
167
|
+
permission: forbidden
|
168
|
+
- feature: sublicense
|
169
|
+
permission: permitted
|
170
|
+
lgpl_3:
|
171
|
+
- feature: include-copyright
|
172
|
+
permission: required
|
173
|
+
- feature: disclose-source
|
174
|
+
permission: required
|
175
|
+
- feature: library-usage
|
176
|
+
permission: permitted
|
177
|
+
- feature: commercial-use
|
178
|
+
permission: permitted
|
179
|
+
- feature: modifications
|
180
|
+
permission: permitted
|
181
|
+
- feature: distribution
|
182
|
+
permission: permitted
|
183
|
+
- feature: patent-grant
|
184
|
+
permission: permitted
|
185
|
+
- feature: private-use
|
186
|
+
permission: permitted
|
187
|
+
- feature: no-liability
|
188
|
+
permission: forbidden
|
189
|
+
- feature: sublicense
|
190
|
+
permission: permitted
|
191
|
+
gpl_3:
|
192
|
+
- feature: include-copyright
|
193
|
+
permission: required
|
194
|
+
- feature: document-changes
|
195
|
+
permission: required
|
196
|
+
- feature: disclose-source
|
197
|
+
permission: required
|
198
|
+
- feature: commercial-use
|
199
|
+
permission: permitted
|
200
|
+
- feature: modifications
|
201
|
+
permission: permitted
|
202
|
+
- feature: distribution
|
203
|
+
permission: permitted
|
204
|
+
- feature: patent-grant
|
205
|
+
permission: permitted
|
206
|
+
- feature: private-use
|
207
|
+
permission: permitted
|
208
|
+
- feature: no-liability
|
209
|
+
permission: forbidden
|
210
|
+
- feature: sublicense
|
211
|
+
permission: forbidden
|
212
|
+
mozilla_2:
|
213
|
+
- feature: include-copyright
|
214
|
+
permission: required
|
215
|
+
- feature: disclose-source
|
216
|
+
permission: required
|
217
|
+
- feature: commercial-use
|
218
|
+
permission: permitted
|
219
|
+
- feature: modifications
|
220
|
+
permission: permitted
|
221
|
+
- feature: distribution
|
222
|
+
permission: permitted
|
223
|
+
- feature: patent-grant
|
224
|
+
permission: permitted
|
225
|
+
- feature: private-use
|
226
|
+
permission: permitted
|
227
|
+
- feature: no-liability
|
228
|
+
permission: forbidden
|
229
|
+
- feature: sublicense
|
230
|
+
permission: permitted
|
231
|
+
- feature: trademark-use
|
232
|
+
permission: forbidden
|
233
|
+
bsd_3_clause:
|
234
|
+
- feature: include-copyright
|
235
|
+
permission: required
|
236
|
+
- feature: commercial-use
|
237
|
+
permission: permitted
|
238
|
+
- feature: modifications
|
239
|
+
permission: permitted
|
240
|
+
- feature: distribution
|
241
|
+
permission: permitted
|
242
|
+
- feature: private-use
|
243
|
+
permission: permitted
|
244
|
+
- feature: no-liability
|
245
|
+
permission: forbidden
|
246
|
+
- feature: sublicense
|
247
|
+
permission: permitted
|
248
|
+
- feature: trademark-use
|
249
|
+
permission: forbidden
|
250
|
+
no-license:
|
251
|
+
- feature: include-copyright
|
252
|
+
permission: required
|
253
|
+
- feature: commercial-use
|
254
|
+
permission: permitted
|
255
|
+
- feature: private-use
|
256
|
+
permission: permitted
|
257
|
+
- feature: modifications
|
258
|
+
permission: forbidden
|
259
|
+
- feature: distribution
|
260
|
+
permission: forbidden
|
261
|
+
- feature: sublicense
|
262
|
+
permission: forbidden
|
263
|
+
lgpl_2_1:
|
264
|
+
- feature: include-copyright
|
265
|
+
permission: required
|
266
|
+
- feature: disclose-source
|
267
|
+
permission: required
|
268
|
+
- feature: library-usage
|
269
|
+
permission: permitted
|
270
|
+
- feature: commercial-use
|
271
|
+
permission: permitted
|
272
|
+
- feature: modifications
|
273
|
+
permission: permitted
|
274
|
+
- feature: distribution
|
275
|
+
permission: permitted
|
276
|
+
- feature: patent-grant
|
277
|
+
permission: permitted
|
278
|
+
- feature: private-use
|
279
|
+
permission: permitted
|
280
|
+
- feature: no-liability
|
281
|
+
permission: forbidden
|
282
|
+
- feature: sublicense
|
283
|
+
permission: permitted
|
284
|
+
artistic:
|
285
|
+
- feature: include-copyright
|
286
|
+
permission: required
|
287
|
+
- feature: document-changes
|
288
|
+
permission: required
|
289
|
+
- feature: commercial-use
|
290
|
+
permission: permitted
|
291
|
+
- feature: modifications
|
292
|
+
permission: permitted
|
293
|
+
- feature: distribution
|
294
|
+
permission: permitted
|
295
|
+
- feature: private-use
|
296
|
+
permission: permitted
|
297
|
+
- feature: no-liability
|
298
|
+
permission: forbidden
|
299
|
+
- feature: sublicense
|
300
|
+
permission: permitted
|
301
|
+
- feature: trademark-use
|
302
|
+
permission: forbidden
|
data/lib/yolice.rb
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'ostruct'
|
3
|
+
require 'colorize'
|
4
|
+
|
5
|
+
class String
|
6
|
+
alias_method :forbidden, :red
|
7
|
+
alias_method :permitted, :green
|
8
|
+
alias_method :required, :yellow
|
9
|
+
end
|
10
|
+
|
11
|
+
module Yolice
|
12
|
+
|
13
|
+
class YoLicense
|
14
|
+
attr_reader :license_features
|
15
|
+
attr_reader :licenses
|
16
|
+
attr_reader :raw_licenses
|
17
|
+
attr_reader :features
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
get_raw_licenses
|
21
|
+
@licenses = []
|
22
|
+
@features = {}
|
23
|
+
@license_features = OpenStruct.new.marshal_load(load_license_config)
|
24
|
+
end
|
25
|
+
|
26
|
+
def match_licenses
|
27
|
+
@raw_licenses.each do |gem_license|
|
28
|
+
@licenses << fetch_most_likely(compare_to_licenses(gem_license))
|
29
|
+
end
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def col_features
|
34
|
+
@licenses.each do |l|
|
35
|
+
@license_features["licenses"][l].each do |f|
|
36
|
+
unless @features.include? f["feature"] && @features[f["feature"]] == "forbidden"
|
37
|
+
@features[f["feature"]] = f["permission"]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
def print_explanations
|
45
|
+
puts "Here is your license situation: "
|
46
|
+
puts "=" * 20
|
47
|
+
@features.each do |f|
|
48
|
+
puts "#{@license_features["features"][f[0]]["name"]} - #{@license_features["features"][f[0]][f[1]]}".send f[1]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def load_license_config
|
54
|
+
YAML.load_file(File.join File.dirname(__FILE__), 'licenses', 'license_features.yml')
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_raw_licenses
|
58
|
+
@raw_licenses = []
|
59
|
+
Gem::Specification.each do |g|
|
60
|
+
if g.licenses.count > 0
|
61
|
+
@raw_licenses << g.licenses
|
62
|
+
end
|
63
|
+
end
|
64
|
+
@raw_licenses.flatten!.uniq!
|
65
|
+
end
|
66
|
+
|
67
|
+
def preprocess_raw_license(raw_text)
|
68
|
+
raw_text.downcase.gsub(/[\.\-\s]/, "_")
|
69
|
+
end
|
70
|
+
|
71
|
+
def compare_to_licenses(gem_license)
|
72
|
+
map_results @license_features["licenses"].keys.map {|license_name| get_sorensen_index(preprocess_raw_license(gem_license), license_name)}
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_sorensen_index(gem_license, license_name)
|
76
|
+
SorensenIndex.new(gem_license, license_name).calculate
|
77
|
+
end
|
78
|
+
|
79
|
+
def map_results(results)
|
80
|
+
Hash[@license_features["licenses"].keys.flatten.zip results]
|
81
|
+
end
|
82
|
+
|
83
|
+
def fetch_most_likely(result_hash)
|
84
|
+
result_hash.max_by {|k,v| v}[0]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class SorensenIndex
|
89
|
+
def initialize(*strings)
|
90
|
+
@bigram_sets = strings.map {|s| BigramSet.new(s)}
|
91
|
+
end
|
92
|
+
|
93
|
+
def calculate
|
94
|
+
2 * similarities.count / total.to_f
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
def similarities
|
99
|
+
@bigram_sets.first & @bigram_sets.last
|
100
|
+
end
|
101
|
+
|
102
|
+
def total
|
103
|
+
@bigram_sets.first.count + @bigram_sets.last.count
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
class BigramSet
|
108
|
+
attr_reader :bigrams
|
109
|
+
|
110
|
+
def initialize(string)
|
111
|
+
get_bigrams string.dup
|
112
|
+
end
|
113
|
+
|
114
|
+
def &(alt_set)
|
115
|
+
@bigrams & alt_set.bigrams
|
116
|
+
end
|
117
|
+
|
118
|
+
def count
|
119
|
+
@bigrams.count
|
120
|
+
end
|
121
|
+
|
122
|
+
private
|
123
|
+
def get_bigrams(str)
|
124
|
+
@bigrams = []
|
125
|
+
while str.length > 1 do
|
126
|
+
@bigrams << str[0..1]
|
127
|
+
str[0] = ''
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yolice
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Andrew King
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-10-31 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: A lazy way to meet your licensing requirements.
|
15
|
+
email: me@andrewsking.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- Rakefile
|
21
|
+
- Gemfile
|
22
|
+
- README.md
|
23
|
+
- lib/yolice.rb
|
24
|
+
- lib/licenses/license_features.yml
|
25
|
+
homepage: http://rubygems.org/gems/yolice
|
26
|
+
licenses:
|
27
|
+
- MIT
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubyforge_project:
|
46
|
+
rubygems_version: 1.8.25
|
47
|
+
signing_key:
|
48
|
+
specification_version: 3
|
49
|
+
summary: Simple licensing
|
50
|
+
test_files: []
|