Download the PHP package jamesmoss/flywheel without Composer
On this page you can find all versions of the php package jamesmoss/flywheel. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package flywheel
Flywheel
A flat-file, serverless, document database for PHP that can store data in JSON, YAML or Markdown formats.
Often MySQL can be overkill for a small site or blog installation. Although it's present by as standard on many hosting packages it still requires several manual steps including configuration, user and databases creation etc.
Additionally, content stored in MySQL databases is impossible (or at least very difficult) to track using version control software. This makes sharing a site or app between a team difficult, requiring everybody to have access to a master database or their own copy. There's also complications when apps are setup on staging servers and changes that users make must be reflected in a developer's local copy. You've probably come up against this issue in the past and it's all a bit of a mess.
Flywheel hopes to enable a new breed of PHP apps and libraries by giving developers access to a datastore that acts in a similar way to a NoSQL database but has zero external dependencies. Documents (essentially associative arrays), can be saved and retrieved, sorted and limited.
Currently Flywheel is in heavy development and is not production ready yet. You might find that documents created from one version of Flywheel can't be loaded by another right now. As we get closer and closer to a v1 this is less likely to happen.
Flywheel is opinionated software. The following is assumed:
- Simple data structures are best.
- You're not going to be storing tens of thousands of documents.
Requirements
- PHP 5.3+
- Composer
Optionally
- APC / APCu - caches documents and queries in memory for huge performance gains.
Installation
Use Composer to install the flywheel package. Package details can be found on Packagist.org.
Run composer require jamesmoss/flywheel
in your project directory to install the Flywheel package.
Use
Querying
You can filter down the number of documents returned by using the where
, andWhere
and orWhere
methods on a query.
You can pass in an anonymous function to the where
, andWhere
and orWhere
methods to group predicates together. The anonymous function takes
one parameter which is an instance of JamesMoss\Flywheel\Predicate
and has
the same methods. You can nest as many times you as like.
Important Traditional logical operator precedence is not implemented yet.
If you have a mix of AND
and OR
s then you might not see the behaviour you expect.
Currently AND
predicates are processed before OR
, regardless of the order
they were defined in. Always use anonymous function to group your predicates
together explictly if you have a mix of AND
and OR
s.
The list of available comparison operators are:
==
Equality===
Strict equality!=
Not equals!==
Strict not equals>
Greater than>=
Greater than or equal to<
Less than<=
Less than or equal toIN
Check if value is in the set. Equality checks are not strict.
It's possible to order the returned result using orderBy
.
You can limit how many documents get returned from the repo using limit
. Offsets
are also supported much like a traditional database.
Config options
formatter
. See Formats section of this readme. Defaults to an instance ofJamesMoss\Flywheel\Formatter\JSON
.query_class
. The name of the class that gets returned fromRepository::query()
. By default, Flywheel detects if you have APC or APCu installed and usesCachedQuery
class if applicable, otherwise it just usesQuery
.document_class
. The name of the class to use when hydrating documenst from the filesystem. Must implementJamesMoss\Flywheel\DocumentInterface
. Defaults toJamesMoss\Flywheel\Document
.
Formats
By default documents are saved and parsed as JSON as it's fast and encoding/decoding is built into PHP. There are two other serialisation formats you can choose too, YAML and Markdown (with YAML front matter).
You can choose the format by passing it into the Config
when you initialise it.
The following formatter classes are available.
JamesMoss\Flywheel\Formatter\JSON
- Will attempt to pretty print output if using PHP 5.4+. File extension isjson
.JamesMoss\Flywheel\Formatter\YAML
- Usesyaml
file extension, notyml
.JamesMoss\Flywheel\Formatter\Markdown
- Takes an optional parameter in the constructor which dictates the name of the main field in the resultingDocument
(Defaults tobody
). File extension ismd
. Markdown isn't converted into HTML, that's up to you.
Important If you use the YAML
or Markdown
formatters when using the --no-dev
flag in Composer you'll need
to manually add mustangostang\spyc
to your composer.json
. Flywheel tries to keep it's dependencies to a minimum.
If you write your own formatter it must implement JamesMoss\Flywheel\Formatter\Format
.
Todo
- More caching around
Repository::findAll
. - Indexing.
- HHVM support.
- Abstract the filesystem, something like Gaufrette or Symfony's Filesystem component?
- Events system.
- Option to rehydrate dates as datetime objects?
- More serialisation formats? PHP serialized, PHP raw?
- More mocks in unit tests.
- Simple one-to-one and many-to-one joins.
- Implement proper logical operator precedence in queries
- Add ability to register own comparison operators
Running tests
There is good test coverage at the moment. If you'd like to run the tests yourself, use the following:
$ composer install
$ phpunit
Contributing
If you spot something I've missed, fork this repo, create a new branch and submit a pull request. Make sure any features you add are covered by unit tests and you don't break any other tests.