Sha256: 08f2953a807a10815d5a83441a247f5379ac49da244975874846e1d73d026f42

Contents?: true

Size: 1.91 KB

Versions: 79

Compression:

Stored size: 1.91 KB

Contents

module Redcar
  # Sensitive abstracts the concept of an object having an enabled/disabled
  # property that is 'sensitive' to whether a number of other things
  # are true. The "things that can be true" are Redcar::Sensitivitys,
  # and the disabled, enabled property is only enabled when all the 
  # Sensitivitys are active.
  #
  # For instance, if :is_tuesday is the name of a 
  # Redcar::Sensitivity that is only active when it is Tuesday, 
  # you can make an object sensitive to whether it is Tuesday by including
  # this module and sensitizing the instance.
  #
  #     class MySensitiveClass
  #       include Redcar::Sensitive
  #     end
  #     
  #     obj = MySensitiveClass.new
  #     obj.sensitize :is_tuesday
  #     obj.active?  # => true|false
  module Sensitive
    # Sensitize the object to a list of sensitivities. May be called with
    # multiple sensitivities multiple times.
    #
    #      obj.sensitize :is_tuesday, :raining
    #      obj.sensitize :month_has_y
    #
    # @param [Array<Symbol>] list of sensitivity_names
    def sensitize(*sensitivity_names)
      @sensitivity_names ||= []
      @sensitivity_names += sensitivity_names
      sensitivity_names.each do |sensitivity_name|
        Sensitivity.add_listener(Sensitivity.event_name(sensitivity_name)) do
          old_sensitivity = @current_sensitivity
          @current_sensitivity = active?
          if old_sensitivity != @current_sensitivity
            active_changed(@current_sensitivity)
          end
        end
      end
    end
    
    # @return [Array<Symbol>] list of senstivity names
    def sensitivity_names
      @sensitivity_names || []
    end
    
    # @return [Array<Sensitivity>] list of senstivities
    def sensitivities
      sensitivity_names.map {|n| Sensitivity.get(n) }.compact
    end
    
    # Whether all the sensitivities of this object are active.
    def active?
      sensitivities.all? {|s| s.active? }
    end
  end
end

Version data entries

79 entries across 79 versions & 2 rubygems

Version Path
redcar-0.13 plugins/application/lib/application/sensitive.rb
redcar-dev-0.13.5dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.13.4dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.13.3dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.13.2dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.13.1dev plugins/application/lib/application/sensitive.rb
redcar-0.12.1 plugins/application/lib/application/sensitive.rb
redcar-dev-0.13.0dev plugins/application/lib/application/sensitive.rb
redcar-0.12 plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.27dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.26dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.25dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.24dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.23dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.22dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.21dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.20dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.19dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.18dev plugins/application/lib/application/sensitive.rb
redcar-dev-0.12.17dev plugins/application/lib/application/sensitive.rb