yolice 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'colorize'
4
+ gem 'rake'
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: []