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 +5 -5
- data/.gitignore +2 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile +8 -2
- data/README.md +10 -0
- data/lib/papers/dependency_specification.rb +18 -18
- data/lib/papers/manifest_updater.rb +14 -8
- data/lib/papers/version.rb +1 -1
- data/spec/manifest_updater_spec.rb +84 -13
- data/spec/spec_helper.rb +2 -0
- metadata +6 -7
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 174c6341ec833049a5cb09f89779966021a1c50b8152e96bb9be8866a4446b7e
         | 
| 4 | 
            +
              data.tar.gz: f7b0dc8ef6a71ef26698f95eb9264fb66c2235c13113eacba5694c506f64946b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1b187474da6f2d1d898916db86b673935618c9e3dc9fbc2c005d7363d7a45eeccce39ee1742662eb94a31097a320475e64371189df8dad0321ebfcaeb8578d87
         | 
| 7 | 
            +
              data.tar.gz: f151154a7a5f36bd62acec733f17fa5d9313765d11bdddab9dce97a85643d81b0736669f0e1ea447e818676a723820e71a4735e437dd30e501259c04da48c6cf
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        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
    
    
    
        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 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            +
                    Papers.config.version_whitelisted_license == license ||
         | 
| 22 | 
            +
                    Papers.config.package_whitelist.include?(name)
         | 
| 21 23 | 
             
                end
         | 
| 22 24 |  | 
| 23 | 
            -
                 | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
                     | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 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 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 34 | 
            +
                def self.missing_from_manifest(manifest)
         | 
| 35 | 
            +
                  introspected.to_set - all_from_manifest(manifest).map(&:name).to_set
         | 
| 36 | 
            +
                end
         | 
| 37 37 |  | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 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,  | 
| 31 | 
            -
                  update_javascript(result,  | 
| 32 | 
            -
                  update_javascript(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)
         | 
| 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[ | 
| 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[ | 
| 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 | 
            -
                     | 
| 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?( | 
| 105 | 
            +
                  key.include?('-') ? key.rpartition('-').first : key
         | 
| 100 106 | 
             
                end
         | 
| 101 107 |  | 
| 102 108 | 
             
                def manifest_names(result_gems)
         | 
    
        data/lib/papers/version.rb
    CHANGED
    
    
| @@ -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
    
    
    
        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. | 
| 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:  | 
| 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 | 
            -
             | 
| 103 | 
            -
             | 
| 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:
         |