Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

Consider creating error base class in bundler gem #6260

Closed
christhekeele opened this issue Jan 16, 2018 · 1 comment · Fixed by #6267
Closed

Consider creating error base class in bundler gem #6260

christhekeele opened this issue Jan 16, 2018 · 1 comment · Fixed by #6267

Comments

@christhekeele
Copy link
Contributor

Ruby 2 updated the docs for Exception from:

Programs may subclass Exception, or more typically StandardError to provide custom classes and add additional information.

to instead read:

It is recommended that a library should have one subclass of StandardError or RuntimeError and have specific exception types inherit from it. This allows the user to rescue a generic exception type to catch all exceptions the library may raise even if future versions of the library add new exception subclasses.

For example:

class MyLibrary
  class Error < RuntimeError
  end

  class WidgetError < Error
  end

  class FrobError < Error
  end

end

To handle both WidgetError and FrobError the library user can rescue MyLibrary::Error.

This is awesome, and important.


I'd like to propose adding a default error base class to the bundle gem scaffolding to encourage this good pattern. This could be as simple as bundle gem foo producing:

  # foo/lib/foo.rb
  require "foo/version"

  module Foo
+   class Error < StandardError; end
    # Your code goes here...
  end

It is nearly as effortless to delete both that line and the comment line as the comment line itself; but plants the seed for a very important and often-overlooked best practice early in a gem's development.


If well received I think we could discuss whether or not to add more context/comments to it than just the one-liner class; as well as minutiae like if the ; end is good form. Initially just gonna pitch the general concept, though, I don't want to get too caught up in those other more focused discussions immediately.

@colby-swandale colby-swandale changed the title Consider creating error base class in gem generator Consider creating error base class in bundler gem Jan 16, 2018
@colby-swandale
Copy link
Member

A PR for this would be very appreciated 👍

bundlerbot pushed a commit that referenced this issue Jan 23, 2018
bundlerbot added a commit that referenced this issue Jan 23, 2018
…ndale

Add base error class to new gems.

Closes #6260.

Room for discussion:

- Which error class to use (`StandardError` makes sense to me)
- What formatting to use (the three-lines-with-comment seemed nicest to me)
- Whether or not using the flag to provide a different error base class is useful, and if it should validate the user's choice or not (I threw it in because it seemed harmless; is it? a boolean flag would work fine too)

---

### What was the end-user problem that led to this PR?

Libraries don't always follow best practice from discussion in linked issue.

### What was your diagnosis of the problem?

Bundler could encourage best practice by adding it to the gem scaffold.

### What is your fix for the problem, implemented in this PR?

I added a base error class to the templates, and provided a flag to change/disable this behaviour.

### Why did you choose this fix out of the possible options?

Like any best-practice-by-default, this could ruin someones workflow/go against someone's preferences so I made it as configurable as possible.
colby-swandale pushed a commit that referenced this issue Sep 20, 2018
…ndale

Add base error class to new gems.

Closes #6260.

Room for discussion:

- Which error class to use (`StandardError` makes sense to me)
- What formatting to use (the three-lines-with-comment seemed nicest to me)
- Whether or not using the flag to provide a different error base class is useful, and if it should validate the user's choice or not (I threw it in because it seemed harmless; is it? a boolean flag would work fine too)

---

### What was the end-user problem that led to this PR?

Libraries don't always follow best practice from discussion in linked issue.

### What was your diagnosis of the problem?

Bundler could encourage best practice by adding it to the gem scaffold.

### What is your fix for the problem, implemented in this PR?

I added a base error class to the templates, and provided a flag to change/disable this behaviour.

### Why did you choose this fix out of the possible options?

Like any best-practice-by-default, this could ruin someones workflow/go against someone's preferences so I made it as configurable as possible.

(cherry picked from commit 3aa29ce)
colby-swandale pushed a commit that referenced this issue Oct 5, 2018
…ndale

Add base error class to new gems.

Closes #6260.

Room for discussion:

- Which error class to use (`StandardError` makes sense to me)
- What formatting to use (the three-lines-with-comment seemed nicest to me)
- Whether or not using the flag to provide a different error base class is useful, and if it should validate the user's choice or not (I threw it in because it seemed harmless; is it? a boolean flag would work fine too)

---

### What was the end-user problem that led to this PR?

Libraries don't always follow best practice from discussion in linked issue.

### What was your diagnosis of the problem?

Bundler could encourage best practice by adding it to the gem scaffold.

### What is your fix for the problem, implemented in this PR?

I added a base error class to the templates, and provided a flag to change/disable this behaviour.

### Why did you choose this fix out of the possible options?

Like any best-practice-by-default, this could ruin someones workflow/go against someone's preferences so I made it as configurable as possible.

(cherry picked from commit 3aa29ce)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Dec 17, 2018
pkgsr change
* Remove @Prefix@ from ALTERNATIVES file.

## 1.17.2 (2018-12-11)

 - Add compatability for bundler merge with Ruby 2.6

## 1.17.1 (2018-10-25)

 - Convert `Pathname`s to `String`s before sorting them, fixing #6760 and #6758 ([#6761](rubygems/bundler#6761), @alexggordon)

## 1.17.0 (2018-10-25)

No new changes.

## 1.17.0.pre.2 (2018-10-13)

Features:

  - Configure Bundler home, cache, config and plugin directories with `BUNDLE_USER_HOME`, `BUNDLE_USER_CACHE`, `BUNDLE_USER_CONFIG` and `BUNDLE_USER_PLUGIN` env vars ([#4333](rubygems/bundler#4333), @gwerbin)
  - Add `--all` option to `bundle binstubs` that will generate an executable file for all gems with commands in the bundle
  - Add `bundle remove` command to remove gems from the Gemfile via the CLI
  - Improve checking file permissions and asking for `sudo` in Bundler when it doesn't need to
  - Add error message to `bundle add` to check adding duplicate gems to the Gemfile
  - When asking for `sudo`, Bundler will show a list of folders/files that require elevated permissions to write to.

The following new features are available but are not enabled by default. These are intended to be tested by users for the upcoming release of Bundler 2.

  - Improve deprecation warning message for `bundle show` command
  - Improve deprecation warning message for the `--force` option in `bundle install`

## 1.17.0.pre.1 (2018-09-24)

Features:

  - Check folder/file permissions of the Bundle home directory in the `bundle doctor` command ([#5786](rubygems/bundler#5786), @ajwann)
  - Remove compiled gem extensions when running `bundle clean` ([#5596](rubygems/bundler#5596), @akhramov)
  - Add `--paths` option to `bundle list` command ([#6172](rubygems/bundler#6172), @colby-swandale)
  - Add base error class to gems generated from `bundle gem` ([#6260](rubygems/bundler#6260), @christhekeele)
  - Correctly re-install gem extensions with a git source when running `bundle pristine` ([#6294](rubygems/bundler#6294), @wagenet)
  - Add config option to disable platform warnings ([#6124](rubygems/bundler#6124), @agrim123)
  - Add `--skip-install` option to `bundle add` command to add gems to the Gemfile without installation ([#6511](rubygems/bundler#6511), @agrim123)
  - Add `--only-explicit` option to `bundle outdated` to list only outdated gems in the Gemfile ([#5366](rubygems/bundler#5366), @peret)
  - Support adding multiple gems to the Gemfile with `bundle add` ([#6543](rubygems/bundler#6543), @agrim123)
  - Make registered plugin events easier to manage in the Plugin API (@jules2689)
  - Add new gem install hooks to the Plugin API (@jules2689)
  - Add `--optimistic` and `--strict` options to `bundle add` ([#6553](https://github.com/bundler/bundler/issues/6553), @agrim123)
  - Add `--without-group` and `--only-group` options to `bundle list` ([#6564](rubygems/bundler#6564), @agrim123)
  - Add `--gemfile` option to the `bundle exec` command ([#5924](rubygems/bundler#5924), @ankitkataria)

The following new features are available but are not enabled by default. These are intended to be tested by users for the upcoming release of Bundler 2.

  - Make `install --path` relative to the current working directory ([#2048](rubygems/bundler#2048), @igorbozato)
  - Auto-configure job count ([#5808](rubygems/bundler#5808), @segiddins)
  - Use the Gem Version Promoter for major gem updates ([#5993](rubygems/bundler#5993), @segiddins)
  - Add config option to add the Ruby scope to `bundle config path` when configured globally (@segiddins)

## 1.16.6 (2018-10-05)

Changes:

  - Add an error message when adding a gem with `bundle add` that's already in the bundle ([#6341](rubygems/bundler#6341), @agrim123)
  - Add Homepage, Source Code and Chanagelog URI metadata fields to the `bundle gem` gemspec template (@walf443)

Bugfixes:

  - Fix issue where updating a gem resulted in the gem's version being downgraded when `BUNDLE_ONLY_UPDATE_TO_NEWER_VERSIONS` was set ([#6529](rubygems/bundler#6529), @theflow)
  - Fix some rescue calls that don't specifiy error type (@utilum)
  - Fix an issue when the Lockfile would contain platform-specific gems that it didn't need ([#6491](rubygems/bundler#6491), @segiddins)
  - Improve handlding of adding new gems with only a single group to the Gemfile in `bundle add` (@agrim123)
  - Refactor check for OpenSSL in `bundle env` (@voxik)
  - Remove an unnecessary assignment in Metadata (@voxik)

Documentation:

  - Update docs to reflect revised guidance to check in Gemfile.lock into version control for gems ([#5879](https://github.com/bundler/bundler/issues/5879), @arbonap)
  - Add documentation for the `--all` flag in `bundle update` (@agrim123)
  - Update README to use `bundle add` in usage examples (@hdf1986)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants