licensee 9.0.0 → 9.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/licensee/license.rb +12 -23
- data/lib/licensee/license_meta.rb +56 -0
- data/lib/licensee/version.rb +1 -1
- data/lib/licensee.rb +1 -0
- data/spec/licensee/license_meta_spec.rb +110 -0
- data/spec/licensee/license_spec.rb +16 -1
- data/spec/spec_helper.rb +6 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ab35a217757c184a6a0b91d6536c8ab7a8b19c44
|
4
|
+
data.tar.gz: 9cdabe6b6e388c2ef893f8e691aa1aa5aa7e78b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41e4cff0f46f818a9cacfc83b7e0bb495b59152e29e9a95a12a9296e0a87d0b051ac009c329ef435804051076281724ece0c18612ebe7e38a53ed230830f7466
|
7
|
+
data.tar.gz: d69564bffdc75c6af44a36795d7cee2c5dddf8b91cb65ce92e1eb3345ecc31500c31a2a2a47b828c0476181356a39c76c00a0e6f94775a3b1e27224a7d55d9ce
|
data/lib/licensee/license.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'uri'
|
2
|
-
require 'yaml'
|
3
2
|
|
4
3
|
module Licensee
|
5
4
|
class InvalidLicense < ArgumentError; end
|
@@ -60,11 +59,8 @@ module Licensee
|
|
60
59
|
|
61
60
|
attr_reader :key
|
62
61
|
|
63
|
-
#
|
64
|
-
YAML_DEFAULTS =
|
65
|
-
'featured' => false,
|
66
|
-
'hidden' => true
|
67
|
-
}.freeze
|
62
|
+
# Preserved for backwards compatability
|
63
|
+
YAML_DEFAULTS = Licensee::LicenseMeta.members
|
68
64
|
|
69
65
|
# Pseudo-license are license placeholders with no content
|
70
66
|
#
|
@@ -75,6 +71,8 @@ module Licensee
|
|
75
71
|
PSEUDO_LICENSES = %w[other no-license].freeze
|
76
72
|
|
77
73
|
include Licensee::ContentHelper
|
74
|
+
extend Forwardable
|
75
|
+
def_delegators :meta, *LicenseMeta.helper_methods
|
78
76
|
|
79
77
|
def initialize(key)
|
80
78
|
@key = key.downcase
|
@@ -87,33 +85,20 @@ module Licensee
|
|
87
85
|
|
88
86
|
# License metadata from YAML front matter with defaults merged in
|
89
87
|
def meta
|
90
|
-
@meta ||=
|
91
|
-
return YAML_DEFAULTS unless parts && parts[1]
|
92
|
-
meta = YAML.safe_load(parts[1])
|
93
|
-
YAML_DEFAULTS.merge(meta)
|
94
|
-
end
|
88
|
+
@meta ||= LicenseMeta.from_yaml(yaml)
|
95
89
|
end
|
96
90
|
|
97
91
|
# Returns the human-readable license name
|
98
92
|
def name
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
def nickname
|
103
|
-
meta['nickname']
|
93
|
+
title ? title : key.capitalize
|
104
94
|
end
|
105
95
|
|
106
96
|
def name_without_version
|
107
97
|
/(.+?)(( v?\d\.\d)|$)/.match(name)[1]
|
108
98
|
end
|
109
99
|
|
110
|
-
def
|
111
|
-
|
112
|
-
end
|
113
|
-
alias featured featured?
|
114
|
-
|
115
|
-
def hidden?
|
116
|
-
meta['hidden']
|
100
|
+
def other?
|
101
|
+
key == 'other'
|
117
102
|
end
|
118
103
|
|
119
104
|
def gpl?
|
@@ -183,5 +168,9 @@ module Licensee
|
|
183
168
|
return unless raw_content
|
184
169
|
@parts ||= raw_content.match(/\A(---\n.*\n---\n+)?(.*)/m).to_a
|
185
170
|
end
|
171
|
+
|
172
|
+
def yaml
|
173
|
+
@yaml ||= parts[1] if parts
|
174
|
+
end
|
186
175
|
end
|
187
176
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Licensee
|
4
|
+
class LicenseMeta < Struct.new(
|
5
|
+
:title, :spdx_id, :source, :description, :how, :conditions, :permissions,
|
6
|
+
:limitations, :using, :featured, :hidden, :nickname, :note
|
7
|
+
)
|
8
|
+
|
9
|
+
# These should be in sync with choosealicense.com's collection defaults
|
10
|
+
DEFAULTS = {
|
11
|
+
'featured' => false,
|
12
|
+
'hidden' => true
|
13
|
+
}.freeze
|
14
|
+
|
15
|
+
PREDICATE_FIELDS = %i[featured hidden].freeze
|
16
|
+
|
17
|
+
class << self
|
18
|
+
# Create a new LicenseMeta from YAML
|
19
|
+
#
|
20
|
+
# yaml - the raw YAML string
|
21
|
+
#
|
22
|
+
# returns a LicenseMeta with defaults set
|
23
|
+
def from_yaml(yaml)
|
24
|
+
return from_hash({}) if yaml.nil? || yaml.to_s.empty?
|
25
|
+
from_hash YAML.safe_load(yaml)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Create a new LicenseMeta from a hash
|
29
|
+
#
|
30
|
+
# hash - the hash of key/value meta pairs
|
31
|
+
#
|
32
|
+
# returns a LicenseMeta with defaults set
|
33
|
+
def from_hash(hash)
|
34
|
+
hash = DEFAULTS.merge(hash)
|
35
|
+
hash['spdx_id'] = hash.delete('spdx-id')
|
36
|
+
ordered_array = hash.values_at(*members.map(&:to_s))
|
37
|
+
new(*ordered_array)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Array of symbolized helper methods to expose on the License class
|
41
|
+
def helper_methods
|
42
|
+
members - PREDICATE_FIELDS + PREDICATE_FIELDS.map { |f| "#{f}?".to_sym }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
PREDICATE_FIELDS.each do |field|
|
47
|
+
alias_method "#{field}?".to_sym, field
|
48
|
+
end
|
49
|
+
|
50
|
+
# Backward compatibalize `#["spdx-id"]` calls to avoid a breaking change
|
51
|
+
def [](key)
|
52
|
+
key = 'spdx_id' if key == 'spdx-id'
|
53
|
+
super(key)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/licensee/version.rb
CHANGED
data/lib/licensee.rb
CHANGED
@@ -6,6 +6,7 @@ require 'rugged'
|
|
6
6
|
module Licensee
|
7
7
|
autoload :ContentHelper, 'licensee/content_helper'
|
8
8
|
autoload :License, 'licensee/license'
|
9
|
+
autoload :LicenseMeta, 'licensee/license_meta'
|
9
10
|
autoload :Rule, 'licensee/rule'
|
10
11
|
autoload :Matchers, 'licensee/matchers'
|
11
12
|
autoload :Projects, 'licensee/projects'
|
@@ -0,0 +1,110 @@
|
|
1
|
+
RSpec.describe Licensee::LicenseMeta do
|
2
|
+
subject { Licensee::License.find('mit').meta }
|
3
|
+
|
4
|
+
meta_fields.each do |field|
|
5
|
+
next if field['name'] == 'redirect_from'
|
6
|
+
|
7
|
+
context "the #{field['name']} field" do
|
8
|
+
let(:name) { field['name'].tr('-', '_') }
|
9
|
+
let(:method) { name.to_sym }
|
10
|
+
|
11
|
+
it 'responds to the field as a method' do
|
12
|
+
expect(subject).to respond_to(method)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'responds to the field as a hash key' do
|
16
|
+
if field['required']
|
17
|
+
expect(subject[name]).to_not be_nil
|
18
|
+
else
|
19
|
+
expect { subject[name] }.not_to raise_error
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'predicate methods' do
|
26
|
+
described_class::PREDICATE_FIELDS.each do |field|
|
27
|
+
context "the #{field}? method" do
|
28
|
+
it 'responds' do
|
29
|
+
expect(subject).to respond_to("#{field}?".to_sym)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'is boolean' do
|
33
|
+
expect(subject.send("#{field}?".to_sym)).to be(true).or be(false)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context '#from_hash' do
|
40
|
+
let(:hash) do
|
41
|
+
{ 'title' => 'Test license', 'description' => 'A test license' }
|
42
|
+
end
|
43
|
+
subject { described_class.from_hash(hash) }
|
44
|
+
|
45
|
+
it 'sets values' do
|
46
|
+
expect(subject.title).to eql('Test license')
|
47
|
+
expect(subject.description).to eql('A test license')
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'setting defaults' do
|
51
|
+
let(:hash) { {} }
|
52
|
+
|
53
|
+
described_class::DEFAULTS.each do |key, value|
|
54
|
+
it "sets the #{key} field to #{value}" do
|
55
|
+
expect(subject[key]).to eql(value)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context 'spdx-id' do
|
61
|
+
let(:hash) { { 'spdx-id' => 'foo' } }
|
62
|
+
|
63
|
+
it 'renames spdx-id to spdx_id' do
|
64
|
+
expect(subject['spdx_id']).to eql('foo')
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'exposes spdx-id via #[]' do
|
68
|
+
expect(subject['spdx-id']).to eql('foo')
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
context '#from_yaml' do
|
74
|
+
let(:yaml) { "title: Test license\ndescription: A test license" }
|
75
|
+
subject { described_class.from_yaml(yaml) }
|
76
|
+
|
77
|
+
it 'parses yaml' do
|
78
|
+
expect(subject.title).to eql('Test license')
|
79
|
+
expect(subject.description).to eql('A test license')
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'sets defaults' do
|
83
|
+
expect(subject.hidden).to eql(true)
|
84
|
+
expect(subject.featured).to eql(false)
|
85
|
+
end
|
86
|
+
|
87
|
+
context 'nil yaml' do
|
88
|
+
let(:yaml) { nil }
|
89
|
+
|
90
|
+
it 'returns defaults' do
|
91
|
+
expect(subject.hidden).to eql(true)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'empty yaml' do
|
96
|
+
let(:yaml) { '' }
|
97
|
+
|
98
|
+
it 'returns defaults' do
|
99
|
+
expect(subject.featured).to eql(false)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'returns the list of helper methods' do
|
105
|
+
expect(described_class.helper_methods.length).to eql(13)
|
106
|
+
expect(described_class.helper_methods).to include(:hidden?)
|
107
|
+
expect(described_class.helper_methods).to_not include(:hidden)
|
108
|
+
expect(described_class.helper_methods).to include(:title)
|
109
|
+
end
|
110
|
+
end
|
@@ -127,11 +127,26 @@ RSpec.describe Licensee::License do
|
|
127
127
|
expect(mit.key).to eql('mit')
|
128
128
|
end
|
129
129
|
|
130
|
+
it 'exposes the SPDX ID' do
|
131
|
+
expect(gpl.spdx_id).to eql('GPL-3.0')
|
132
|
+
end
|
133
|
+
|
134
|
+
context '#other?' do
|
135
|
+
it 'knows MIT is not other' do
|
136
|
+
expect(gpl).to_not be_other
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'knows the other license is other?' do
|
140
|
+
expect(other).to be_other
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
130
144
|
context 'meta' do
|
131
145
|
it 'exposes license meta' do
|
132
146
|
expect(mit).to respond_to(:meta)
|
133
|
-
expect(mit.meta).to
|
147
|
+
expect(mit.meta).to respond_to(:title)
|
134
148
|
expect(mit.meta['title']).to eql('MIT License')
|
149
|
+
expect(mit.meta.title).to eql('MIT License')
|
135
150
|
end
|
136
151
|
|
137
152
|
it 'includes defaults' do
|
data/spec/spec_helper.rb
CHANGED
@@ -66,6 +66,12 @@ def format_percent(float)
|
|
66
66
|
"#{format('%.2f', float)}%"
|
67
67
|
end
|
68
68
|
|
69
|
+
def meta_fields
|
70
|
+
path = 'vendor/choosealicense.com/_data/meta.yml'
|
71
|
+
path = File.expand_path(path, project_root)
|
72
|
+
YAML.safe_load(File.read(path))
|
73
|
+
end
|
74
|
+
|
69
75
|
RSpec::Matchers.define :be_an_existing_file do
|
70
76
|
match { |path| File.exist?(path) }
|
71
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: licensee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.
|
4
|
+
version: 9.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Balter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rugged
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- lib/licensee.rb
|
109
109
|
- lib/licensee/content_helper.rb
|
110
110
|
- lib/licensee/license.rb
|
111
|
+
- lib/licensee/license_meta.rb
|
111
112
|
- lib/licensee/matchers.rb
|
112
113
|
- lib/licensee/matchers/cabal.rb
|
113
114
|
- lib/licensee/matchers/copyright.rb
|
@@ -156,6 +157,7 @@ files:
|
|
156
157
|
- spec/fixtures/wrk-modified-apache/LICENSE
|
157
158
|
- spec/integration_spec.rb
|
158
159
|
- spec/licensee/content_helper_spec.rb
|
160
|
+
- spec/licensee/license_meta_spec.rb
|
159
161
|
- spec/licensee/license_spec.rb
|
160
162
|
- spec/licensee/matchers/cabal_matcher_spec.rb
|
161
163
|
- spec/licensee/matchers/copyright_matcher_spec.rb
|