yolice 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []