GemEnforcer

GemEnforcer is intended to ensure that your ruby scripts services or gems are using an acceptable version of specific gems. In the event that the gem is out of compliance, GemEnforcer can exit or raise an error before continuing.

Inspiration

I build a lot of scripts that live locally and on other developers laptops. It is hard to ensure that they know when a new version of a critical gem has been realeased. With GemEnforcer, after upgrading, I can enforce the developer is using:

  • One of the 3 most recently released versions of Sidekiq
  • Within 3 minor versions of the most recently released Major version
  • The most recent patch vesion of a current minor version
  • And so many more combinations

Installation

Add this line to your application's Gemfile:

gem 'gem_enforcer'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install gem_enforcer

Create a Configuration File

Check out Configuration examples

Configure the Gem

Prior to running the validation, you can set custom configurations to tailor the GemEnforcement experience

GemEnforcer.configuration do |config|
  # TO use Git Tags, the access token must be provided
  # As a default it will check ENV["GITHUB_TOKEN"] or ENV["BUNDLE_GITHUB__COM"] if it is there
  # If not, it must be provided to use git tag
  config.github_access_token = "my_access_token"

  config.yml_config_path = "The path to your config file"
  config.logger = MyLoggerClass #TTY::Logger or Logger classes allowed
end

Run Validation

Validations can get run anywhere in your code. Suggested for it to run early on during boot process

# Run configuration validations
unless GemEnforcer::Setup.validate_yml!
  # There are errors in the configuration
  puts GemEnforcer::Setup.errors
end

# Run the validations based on the config file
# If validate_yml! failed, this will raise an error!
GemEnforcer::Setup.run_validations!

Development

This Gem is very close to 100% test coverage. To understand the inner workings, I would start with the test cases

You can run this gem using docker with make commands (make bash) or just on your local machine running at least Ruby 3.2.

Contributing

This gem welcomes contribution.

Bug reports and pull requests are welcome on GitHub at https://github.com/matt-taylor/gem_enforcer.