Sha256: cc8984d973b4cbb8442b0b78dbccba85be2fc7b8ee581c7d98753716cf086b62

Contents?: true

Size: 1.07 KB

Versions: 6

Compression:

Stored size: 1.07 KB

Contents

module Rulz
  module Attribute
    class Block
      def initialize(attr, klass, &block)
        @attr = attr
        @klass = klass
        instance_eval &block
      end
      
      def condition(name, &block)
        Rulz::Attribute::Condition.new(@klass, @attr, name, block)
      end
      
      def type(kind)
        Rulz::Conditions.load_conditions(@klass, @attr, kind)
      end
      
    end
    
    class Condition
      attr_reader :name, :proc
      def initialize(klass, attr, name, proc)
        @name = name
        @proc = proc
        klass.instance_exec self do |condition|
          conditions = instance_variable_get("@rulz_#{attr}_conditions") || []
          conditions << condition
          instance_variable_set("@rulz_#{attr}_conditions", conditions) 
        end        
      end
    
      def self.find(klass, attr, name)
        result = klass.instance_variable_get("@rulz_#{attr}_conditions").find {|c| c.name == name }
        raise ArgumentError, "Condition '#{name}' for '#{attr}' does not exist" unless result
        result
      end
      
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
rulz-1.0.5 lib/rulz/attribute.rb
rulz-1.0.4 lib/rulz/attribute.rb
rulz-1.0.3 lib/rulz/attribute.rb
rulz-1.0.2 lib/rulz/attribute.rb
rulz-1.0.1 lib/rulz/attribute.rb
rulz-1.0.0 lib/rulz/attribute.rb