papers 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDZiZjYwYjgwNzU4NmQwYWRlMjA2OGExN2U0ZGRlZjIzZTUxMzBkNw==
5
- data.tar.gz: !binary |-
6
- OWQ4YzEzZGQ0YjQ1NDE3NTAzZGE2Yzc5OWY0NzI4ZmJiODc3NTQ1Ng==
2
+ SHA1:
3
+ metadata.gz: d38f6dd8a9213870b3198c533cb7a54731d8d15b
4
+ data.tar.gz: 460c188a68833bd4d67522e36163037a1c65e073
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- OTJkODhlMDE2Nzc3MWRiMjQ2YjNlMmNkMzVkYTM4N2Q1OWIxOWNkOTk1NzBi
10
- OTJiNTc5NzIxMjJlOTFkMzIxNjE1YWQwM2YzNjRhMDQyZWJhYWQxODIzMTE2
11
- ZDU0NjVkM2Y5YTViYmM0MzgwNWJiNWVhYjFmNGJhYjBkNWU3ZTU=
12
- data.tar.gz: !binary |-
13
- Mjc1NTI2MTdkNTE1N2YwZGNjNjU3MDgyM2M1Zjg2ZTJhMzc0Nzc1ZGE5ODk2
14
- YzM4ODI1YzJkZTM4OTAxOGMxMDg4ZTgyOGJkNDRlZjE1YmNiNDVmNWExNjk1
15
- ODIxNmJmNDJmNDU3NzE0Y2NjNzY4MDdmNzM1YWI2YTY2YmVmZDU=
6
+ metadata.gz: a90556c81b2d76635c8ee185c9da05952c75d49762f3731eeb4af79297e929e8491b499d2900978915ad18282df9be4000841f836e46f795c93c68adaa7ddbe9
7
+ data.tar.gz: 55573fadd64de745cedfe761eb48c6eea4ab2a0a23012a3b57f95e1f37b57735c7a82de5329350b2145459d906932730c4da57c11ed02316dd1cb5abd72c653b
data/README.md CHANGED
@@ -2,163 +2,148 @@
2
2
 
3
3
  > "Papers, please."
4
4
 
5
- Check that your Ruby/Rails project's dependencies are licensed with only the licenses you specify. **Papers** will validate that your gems and JavaScript files conform to a whitelist of software licenses. Don't get caught flat-footed by the GPL.
5
+ Check that your Ruby project's dependencies are licensed with only the licenses you specify. **Papers** will validate that your gems and JavaScript files conform to a whitelist of software licenses. Don't get caught flat-footed by the GPL.
6
6
 
7
- # Contents
8
- * [Usage](#usage)
9
- * [Example Validations](#example-validations)
10
- * [Configuration](#configuration)
11
- * [Structure of Dependency Manifest](#dependency-manifest-structure)
12
- * [License](#license)
13
- * [Contributing](#contributing)
7
+ ## Contents
14
8
 
9
+ * [Installation](#installation)
10
+ * [Usage](#usage)
11
+ * [License](#license)
12
+ * [Contributing](#contributing)
15
13
 
16
- # Usage
14
+ ## Installation
17
15
 
18
- tl;dr -- add gem, generate dependency manifest, run spec
16
+ In your application's Gemfile:
19
17
 
20
- ### 0. Add gem to Gemfile
21
-
22
- ```
18
+ ```ruby
23
19
  gem 'papers'
24
20
  ```
25
- ### 1. Generate Dependency Manifest from your bundled gems and JS
26
21
 
27
- ```
28
- $ papers --generate
22
+ Then, after a `bundle install`, run Papers' installer:
23
+
24
+ ```sh
25
+ $ bundle exec papers --generate
29
26
  Created config/papers_manifest.yml!
30
27
  ```
31
- ### 2. Create a Validation Spec (or [use ours](#testing-with-rspec))
32
28
 
33
- ### 3. Run the specs
29
+ This creates a YAML file detailing your bundled gems and JavaScript files:
34
30
 
35
- ```
36
- $ rake spec spec/integration/papers_license_validation_spec.rb
37
- ...
38
- Failures:
31
+ ```yaml
32
+ # config/papers_manifest.yml
33
+ ---
34
+ gems:
35
+ sqlite3-1.3.7:
36
+ license: MIT
37
+ license_url: https://github.com/luislavena/sqlite3-ruby/blob/master/LICENSE
38
+ project_url: https://github.com/luislavena/sqlite3-ruby
39
39
 
40
- 1) Papers License Validation finds no errors during license validation
41
- Failure/Error: expect(validator.errors).to eq([])
40
+ javascripts:
41
+ app/assets/javascripts/application.js:
42
+ license: Unknown
43
+ license_url:
44
+ project_url:
45
+ ```
42
46
 
43
- expected: []
44
- got: ["sass-3.2.12 is licensed under GPL, which is not whitelisted"]
47
+ ## Usage
45
48
 
46
- (compared using ==)
47
- # ./spec/integration/papers_license_validation_spec.rb:14:in `block (2 levels) in <top (required)>'
49
+ Configure Papers in your test suite:
48
50
 
49
- 2) Papers License Validation knows and is satisfied by all dependency licenses
50
- Failure/Error: expect(validator.valid?).to be_true
51
- expected: true value
52
- got: false
53
- # ./spec/integration/papers_license_validation_spec.rb:9:in `block (2 levels) in <top (required)>'
51
+ ```ruby
52
+ # spec/spec_helper.rb or test/test_helper.rb
53
+ require 'papers'
54
54
 
55
- Finished in 0.01043 seconds
56
- 2 examples, 2 failures
57
- ...
55
+ Papers.configure do |config|
56
+ # A whitelist of accepted licenses. Defaults to:
57
+ #
58
+ # [
59
+ # 'MIT',
60
+ # 'BSD',
61
+ # 'Apache 2.0',
62
+ # 'Apache-2.0',
63
+ # 'LGPLv2.1',
64
+ # 'LGPLv3',
65
+ # 'Ruby',
66
+ # 'Manually Reviewed',
67
+ # 'Unlicensed'
68
+ # ]
69
+ config.license_whitelist << 'New Relic'
70
+
71
+ # The location of your dependency manifest. Defaults to config/papers_manifest.yml
72
+ config.manifest_file = File.join('config', 'papers_manifest.yml')
73
+
74
+ # Configures Papers to validate licenses for bundled gems. Defaults to true.
75
+ config.validate_gems = true
76
+
77
+ # Configures Papers to validate licenses for included JavaScript files. Defaults to true.
78
+ config.validate_javascript = true
79
+
80
+ # A list of paths where you have included JavaScript files. Defaults to:
81
+ #
82
+ # %w[app/assets/javascripts lib/assets/javascripts vendor/assets/javascripts]
83
+ config.javascript_paths << File.join('public', 'javascripts')
84
+
85
+ # Configures Papers to validate licenses for bower components. Defaults to false.
86
+ config.validate_bower_components = false
87
+
88
+ # Configures where Papers should look for bower components. Each component
89
+ # must have a .bower.json file in its directory for Papers to see it.
90
+ config.bower_components_path = 'vendor/assets/components'
91
+ end
58
92
  ```
59
93
 
60
- # Example Validations
61
-
62
- ## testing with RSpec
63
-
64
- ```
65
- # => spec/integration/papers_license_validation_spec.rb
94
+ Then, create a test that will validate your dependencies' licenses:
66
95
 
96
+ ```ruby
97
+ # Using RSpec
67
98
  require 'spec_helper'
68
- require 'papers'
69
99
 
70
100
  describe 'Papers License Validation' do
71
-
72
- let(:validator) { Papers::LicenseValidator.new }
101
+ subject(:validator) { Papers::LicenseValidator.new }
73
102
 
74
103
  it 'knows and is satisfied by all dependency licenses' do
75
- expect(validator.valid?).to be_true
76
- end
77
-
78
- it 'finds no errors during license validation' do
79
- validator.valid?
80
- expect(validator.errors).to eq([])
104
+ expect(validator).to be_valid, "License validator failed:\n#{validator.errors.join("\n")}"
81
105
  end
82
106
  end
83
- ```
84
-
85
- ## testing with MiniTest
86
-
87
- ```
88
- # => test/integration/papers_license_validation_test.rb
89
107
 
108
+ # Using Minitest (Test::Unit)
90
109
  require 'test_helper'
91
- require 'papers'
92
110
 
93
111
  class PapersLicenseValidationTest < ActiveSupport::TestCase
94
112
  def test_know_and_be_satisfied_by_all_licenses
95
113
  validator = Papers::LicenseValidator.new
96
114
 
97
115
  assert validator.valid?, "License validator failed:\n#{validator.errors.join("\n")}"
98
-
99
- assert_equal validator.errors, []
100
116
  end
101
117
  end
102
118
  ```
103
119
 
104
- # Configuration
120
+ Finally, run your test suite!
105
121
 
106
- The default whitelist allows for permissive licensing for proprietary or commercial usage while avoiding strong copyleft licenses.
122
+ ```sh
123
+ $ bundle exec rspec spec/integration/papers_license_validation_spec.rb
124
+ .
107
125
 
108
- ```
109
- @license_whitelist = [
110
- 'MIT',
111
- 'BSD',
112
- 'Apache 2.0',
113
- 'Apache-2.0',
114
- 'LGPLv2.1',
115
- 'LGPLv3',
116
- 'Ruby',
117
- 'Manually Reviewed',
118
- 'Unlicensed'
119
- ]
120
- ```
121
-
122
- ## Available configuration options
123
-
124
- To configure the Papers gem, pass options to ```Papers.configure``` before initialization of LicenseValidator. Currently supported config options:
126
+ Failures:
125
127
 
126
- ```
127
- Papers.configure do |c|
128
- c.license_whitelist << 'New Relic'
129
- c.manifest_file = File.join('some','other','dependency_manifest.yml')
130
- c.validate_gems = true
131
- c.validate_javascript = true
132
- c.javascript_paths << File.join('some','other','javascripts')
133
- end
128
+ 1) Papers License Validation knows and is satisfied by all dependency licenses
129
+ Failure/Error: expect(validator).to be_valid
134
130
 
135
- validator = Papers::LicenseValidator.new
136
- ...
137
- ```
131
+ expected: true value
132
+ got: false
138
133
 
139
- # Dependency Manifest structure
134
+ License validator failed: sass-3.2.12 is licensed under GPL, which is not whitelisted
140
135
 
141
- ```
142
- # => config/papers_manifest.yml
143
- ---
144
- gems:
145
- sqlite3-1.3.7:
146
- license: MIT
147
- license_url: https://github.com/luislavena/sqlite3-ruby
148
- project_url: https://github.com/luislavena/sqlite3-ruby/blob/master/LICENSE
149
- ...
136
+ (compared using ==)
137
+ # ./spec/integration/papers_license_validation_spec.rb:9:in `block (2 levels) in <top (required)>'
150
138
 
151
- javascripts:
152
- app/assets/javascripts/application.js:
153
- license: New Relic
154
- license_url: http://newrelic.com
155
- project_url: http://newrelic.com
139
+ Finished in 0.01043 seconds
140
+ 1 examples, 1 failures
156
141
  ```
157
142
 
158
- # License
143
+ ## License
159
144
 
160
145
  The Papers Gem is licensed under the __MIT License__. See [MIT-LICENSE](https://github.com/newrelic/papers/blob/master/MIT-LICENSE) for full text.
161
146
 
162
- # Contributing
147
+ ## Contributing
163
148
 
164
149
  You are welcome to send pull requests to us - however, by doing so you agree that you are granting New Relic a non-exclusive, non-revokable, no-cost license to use the code, algorithms, patents, and ideas in that code in our products if we so choose. You also agree the code is provided as-is and you provide no warranties as to its fitness or correctness for any purpose.
@@ -5,10 +5,11 @@ module Papers
5
5
  attr_accessor :manifest_file
6
6
 
7
7
  attr_accessor :validate_gems
8
-
9
8
  attr_accessor :validate_javascript
9
+ attr_accessor :validate_bower_components
10
10
 
11
11
  attr_accessor :javascript_paths
12
+ attr_accessor :bower_components_path
12
13
 
13
14
  def initialize
14
15
  @license_whitelist = [
@@ -25,14 +26,17 @@ module Papers
25
26
 
26
27
  @manifest_file = File.join(Dir.pwd, 'config', 'papers_manifest.yml')
27
28
 
28
- @validate_gems = true
29
- @validate_javascript = true
29
+ @validate_gems = true
30
+ @validate_javascript = true
31
+ @validate_bower_components = false
30
32
 
31
33
  @javascript_paths = [
32
34
  File.join(Dir.pwd, 'app', 'assets', 'javascripts'),
33
35
  File.join(Dir.pwd, 'lib', 'assets', 'javascripts'),
34
36
  File.join(Dir.pwd, 'vendor', 'assets', 'javascripts')
35
37
  ]
38
+
39
+ @bower_components_path = File.join(Dir.pwd, 'vendor', 'assets', 'components')
36
40
  end
37
41
 
38
42
  def validate_gems?
@@ -42,5 +46,9 @@ module Papers
42
46
  def validate_javascript?
43
47
  !!@validate_javascript
44
48
  end
49
+
50
+ def validate_bower_components?
51
+ !!@validate_bower_components
52
+ end
45
53
  end
46
54
  end
@@ -9,6 +9,11 @@ module Papers
9
9
  @project_url = options[:project_url]
10
10
  end
11
11
 
12
+ def name_without_version
13
+ return @name unless @name.include?('-')
14
+ @name.split('-')[0..-2].join('-')
15
+ end
16
+
12
17
  def acceptable_license?
13
18
  Papers.config.license_whitelist.include?(license)
14
19
  end
@@ -0,0 +1,38 @@
1
+ require 'json'
2
+
3
+ module Papers
4
+ class BowerComponent < DependencySpecification
5
+ def pretty_hash
6
+ {
7
+ name: name_without_version,
8
+ license: license,
9
+ license_url: @license_url,
10
+ project_url: @project_url
11
+ }
12
+ end
13
+
14
+ def self.introspected
15
+ full_introspected_entries.map { |e| e['name'] }
16
+ end
17
+
18
+ def self.full_introspected_entries
19
+ bower_json_entries.map do |entry|
20
+ {
21
+ 'name' => "#{entry['name']}-#{entry['_release']}",
22
+ 'homepage' => entry['homepage']
23
+ }
24
+ end
25
+ end
26
+
27
+ def self.bower_json_entries
28
+ json_files = Dir["#{Papers.config.bower_components_path}/*/.bower.json"]
29
+ json_files.map do |path|
30
+ JSON.parse File.read(path)
31
+ end
32
+ end
33
+
34
+ def self.manifest_key
35
+ "bower_components"
36
+ end
37
+ end
38
+ end
@@ -9,15 +9,10 @@ module Papers
9
9
  }
10
10
  end
11
11
 
12
- def name_without_version
13
- return @name unless @name.include?('-')
14
- @name.split('-')[0..-2].join('-')
15
- end
16
-
17
12
  def self.introspected
18
13
  Bundler.load.specs.map do |spec|
19
14
  # bundler versions aren't controlled by the Gemfile
20
- if spec.name == "bundler"
15
+ if spec.name == 'bundler'
21
16
  spec.name
22
17
  else
23
18
  "#{spec.name}-#{spec.version}"
@@ -3,6 +3,7 @@ require 'yaml'
3
3
  require 'papers/dependency_specification'
4
4
  require 'papers/dependency_specification/gem'
5
5
  require 'papers/dependency_specification/javascript'
6
+ require 'papers/dependency_specification/bower_component'
6
7
 
7
8
  module Papers
8
9
  class LicenseValidator
@@ -15,8 +16,9 @@ module Papers
15
16
  def valid?
16
17
  @errors = []
17
18
 
18
- validate_gems if Papers.config.validate_gems?
19
- validate_js if Papers.config.validate_javascript?
19
+ validate_spec_type(Gem) if Papers.config.validate_gems?
20
+ validate_spec_type(Javascript) if Papers.config.validate_javascript?
21
+ validate_spec_type(BowerComponent) if Papers.config.validate_bower_components?
20
22
 
21
23
  @errors.empty?
22
24
  end
@@ -33,6 +35,10 @@ module Papers
33
35
  Javascript.all_from_manifest(manifest).map(&:pretty_hash)
34
36
  end
35
37
 
38
+ def pretty_bower_component_list
39
+ BowerComponent.all_from_manifest(manifest).map(&:pretty_hash)
40
+ end
41
+
36
42
  private
37
43
 
38
44
  def validate_spec_type(spec_type)
@@ -50,13 +56,5 @@ module Papers
50
56
  end
51
57
  end
52
58
  end
53
-
54
- def validate_gems
55
- validate_spec_type Gem
56
- end
57
-
58
- def validate_js
59
- validate_spec_type Javascript
60
- end
61
59
  end
62
60
  end
@@ -38,8 +38,9 @@ module Papers
38
38
 
39
39
  def build_manifest
40
40
  manifest = {
41
- "gems" => get_installed_gems,
42
- "javascripts" => get_installed_javascripts
41
+ "gems" => get_installed_gems,
42
+ "javascripts" => get_installed_javascripts,
43
+ "bower_components" => get_installed_bower_components
43
44
  }
44
45
  return manifest
45
46
  end
@@ -78,6 +79,18 @@ module Papers
78
79
  js.empty? ? nil : js
79
80
  end
80
81
 
82
+ def get_installed_bower_components
83
+ components = {}
84
+ BowerComponent.full_introspected_entries.each do |entry|
85
+ components[entry['name']] = {
86
+ 'license' => 'Unknown',
87
+ 'license_url' => nil,
88
+ 'project_url' => ensure_valid_url(entry['homepage'])
89
+ }
90
+ end
91
+ components.empty? ? nil : components
92
+ end
93
+
81
94
  def manifest_exists?
82
95
  !!File.exist?(@manifest_path)
83
96
  end
@@ -106,4 +119,4 @@ module Papers
106
119
 
107
120
  end
108
121
 
109
- end
122
+ end
@@ -1,7 +1,7 @@
1
1
  module Papers
2
2
  MAJOR = 1
3
- MINOR = 0
4
- PATCH = 3
3
+ MINOR = 1
4
+ PATCH = 0
5
5
 
6
6
  VERSION = [MAJOR, MINOR, PATCH].join('.')
7
7
  end
data/papers.gemspec CHANGED
@@ -27,5 +27,6 @@ caught flat-footed by the GPL.
27
27
  s.require_paths = ['lib']
28
28
 
29
29
  # dependencies
30
+ s.add_development_dependency 'rake'
30
31
  s.add_development_dependency 'rspec', '~> 2.14'
31
32
  end
data/spec/papers_spec.rb CHANGED
@@ -8,8 +8,8 @@ describe 'Papers' do
8
8
 
9
9
  it 'validates a manifest with empty values and set of dependencies' do
10
10
  Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
11
- "javascripts" => {},
12
- "gems" => {}
11
+ 'javascripts' => {},
12
+ 'gems' => {}
13
13
  })
14
14
  Papers::Gem.stub(:introspected).and_return([])
15
15
 
@@ -18,106 +18,104 @@ describe 'Papers' do
18
18
 
19
19
  it 'detects mismatched gems' do
20
20
  Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
21
- "javascripts" => {},
22
- "gems" => {
23
- "foo-1.2" => {
24
- 'license' => "MIT",
21
+ 'javascripts' => {},
22
+ 'gems' => {
23
+ 'foo-1.2' => {
24
+ 'license' => 'MIT',
25
25
  'license_url' => nil,
26
26
  'project_url' => nil
27
27
  },
28
- "baz-1.3" => {
29
- 'license' => "BSD",
28
+ 'baz-1.3' => {
29
+ 'license' => 'BSD',
30
30
  'license_url' => nil,
31
31
  'project_url' => nil
32
32
  }
33
33
  }
34
34
  })
35
- Papers::Gem.stub(:introspected).and_return(["bar-1.2", "baz-1.3"])
35
+ Papers::Gem.stub(:introspected).and_return(['bar-1.2', 'baz-1.3'])
36
36
 
37
37
  expect(validator.valid?).to be_false
38
38
 
39
39
  expect(validator.errors).to eq([
40
- "bar-1.2 is included in the application, but not in the manifest",
41
- "foo-1.2 is included in the manifest, but not in the application"
40
+ 'bar-1.2 is included in the application, but not in the manifest',
41
+ 'foo-1.2 is included in the manifest, but not in the application'
42
42
  ])
43
43
 
44
44
  validator.valid?
45
45
  end
46
46
 
47
47
  it 'detects mismatched gem versions' do
48
- Papers::Configuration.any_instance.stub(:validate_javascript?).and_return(true)
49
-
50
- expect(validator).to receive(:validate_js).at_least(:once)
48
+ Papers::Configuration.any_instance.stub(:validate_javascript?).and_return(false)
51
49
 
52
50
  Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
53
- "javascripts" => {},
54
- "gems" => {
55
- "foo-1.2" => {
56
- 'license' => "MIT",
51
+ 'javascripts' => {},
52
+ 'gems' => {
53
+ 'foo-1.2' => {
54
+ 'license' => 'MIT',
57
55
  'license_url' => nil,
58
56
  'project_url' => nil
59
57
  },
60
- "baz-1.3" => {
61
- 'license' => "BSD",
58
+ 'baz-1.3' => {
59
+ 'license' => 'BSD',
62
60
  'license_url' => nil,
63
61
  'project_url' => nil
64
62
  }
65
63
  }
66
64
  })
67
- Papers::Gem.stub(:introspected).and_return(["foo-1.2", "baz-1.2"])
65
+ Papers::Gem.stub(:introspected).and_return(['foo-1.2', 'baz-1.2'])
68
66
 
69
67
  expect(validator.valid?).to be_false
70
68
 
71
69
  expect(validator.errors).to eq([
72
- "baz-1.2 is included in the application, but not in the manifest",
73
- "baz-1.3 is included in the manifest, but not in the application"
70
+ 'baz-1.2 is included in the application, but not in the manifest',
71
+ 'baz-1.3 is included in the manifest, but not in the application'
74
72
  ])
75
73
  validator.valid?
76
74
  end
77
75
 
78
76
  it 'is OK with matching gem sets' do
79
77
  Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
80
- "javascripts" => {},
81
- "gems" => {
82
- "foo-1.2" => {
83
- 'license' => "MIT",
78
+ 'javascripts' => {},
79
+ 'gems' => {
80
+ 'foo-1.2' => {
81
+ 'license' => 'MIT',
84
82
  'license_url' => nil,
85
83
  'project_url' => nil
86
84
  },
87
- "baz-1.3" => {
88
- 'license' => "BSD",
85
+ 'baz-1.3' => {
86
+ 'license' => 'BSD',
89
87
  'license_url' => nil,
90
88
  'project_url' => nil
91
89
  }
92
90
  },
93
91
  })
94
- Papers::Gem.stub(:introspected).and_return(["foo-1.2", "baz-1.3"])
92
+ Papers::Gem.stub(:introspected).and_return(['foo-1.2', 'baz-1.3'])
95
93
 
96
94
  expect(validator.valid?).to be_true
97
95
  end
98
96
 
99
97
  it 'is OK with matching gem sets but complain about a license issue' do
100
98
  Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
101
- "javascripts" => {},
102
- "gems" => {
103
- "foo-1.2" => {
104
- 'license' => "MIT",
99
+ 'javascripts' => {},
100
+ 'gems' => {
101
+ 'foo-1.2' => {
102
+ 'license' => 'MIT',
105
103
  'license_url' => nil,
106
104
  'project_url' => nil
107
105
  },
108
- "baz-1.3" => {
109
- 'license' => "GPL",
106
+ 'baz-1.3' => {
107
+ 'license' => 'GPL',
110
108
  'license_url' => nil,
111
109
  'project_url' => nil
112
110
  }
113
111
  },
114
112
  })
115
- Papers::Gem.stub(:introspected).and_return(["foo-1.2", "baz-1.3"])
113
+ Papers::Gem.stub(:introspected).and_return(['foo-1.2', 'baz-1.3'])
116
114
 
117
115
  expect(validator.valid?).to be_false
118
116
 
119
117
  expect(validator.errors).to eq([
120
- "baz-1.3 is licensed under GPL, which is not whitelisted"
118
+ 'baz-1.3 is licensed under GPL, which is not whitelisted'
121
119
  ])
122
120
 
123
121
  validator.valid?
@@ -125,82 +123,130 @@ describe 'Papers' do
125
123
 
126
124
  it 'displays gem licenses in a pretty format without versions' do
127
125
  Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
128
- "javascripts" => {},
129
- "gems" => {
130
- "foo-1.2" => {
131
- 'license' => "MIT",
126
+ 'javascripts' => {},
127
+ 'gems' => {
128
+ 'foo-1.2' => {
129
+ 'license' => 'MIT',
132
130
  'license_url' => nil,
133
131
  'project_url' => nil
134
132
  },
135
- "baz-1.3" => {
136
- 'license' => "BSD",
133
+ 'baz-1.3' => {
134
+ 'license' => 'BSD',
137
135
  'license_url' => nil,
138
136
  'project_url' => nil
139
137
  },
140
- "with-hyphens-1.4" => {
141
- 'license' => "MIT",
138
+ 'with-hyphens-1.4' => {
139
+ 'license' => 'MIT',
142
140
  'license_url' => nil,
143
141
  'project_url' => nil
144
142
  }
145
143
  },
146
144
  })
145
+
147
146
  expect(validator.pretty_gem_list).to eq([
148
147
  {
149
- :name=>"baz",
150
- :license=>"BSD",
151
- :license_url => nil,
152
- :project_url => nil
148
+ name: 'baz',
149
+ license: 'BSD',
150
+ license_url: nil,
151
+ project_url: nil
153
152
  },
154
153
  {
155
- :name=>"foo",
156
- :license=>"MIT",
157
- :license_url => nil,
158
- :project_url => nil
154
+ name: 'foo',
155
+ license: 'MIT',
156
+ license_url: nil,
157
+ project_url: nil
159
158
  },
160
159
  {
161
- :name=>"with-hyphens",
162
- :license=>"MIT",
163
- :license_url => nil,
164
- :project_url => nil
165
- }
166
- ])
160
+ name: 'with-hyphens',
161
+ license: 'MIT',
162
+ license_url: nil,
163
+ project_url: nil
164
+ }
165
+ ])
167
166
  end
168
167
 
169
168
  it 'displays JS libraries in a pretty format without versions' do
170
169
  Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
171
- "javascripts" => {
172
- "/path/to/foo.js" => {
173
- 'license' => "MIT",
170
+ 'javascripts' => {
171
+ '/path/to/foo.js' => {
172
+ 'license' => 'MIT',
174
173
  'license_url' => nil,
175
174
  'project_url' => nil
176
175
  },
177
- "/path/to/newrelic.js" => {
178
- 'license' => "New Relic",
176
+ '/path/to/newrelic.js' => {
177
+ 'license' => 'New Relic',
179
178
  'license_url' => nil,
180
179
  'project_url' => nil
181
180
  }
182
181
  },
183
- "gems" => {}
182
+ 'gems' => {}
184
183
  })
184
+
185
185
  expect(validator.pretty_js_list).to eq([
186
186
  {
187
- :name =>"/path/to/foo.js",
188
- :license =>"MIT",
187
+ :name =>'/path/to/foo.js',
188
+ :license =>'MIT',
189
189
  :license_url => nil,
190
190
  :project_url => nil
191
191
  },
192
192
  {
193
- :name =>"/path/to/newrelic.js",
194
- :license =>"New Relic",
193
+ :name =>'/path/to/newrelic.js',
194
+ :license =>'New Relic',
195
195
  :license_url => nil,
196
196
  :project_url => nil
197
197
  }
198
198
  ])
199
199
  end
200
200
 
201
+ it 'displays bower component licenses in a pretty format without versions' do
202
+ Papers::Configuration.any_instance.stub(:validate_bower_components?).and_return(true)
203
+
204
+ Papers::LicenseValidator.any_instance.stub(:manifest).and_return({
205
+ 'javascripts' => {},
206
+ 'gems' => {},
207
+ 'bower_components' => {
208
+ 'foo-1.2' => {
209
+ 'license' => 'MIT',
210
+ 'license_url' => nil,
211
+ 'project_url' => nil
212
+ },
213
+ 'baz-1.3' => {
214
+ 'license' => 'BSD',
215
+ 'license_url' => nil,
216
+ 'project_url' => nil
217
+ },
218
+ 'with-hyphens-1.4' => {
219
+ 'license' => 'MIT',
220
+ 'license_url' => nil,
221
+ 'project_url' => nil
222
+ }
223
+ },
224
+ })
225
+
226
+ expect(validator.pretty_bower_component_list).to eq([
227
+ {
228
+ name: 'baz',
229
+ license: 'BSD',
230
+ license_url: nil,
231
+ project_url: nil
232
+ },
233
+ {
234
+ name: 'foo',
235
+ license: 'MIT',
236
+ license_url: nil,
237
+ project_url: nil
238
+ },
239
+ {
240
+ name: 'with-hyphens',
241
+ license: 'MIT',
242
+ license_url: nil,
243
+ project_url: nil
244
+ }
245
+ ])
246
+ end
247
+
201
248
  it 'displays the gem name when the gemspec does not specify a version' do
202
249
  gemspec = Papers::Gem.new(name: 'foo')
203
250
  expect('foo').to eq(gemspec.name_without_version)
204
251
  end
205
-
206
252
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: papers
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ralph Bodenner
@@ -12,37 +12,47 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-12-17 00:00:00.000000000 Z
15
+ date: 2014-01-23 00:00:00.000000000 Z
16
16
  dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: rake
19
+ requirement: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
24
+ type: :development
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
17
31
  - !ruby/object:Gem::Dependency
18
32
  name: rspec
19
33
  requirement: !ruby/object:Gem::Requirement
20
34
  requirements:
21
- - - ~>
35
+ - - "~>"
22
36
  - !ruby/object:Gem::Version
23
37
  version: '2.14'
24
38
  type: :development
25
39
  prerelease: false
26
40
  version_requirements: !ruby/object:Gem::Requirement
27
41
  requirements:
28
- - - ~>
42
+ - - "~>"
29
43
  - !ruby/object:Gem::Version
30
44
  version: '2.14'
31
- description: ! 'Validate that the licenses used by your Ruby project''s dependencies
32
- (both gems
33
-
34
- and javascript libraries) conform to a software license whitelist. Don''t get
35
-
45
+ description: |
46
+ Validate that the licenses used by your Ruby project's dependencies (both gems
47
+ and javascript libraries) conform to a software license whitelist. Don't get
36
48
  caught flat-footed by the GPL.
37
-
38
- '
39
49
  email: support@newrelic.com
40
50
  executables:
41
51
  - papers
42
52
  extensions: []
43
53
  extra_rdoc_files: []
44
54
  files:
45
- - .gitignore
55
+ - ".gitignore"
46
56
  - Gemfile
47
57
  - MIT-LICENSE
48
58
  - README.md
@@ -52,6 +62,7 @@ files:
52
62
  - lib/papers/cli.rb
53
63
  - lib/papers/configuration.rb
54
64
  - lib/papers/dependency_specification.rb
65
+ - lib/papers/dependency_specification/bower_component.rb
55
66
  - lib/papers/dependency_specification/gem.rb
56
67
  - lib/papers/dependency_specification/javascript.rb
57
68
  - lib/papers/license_validator.rb
@@ -69,20 +80,19 @@ require_paths:
69
80
  - lib
70
81
  required_ruby_version: !ruby/object:Gem::Requirement
71
82
  requirements:
72
- - - ! '>='
83
+ - - ">="
73
84
  - !ruby/object:Gem::Version
74
85
  version: '0'
75
86
  required_rubygems_version: !ruby/object:Gem::Requirement
76
87
  requirements:
77
- - - ! '>='
88
+ - - ">="
78
89
  - !ruby/object:Gem::Version
79
90
  version: '0'
80
91
  requirements: []
81
92
  rubyforge_project:
82
- rubygems_version: 2.1.5
93
+ rubygems_version: 2.2.0
83
94
  signing_key:
84
95
  specification_version: 4
85
96
  summary: Validate the licenses of software dependencies you use
86
97
  test_files:
87
98
  - spec/papers_spec.rb
88
- has_rdoc: