Sha256: b5414d63bc5509ee18ca40bbc40b778e1c22a2ed3e684712ed0954e0456fad55

Contents?: true

Size: 944 Bytes

Versions: 2

Compression:

Stored size: 944 Bytes

Contents

require 'singleton'

module CanTango
  class Config
    class Ability
      # allow either block or direct access
      # engine(:permission) do |permission|
      # engine(:permission).config_path
      def engine name, &block
        engine = find_engine(name)
        yield engine if block
        engine
      end

      protected

      def find_engine name
        raise ArgumentError, "Must be label for an engine" if !name.kind_of_label?
        name = name.to_s.singularize
        engines.send(name) if engines.available? name
      end

      class Engine
        include Singleton

        def set state = :on
          raise ArgumentError, "Must be :on or :off" unless !state || [:on, :off].include?(state)
          @state = state || :on
        end

        def reset!
          @state = nil
        end

        def on?
          @state == :on
        end

        def off?
          !on?
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cantango-config-0.2.1 lib/cantango/config/ability/engine.rb
cantango-config-0.2.0 lib/cantango/config/ability/engine.rb