papers 2.4.2 → 2.4.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ff0340e975da31aa959dcddcdd5b7a78c9140ecc
4
- data.tar.gz: fd4265cbcdbd98799e115667658eb9450e52493f
2
+ SHA256:
3
+ metadata.gz: 174c6341ec833049a5cb09f89779966021a1c50b8152e96bb9be8866a4446b7e
4
+ data.tar.gz: f7b0dc8ef6a71ef26698f95eb9264fb66c2235c13113eacba5694c506f64946b
5
5
  SHA512:
6
- metadata.gz: 0d97ddcc2a8b633bf5a091d1da0451cf19f1c2043c419f38b0cf443b17034045e70923236b46664705fbc6e16195d4644c6787fa65e25a907cf5c2453a7cb883
7
- data.tar.gz: 19262716885a3d898bf6629376a5e76904ed3c45a9b9a2258a36d8995385cb8966efd23f9e0d6591b72a5acfb4671038ffd09d6e37916208355c0bb8f13d308a
6
+ metadata.gz: 1b187474da6f2d1d898916db86b673935618c9e3dc9fbc2c005d7363d7a45eeccce39ee1742662eb94a31097a320475e64371189df8dad0321ebfcaeb8578d87
7
+ data.tar.gz: f151154a7a5f36bd62acec733f17fa5d9313765d11bdddab9dce97a85643d81b0736669f0e1ea447e818676a723820e71a4735e437dd30e501259c04da48c6cf
data/.gitignore CHANGED
@@ -4,3 +4,5 @@ Guardfile
4
4
  *.swp
5
5
  Gemfile.lock
6
6
  *.gem
7
+ # Ignore coverage files
8
+ coverage
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.4.4
4
+ * Fix to not re-apply already present license change warnings.
5
+
6
+ ## 2.4.3
7
+ * Better whitespace output to avoid trailing spaces.
8
+
3
9
  ## 2.4.2
4
10
  * Support for `package_whitelist` in configuration.
5
11
  * Fix help output from command-line tool
data/Gemfile CHANGED
@@ -1,3 +1,9 @@
1
- source 'http://rubygems.org'
1
+ source 'https://rubygems.org'
2
2
 
3
- gemspec
3
+ gemspec
4
+ gem 'rspec', '~> 3.5'
5
+ gem 'rubocop', group: 'development'
6
+
7
+ group :test do
8
+ gem 'simplecov', '~> 0.21.2'
9
+ end
data/README.md CHANGED
@@ -164,6 +164,16 @@ Finished in 0.01043 seconds
164
164
  1 examples, 1 failures
165
165
  ```
166
166
 
167
+ ### Generating the manifest from inside your tests
168
+ If you update your gems on a frequent basis, failing to remember to update the Papers manifest can be a time-consuming effort in getting your tests to pass. You can add this to your test to generate the manifest automatically:
169
+
170
+ ```ruby
171
+ Papers::ManifestUpdater.new.update!
172
+ ```
173
+
174
+ Note that you should not do this if you manually edit your manifest!
175
+
176
+
167
177
  ## License
168
178
 
169
179
  The Papers Gem is licensed under the __MIT License__. See [MIT-LICENSE](https://github.com/newrelic/papers/blob/master/MIT-LICENSE) for full text.
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module Papers
2
4
  class DependencySpecification
3
5
  attr_accessor :name, :license, :license_url, :project_url
@@ -16,27 +18,25 @@ module Papers
16
18
 
17
19
  def acceptable_license?
18
20
  Papers.config.license_whitelist.include?(license) ||
19
- Papers.config.version_whitelisted_license == license ||
20
- Papers.config.package_whitelist.include?(name)
21
+ Papers.config.version_whitelisted_license == license ||
22
+ Papers.config.package_whitelist.include?(name)
21
23
  end
22
24
 
23
- protected
24
-
25
- def self.all_from_manifest(manifest)
26
- (manifest[manifest_key] || []).map do |name, info|
27
- license_url = info['license_url']
28
- license = info['license']
29
- project_url = info['project_url']
30
- self.new(name: name, license: license, license_url: license_url, project_url: project_url)
31
- end.sort { |a, b| a.name.downcase <=> b.name.downcase }
32
- end
25
+ def self.all_from_manifest(manifest)
26
+ (manifest[manifest_key] || []).map do |name, info|
27
+ license_url = info['license_url']
28
+ license = info['license']
29
+ project_url = info['project_url']
30
+ new(name: name, license: license, license_url: license_url, project_url: project_url)
31
+ end.sort { |a, b| a.name.downcase <=> b.name.downcase }
32
+ end
33
33
 
34
- def self.missing_from_manifest(manifest)
35
- introspected.to_set - all_from_manifest(manifest).map(&:name).to_set
36
- end
34
+ def self.missing_from_manifest(manifest)
35
+ introspected.to_set - all_from_manifest(manifest).map(&:name).to_set
36
+ end
37
37
 
38
- def self.unknown_in_manifest(manifest)
39
- all_from_manifest(manifest).map(&:name).to_set - introspected.to_set
40
- end
38
+ def self.unknown_in_manifest(manifest)
39
+ all_from_manifest(manifest).map(&:name).to_set - introspected.to_set
40
+ end
41
41
  end
42
42
  end
@@ -27,15 +27,18 @@ module Papers
27
27
  result = YAML.load(original_content)
28
28
 
29
29
  update_gems(result)
30
- update_javascript(result, "javascripts", get_installed_javascripts)
31
- update_javascript(result, "bower_components", get_installed_bower_components)
32
- update_javascript(result, "npm_packages", get_installed_npm_packages)
30
+ update_javascript(result, 'javascripts', get_installed_javascripts)
31
+ update_javascript(result, 'bower_components', get_installed_bower_components)
32
+ update_javascript(result, 'npm_packages', get_installed_npm_packages)
33
33
 
34
- build_header + YAML.dump(result)
34
+ manifest_content = build_header + YAML.dump(result)
35
+
36
+ # strip trailing whitespace, ensure file ends with a newline
37
+ manifest_content.gsub(/\s*$/, '') + "\n"
35
38
  end
36
39
 
37
40
  def update_gems(result)
38
- result_gems = result["gems"]
41
+ result_gems = result['gems']
39
42
  return unless result_gems
40
43
 
41
44
  manifest_names = manifest_names(result_gems)
@@ -69,12 +72,15 @@ module Papers
69
72
 
70
73
  def update_gem(result_gems, gemspec, manifest_gem_key)
71
74
  manifest_gem = result_gems.delete(manifest_gem_key)
72
- if gemspec.license && gemspec.license != manifest_gem["license"]
75
+ if gemspec.license && gemspec.license != manifest_gem['license']
73
76
  new_licenses = gemspec.licenses || []
74
77
  new_licenses << gemspec.license
75
78
  new_licenses.uniq!
76
79
 
77
- manifest_gem["license"] = "License Change! Was '#{manifest_gem["license"]}', is now #{new_licenses}"
80
+ # license key could be an array to_s to protect against that
81
+ unless manifest_gem['license'].to_s.match(/^License Change! Was '.+', is now .+$/)
82
+ manifest_gem['license'] = "License Change! Was '#{manifest_gem['license']}', is now #{new_licenses}"
83
+ end
78
84
  end
79
85
 
80
86
  name = gem_name_and_version(gemspec)
@@ -96,7 +102,7 @@ module Papers
96
102
  end
97
103
 
98
104
  def name_from_key(key)
99
- key.include?("-") ? key.rpartition("-").first : key
105
+ key.include?('-') ? key.rpartition('-').first : key
100
106
  end
101
107
 
102
108
  def manifest_names(result_gems)
@@ -2,7 +2,7 @@ module Papers
2
2
  class Version
3
3
  MAJOR = 2
4
4
  MINOR = 4
5
- PATCH = 2
5
+ PATCH = 4
6
6
 
7
7
  def self.to_s
8
8
  [MAJOR, MINOR, PATCH].join('.')
@@ -28,11 +28,11 @@ EOS
28
28
  gems:
29
29
  rails-4.2.0:
30
30
  license: MIT
31
- license_url:
31
+ license_url:
32
32
  project_url: https://github.com/rails/rails
33
33
  newrelic_rpm:
34
34
  license: New Relic
35
- license_url:
35
+ license_url:
36
36
  project_url: https://github.com/newrelic/rpm
37
37
  EOS
38
38
  }
@@ -40,11 +40,82 @@ EOS
40
40
  let(:shoes_license) { <<EOS
41
41
  shoes-4.0.0:
42
42
  license: MIT
43
- license_url:
43
+ license_url:
44
44
  project_url: http://shoesrb.com
45
45
  EOS
46
46
  }
47
47
 
48
+ let(:foo_license) { <<EOS
49
+ signed_payload-2.0.1:
50
+ license: License Change! Was 'New Relic', is now ["Nonstandard"]
51
+ license_url:
52
+ project_url: https://source.datanerd.us/account-auth-and-access/signed_payload
53
+ EOS
54
+ }
55
+
56
+ it 'should avoid nesting license change messages' do
57
+ gemspec = double(name: 'foo', version: '1.2.3', license: "some License Change! Was 'New Relic', is now [\"Nonstandard\"]", licenses: [], homepage: 'foo.com')
58
+
59
+ result_gems = {}
60
+ manifest_gem_key = 'foo'
61
+ allow(result_gems).to receive(:delete).with(manifest_gem_key).and_return({
62
+ 'name' => 'foo',
63
+ 'version' => '1.2.3',
64
+ 'license' => "License Change! Was 'New Relic', is now [\"Nonstandard\"]",
65
+ 'homepage' => 'foo.com'
66
+ })
67
+
68
+ updater.update_gem(result_gems, gemspec, manifest_gem_key)
69
+ expect(result_gems['foo']).to eq({
70
+ 'name' => 'foo',
71
+ 'version' => '1.2.3',
72
+ 'license' => "License Change! Was 'New Relic', is now [\"Nonstandard\"]",
73
+ 'homepage' => 'foo.com'
74
+ })
75
+ end
76
+
77
+ it 'should work as normal for non nested changes' do
78
+ gemspec = double(name: 'foo', version: '1.2.3', license: "asdf", licenses: [], homepage: 'foo.com')
79
+
80
+ result_gems = {}
81
+ manifest_gem_key = 'foo'
82
+ allow(result_gems).to receive(:delete).with(manifest_gem_key).and_return({
83
+ 'name' => 'foo',
84
+ 'version' => '1.2.3',
85
+ 'license' => "ldkadfaldfjalkdsfj",
86
+ 'homepage' => 'foo.com'
87
+ })
88
+
89
+ updater.update_gem(result_gems, gemspec, manifest_gem_key)
90
+ expect(result_gems['foo']).to eq({
91
+ 'name' => 'foo',
92
+ 'version' => '1.2.3',
93
+ 'license' => "License Change! Was 'ldkadfaldfjalkdsfj', is now [\"asdf\"]",
94
+ 'homepage' => 'foo.com'
95
+ })
96
+ end
97
+
98
+ # We don't want to support it fully, but don't bomb out if we find an array
99
+ it 'should handle array in manifest' do
100
+ gemspec = double(name: 'foo', version: '1.2.3', license: "asdf", licenses: ["asdf", "new"], homepage: 'foo.com')
101
+
102
+ result_gems = {}
103
+ manifest_gem_key = 'foo'
104
+ allow(result_gems).to receive(:delete).with(manifest_gem_key).and_return({
105
+ 'name' => 'foo',
106
+ 'version' => '1.2.3',
107
+ 'license' => ["asdf", "old"],
108
+ 'homepage' => 'foo.com'
109
+ })
110
+
111
+ updater.update_gem(result_gems, gemspec, manifest_gem_key)
112
+ expect(result_gems['foo']).to eq({
113
+ 'name' => 'foo',
114
+ 'version' => '1.2.3',
115
+ 'license' => "License Change! Was '[\"asdf\", \"old\"]', is now [\"asdf\", \"new\"]",
116
+ 'homepage' => 'foo.com'
117
+ })
118
+ end
48
119
 
49
120
  it "avoids unnecessary updates" do
50
121
  allow(updater).to receive(:gemspecs).and_return([
@@ -117,26 +188,26 @@ javascripts:
117
188
  project_url: http://newrelic.com
118
189
  app/javascripts/instances/show.js:
119
190
  license: Unknown
120
- license_url:
121
- project_url:
191
+ license_url:
192
+ project_url:
122
193
  bower_components:
123
194
  angular:
124
195
  license: MIT
125
- license_url:
126
- project_url:
196
+ license_url:
197
+ project_url:
127
198
  lodash:
128
199
  license: Unknown
129
- license_url:
130
- project_url:
200
+ license_url:
201
+ project_url:
131
202
  npm_packages:
132
203
  react:
133
204
  license: MIT
134
- license_url:
135
- project_url:
205
+ license_url:
206
+ project_url:
136
207
  redux:
137
208
  license: Unknown
138
- license_url:
139
- project_url:
209
+ license_url:
210
+ project_url:
140
211
  EOS
141
212
  }
142
213
 
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
1
  require 'bundler/setup'
2
2
  require 'rspec'
3
3
  require_relative '../lib/papers'
4
+ require "simplecov"
5
+ SimpleCov.start
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: 2.4.2
4
+ version: 2.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ralph Bodenner
@@ -9,10 +9,10 @@ authors:
9
9
  - Andrew Bloomgarden
10
10
  - Lucas Charles
11
11
  - David Celis
12
- autorequire:
12
+ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2017-05-02 00:00:00.000000000 Z
15
+ date: 2022-11-03 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rake
@@ -84,7 +84,7 @@ homepage: http://github.com/newrelic/papers
84
84
  licenses:
85
85
  - MIT
86
86
  metadata: {}
87
- post_install_message:
87
+ post_install_message:
88
88
  rdoc_options: []
89
89
  require_paths:
90
90
  - lib
@@ -99,9 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.6.11
104
- signing_key:
102
+ rubygems_version: 3.1.4
103
+ signing_key:
105
104
  specification_version: 4
106
105
  summary: Validate the licenses of software dependencies you use
107
106
  test_files: