# Reference

`Hopscotch` only has a few public symbols to be used by other packages.
Here's the API.

## Registry

The registry is the central part of Hopscotch.
It mimics the registry in `wired`, `Pyramid`, and `Zope` (all 3 of which use Zope's registry.)

```{eval-rst}
.. autoclass:: hopscotch.Registry
   :members:
```

## injectable

This decorator provides a convenient way for the `venusian`-based scanner in the registry to recursively look for registrations.

```{eval-rst}
.. autoclass:: hopscotch.injectable
   :members:
```

## inject_callable

Sometimes you want injection without a registry.
As an example, `viewdom` works both with and without a registry.
For the latter, it does a simpler form of injection, but with many of the same rules and machinery.

```{eval-rst}
.. autoclass:: hopscotch.inject_callable
   :members:
```

## Registration

When using `inject_callable` directly, you need to make an object with the introspected registration information.
This is the object to use.

```{eval-rst}
.. autoclass:: hopscotch.Registration
   :members:
```

## hopscotch.fixtures

Hopscotch provides some fixtures for use in tests and examples.

### DummyOperator

```{eval-rst}
.. automodule:: hopscotch.fixtures
   :members:
```

### Dataclass Examples

```{eval-rst}
.. automodule:: hopscotch.fixtures.dataklasses
   :members:
```

### Function Examples

```{eval-rst}
.. automodule:: hopscotch.fixtures.functions
   :members:
```

### `NamedTuple` Examples

```{eval-rst}
.. automodule:: hopscotch.fixtures.named_tuples
   :members:
```

### Plain Old Class Examples

```{eval-rst}
.. automodule:: hopscotch.fixtures.plain_classes
   :members:
```
