diff options
Diffstat (limited to 'lib/bundler/feature_flag.rb')
-rw-r--r-- | lib/bundler/feature_flag.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/bundler/feature_flag.rb b/lib/bundler/feature_flag.rb new file mode 100644 index 0000000000..150cac1e67 --- /dev/null +++ b/lib/bundler/feature_flag.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true +module Bundler + class FeatureFlag + def self.settings_flag(flag, &default) + unless Bundler::Settings::BOOL_KEYS.include?(flag.to_s) + raise "Cannot use `#{flag}` as a settings feature flag since it isn't a bool key" + end + define_method("#{flag}?") do + value = Bundler.settings[flag] + value = instance_eval(&default) if value.nil? && !default.nil? + value + end + end + + (1..10).each {|v| define_method("bundler_#{v}_mode?") { major_version >= v } } + + settings_flag(:allow_offline_install) { bundler_2_mode? } + settings_flag(:only_update_to_newer_versions) { bundler_2_mode? } + settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") } + + def initialize(bundler_version) + @bundler_version = Gem::Version.create(bundler_version) + end + + def major_version + @bundler_version.segments.first + end + private :major_version + + class << self; private :settings_flag; end + end +end |