cucumber/cucumber-js — pull request #270 by i-e-b (2014-11-10 17:14:18+00:00)
Title: Speculative: using tags to select step definition sources

Hi.
This Pull Request is to see if this feature is acceptable for the main project before I start refining it and cleaning up the tests.

Purpose
----------

This is designed to make the file system layout and arrangement of features
more flexible. Target audience is larger projects with multiple
developers.

Changes:
- Throws errors if more than one step definition matches a feature step.
- Small fixes for file path matching in Windows.
- **Special tag format for selecting which files are used for steps.**

The special tags are designed to be used where the `-r` tag is specified.
They should work where file name matching is done, but will be less
useful.

Tags
------

If no source tags are set, default behaviour is used: all matching step
definitions will be used to fulfil a step.

If one or more file source tags are set in a file, then only the
specified sources are used. Sources accumulate, so each tag ADDS to the
available pool of definitions.

Tags are inherited, so setting at a feature level sets for all
scenarios.

Specific named file tags don't use path or `.js` ending. Files with the
matching name will be allowed as step definitions:

@:MySteps

Will match (e.g.)

./step_definitions/MySteps.js
./step_definitions/specific/path/MySteps.js

Directory path tags match against the end of the step files' path.
This is non-recursive, so child directories will not be used.

@./Interpretation

Will match

./step_definition/Interpretation/x.js
./step_definition/Interpretation/y.js
./step_definition/deeper/Interpretation/x.js

But not

./step_definition/Interpretation/deeper/y.js

Any steps loaded from {step path}/support/ will be included
regardless of tags

Example feature file using the tags
--------------------------------------------
```cucumber
@./DataAccess
Feature: we need a local data store that persists incoming catalog data.
We should be able to query the most recent data stored.
We should be able to delete the entire data store ready for a refresh
Data should not be modifiable once written.

Scenario: storing data
Given a running database instance
And a DAL connected to it
When I call to the DAL to store object data for an entity
Then the call should complete with no errors

@:DeleteEnabled_steps
Scenario: deleting data
Given a running database instance
And a DAL connected to it
When I call to the DAL to delete all data
Then the call should complete with no errors
```