docs: public Flowable<Integer> observeContentTypeCachePopulation(final int limit) {
      if (limit > CONTENT_TYPE_LIMIT_MAX) {
        throw new IllegalArgumentException("Content types per page limit cannot be more then 1000.");
      }
      if (limit <= 0) {
        throw new IllegalArgumentException("Content types per page limit cannot be "
            + "less or equal to 0.");
      }
  
      return
          observe(CDAContentType.class)
              .orderBy("sys.id")
              .limit(limit)
              .all()
              .map(
                  new Function<CDAArray, CDAArray>() {
                    @Override
                    public CDAArray apply(CDAArray array) {
                      if (array.skip() + array.limit() < array.total()) {
                        return nextPage(array);
                      } else {
                        return array;
                      }
                    }
  
                    private CDAArray nextPage(CDAArray array) {
                      final CDAArray nextArray = observe(CDAContentType.class)
                          .orderBy("sys.id")
                          .limit(limit)
                          .skip(array.skip + limit)
                          .all()
                          .map(this)
                          .blockingFirst();
  
                      array.skip = nextArray.skip;
                      array.items.addAll(nextArray.items);
                      array.assets.putAll(nextArray.assets);
                      array.entries.putAll(nextArray.entries);
  
                      return array;
                    }
                  }
              )
              .map(new Function<CDAArray, Integer>() {
                     @Override
                     public Integer apply(CDAArray array) {
                       for (CDAResource resource : array.items) {
                         if (resource instanceof CDAContentType) {
                           cache.types().put(resource.id(), (CDAContentType) resource);
                         } else {
                           throw new IllegalStateException(
                               "Requesting a list of content types should not return "
                                   + "any other type.");
                         }
                       }
                       return array.total;
                     }
                   }
              );
    }