Using Gem::Dependency class manually to ensure version matching
I needed to add a mechanism to ensure that some actions of a controller were available only for specific versions, and I thought it was super similar of what Gemfile does, so I started to look how to use Gem::Dependency to solve this, and turns out it was super easy:
class Controller
def feeds_one
check_for_version_support('>= 1.0', '< 3')
render json: SomeData.all
end
def feeds_two
check_for_version_support('= 1.0')
render json: SomeData.all
end
def feeds_three
check_for_version_support('>= 2.1')
render json: SomeData.all
end
private
def check_for_version_support(*specification)
checker = Gem::Dependency.new(action_name, specification)
return if checker.match?(action_name, params[:version])
raise VersionNotSupported, "Version not upported"
end
end