Sha256: e167ffad7fa1cdd703bdc2c17284822e1bddfea83f50ac9dea269064e189d86d

Contents?: true

Size: 1.56 KB

Versions: 4

Compression:

Stored size: 1.56 KB

Contents

module Annotation
  module AnnotationModule
    def annotation(*attrs)
      self.instance_variable_get("@annotations").concat attrs
      attrs.each do |a|
        self.attr_accessor a
      end
    end

    def annotations
      @annotations ||= []
    end

    def included(mod)
      mod.instance_variable_set(:@annotations, []) unless mod.instance_variables.include?(:@annotations)
      mod.instance_variable_get(:@annotations).concat self.instance_variable_get(:@annotations)
    end

    def extended(obj)
      attrs = self.instance_variable_get("@annotations")

      obj.instance_variable_set(:@annotations, []) unless obj.instance_variables.include?(:@annotations)
      obj.annotation_types << self

      annotations = obj.instance_variable_get(:@annotations)
      annotations.concat attrs
    end

    def setup(*args,&block)
      if block_given?
        obj, rest = block, args
      else
        obj, *rest = args
      end
      obj = block if obj.nil?
      return nil if obj.nil?
      obj.extend self unless self === obj
      attrs = self.instance_variable_get("@annotations")

      return obj if attrs.nil? || attrs.empty?

      if rest.length == 1 && Hash === (rlast = rest.last) && 
          ((! (rlkey = rlast.keys.first).nil? && attrs.include?(rlkey.to_sym)) ||
           (! attrs.length != 1 ))

        pairs = rlast
      else
        pairs = attrs.zip(rest)
      end

      pairs.each do |name,value|
        next if name.to_sym === :annotation_types
        obj.instance_variable_set("@#{name}", value) unless value.nil?
      end

      obj
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
scout-essentials-1.6.3 lib/scout/annotation/annotation_module.rb
scout-essentials-1.6.2 lib/scout/annotation/annotation_module.rb
scout-essentials-1.6.1 lib/scout/annotation/annotation_module.rb
scout-essentials-1.6.0 lib/scout/annotation/annotation_module.rb