Files

DSLKit::DSLAccessor

The DSLAccessor module contains some methods, that can be used to make simple accessors for a DSL.

 class CoffeeMaker
   extend DSLKit::Constant

   constant :on
   constant :off

   extend DSLKit::DSLAccessor

   dsl_accessor(:state) { off } # Note: the off constant from above is used

   dsl_accessor :allowed_states, :on, :off

   def process
     allowed_states.include?(state) or fail "Explode!!!"
     if state == on
       puts "Make coffee."
     else
       puts "Idle..."
     end
   end
 end

 cm = CoffeeMaker.new
 cm.instance_eval do
   state      # => :off
   state on
   state      # => :on
   process    # => outputs "Make coffee."
 end

Note that DSLKit::SymbolMaker is an alternative for DSLKit::Constant in this example. On the other hand SymbolMaker can make debugging more difficult.

Public Instance Methods

dsl_accessor(name, *default, &block) click to toggle source

This method creates a dsl accessor named name. If nothing else is given as argument it defaults to nil. If *default is given as a single value it is used as a default value, if more than one value is given the default array is used as the default value. If no default value but a block block is given as an argument, the block is executed everytime the accessor is read in the context of the current instance.

After setting up the accessor, the set or default value can be retrieved by calling the method name. To set a value one can call name :foo to set the attribute value to :foo or name(:foo, :bar) to set it to [ :foo, :bar ].

# File lib/dslkit/polite.rb, line 300
    def dsl_accessor(name, *default, &block)
      variable = "@#{name}"
      define_method(name) do |*args|
        if args.empty?
          result = instance_variable_get(variable)
          if result.nil?
            if default.empty?
              block && instance_eval(&block)
            elsif default.size == 1
              default.first
            else
              default
            end
          else
            result
          end
        else
          instance_variable_set(variable, args.size == 1 ? args.first : args)
        end
      end
    end
dsl_reader(name, *default, &block) click to toggle source

This method creates a dsl reader accessor, that behaves exactly like a dsl_accessor but can only be read not set.

# File lib/dslkit/polite.rb, line 324
    def dsl_reader(name, *default, &block)
      variable = "@#{name}"
      define_method(name) do |*args|
        if args.empty?
          result = instance_variable_get(variable)
          if result.nil?
            if default.empty?
              block && instance_eval(&block)
            elsif default.size == 1
              default.first
            else
              default
            end
          else
            result
          end
        else
          raise ArgumentError, "wrong number of arguments (#{args.size} for 0)"
        end
      end
    end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.