module Featuring::Flaggable
Internal concerns related to defining feature flags on a module or class.
Public Class Methods
extended(object)
click to toggle source
Calls superclass method
# File lib/featuring/flaggable.rb, line 11 def self.extended(object) super case object when Class object.include object.internal_feature_checks_module when Module object.extend object.internal_feature_checks_module end end
setup_flaggable_object(object)
click to toggle source
# File lib/featuring/flaggable.rb, line 22 def self.setup_flaggable_object(object) case object when Class object.extend ClassMethods object.prepend InstanceMethods when Module object.extend Flaggable object.extend Delegatable object.extend Serializable end end
Public Instance Methods
define_feature_flag(name, default, &block)
click to toggle source
# File lib/featuring/flaggable.rb, line 46 def define_feature_flag(name, default, &block) # Define a feature check method that returns the default value or the block's return value. # internal_feature_module.module_eval do if method_defined?(name) undef_method(name) end if block define_method name, &block else define_method name do default end end end # Define a method that typecasts the value returned from the delegator to true/false. This is # the method that's called when calling code asks if a feature is enabled. It guarantees that # only true or false is returned when checking a feature flag. # internal_feature_checks_module.module_eval do method_name = "#{name}?" if method_defined?(method_name) undef_method(method_name) end define_method method_name do |*args| fetch_feature_flag_value(name, *args) end end # Keep track of the feature flag we just defined. # feature_flags << name end
feature_flags()
click to toggle source
# File lib/featuring/flaggable.rb, line 84 def feature_flags @_feature_flags ||= [] end
internal_feature_checks_module()
click to toggle source
Contains methods that wrap the original values to typecast them into true or false values.
# File lib/featuring/flaggable.rb, line 42 def internal_feature_checks_module @_internal_feature_checks_module ||= Module.new end
internal_feature_module()
click to toggle source
Contains methods that return the feature’s original default value, or block value.
# File lib/featuring/flaggable.rb, line 36 def internal_feature_module @_internal_feature_module ||= Module.new end