Pretty cool.  I think you can get away with not having that variable with something like...

```ruby
begin
  require 'whatever'
rescue LoadError
  require 'polisher/missing'
  Polisher::Errata = Polisher::MissingComponent
else
  require 'polisher/core'

  module Polisher
    ...
end
```

Also, this pattern is super-copy-paste, and could probably easily be abstracted in a helper module to clean it up a bit.  Maybe something like this?

```ruby
module Polisher
  module ComponentCheck
    def self.run(klass, *soft_dependencies)
      require *soft_dependencies
    rescue LoadError
      require 'polisher/missing'
      Polisher.const_set(klass, Polisher::MissingComponent)
    else
      yield
    end
  end
end

# Then, if component_check is in core, then the component file just becomes.

require 'polisher/core'

Polisher::ComponentCheck.run("Errata", 'json', 'curb') do
  module Polisher
    module Errata
      ...
    end
  end
end
```