module CheckPlease::Reification::ClassMethods

Public Instance Methods

can_reify(*klasses) click to toggle source
# File lib/check_please/reification.rb, line 14
def can_reify(*klasses)
  klasses.flatten!

  unless ( klasses - [nil] ).all? { |e| e.is_a?(Class) }
    raise ArgumentError, "classes (or nil) only, please"
  end

  reifiable.concat klasses
  reifiable.uniq!
  nil
end
reifiable() click to toggle source
# File lib/check_please/reification.rb, line 10
def reifiable
  @_reifiable ||= []
end
reify(primitive_or_object) click to toggle source
# File lib/check_please/reification.rb, line 26
      def reify(primitive_or_object)
        case primitive_or_object
        when self       ; return primitive_or_object
        when Array      ; return primitive_or_object.map { |e| reify(e) }
        when *reifiable ; return new(primitive_or_object)
        end
        # note early return ^^^

        # that didn't work? complain!
        acceptable = reifiable.map { |e| Class === e ? e.name : e.inspect }
        raise ArgumentError, <<~EOF
          #{self}.reify was given: #{primitive_or_object.inspect}
          but only accepts: #{acceptable.join(", ")}
        EOF
      end