Sha256: e0fa6f951cf07dac43c6f845fbbaa8414d5ccd54c5437a96ce4a2b29157526fb

Contents?: true

Size: 868 Bytes

Versions: 4

Compression:

Stored size: 868 Bytes

Contents

module Indexers
  module Dsl
    class Traitable < Api

      def initialize(indexer=nil, args=[], parent={}, binding=nil, &block)
        @indexer = indexer
        @binding = binding
        @block = block
        super args, parent, &block
      end

      def traits(*names)
        if @indexer
          @binding = @block.binding
          names.each do |name|
            instance_eval &@indexer.options[:traits][name]
          end
          @binding = nil
        end
      end

      def method_missing(name, *args, &block)
        if args.size == 0 && !block_given? && @binding.try(:local_variable_defined?, name)
          @binding.local_variable_get name
        else
          super
        end
      end

      private

      def continue(args, parent, &block)
        self.class.new @indexer, args, parent, @binding, &block
      end

    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
indexers-5.1.1 lib/indexers/dsl/traitable.rb
indexers-5.1.0 lib/indexers/dsl/traitable.rb
indexers-4.1.0.1 lib/indexers/dsl/traitable.rb
indexers-4.1.0.0 lib/indexers/dsl/traitable.rb