Sha256: aa04ba9575de1145bdd75df4aa93d271a70760b746d361982db6f6e13e6c256e

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

module EnsureIt
  patch Object do
    def ensure_class(*args, default: nil, **opts)
      default
    end

    def ensure_class!(*args, default: nil, **opts)
      opts[:message] ||= '#{subject} should be a class'
      EnsureIt.raise_error(:ensure_class!, **opts)
    end
  end

  patch Class do
    def ensure_class(*args, default: nil, values: nil, **opts)
      args.select! { |x| x.is_a?(Module) }
      return default unless args.all? { |x| self <= x }
      if values.nil? || values.is_a?(Array) && values.include?(self)
        self
      else
        default
      end
    end

    def ensure_class!(*args, default: nil, values: nil, **opts)
      args.select! { |x| x.is_a?(Module) }
      if args.all? { |x| self <= x } &&
         (values.nil? || values.is_a?(Array) && values.include?(self))
        return self
      end
      args = args.map!(&:name).join(', ')
      opts[:message] ||=
        "\#{subject} should subclass or extend all of ['#{args}']"
      EnsureIt.raise_error(:ensure_class!, **opts)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ensure_it-0.1.3 lib/ensure_it/ensure_class.rb
ensure_it-0.1.2 lib/ensure_it/ensure_class.rb