Sha256: a5dbd14868cefc41278ee199a33cb773808b82a547d6ddade57c6a5af42ff17f
Contents?: true
Size: 1.22 KB
Versions: 59
Compression:
Stored size: 1.22 KB
Contents
module Tins::Annotate def annotate(name) singleton_class.class_eval do define_method(name) do |annotation = :annotated| instance_variable_set "@__annotation_#{name}__", annotation end define_method("#{name}_of") do |method_name| __send__("#{name}_annotations")[method_name] end define_method("#{name}_annotations") do if instance_variable_defined?("@__annotation_#{name}_annotations__") instance_variable_get "@__annotation_#{name}_annotations__" else instance_variable_set "@__annotation_#{name}_annotations__", {} end end old_method_added = instance_method(:method_added) define_method(:method_added) do |method_name| old_method_added.bind(self).call method_name if annotation = instance_variable_get("@__annotation_#{name}__") __send__("#{name}_annotations")[method_name] = annotation end instance_variable_set "@__annotation_#{name}__", nil end end define_method("#{name}_annotations") do self.class.__send__("#{name}_annotations") end define_method("#{name}_of") do |method_name| self.class.__send__("#{name}_of", method_name) end end end
Version data entries
59 entries across 49 versions & 2 rubygems