Class: Dataset::Base
- Inherits:
-
Object
- Object
- Dataset::Base
- Defined in:
- lib/dataset/base.rb
Overview
The superclass of your Dataset classes.
It is recommended that you create a dataset using the Dataset::Block method first, then grow into using classes as you recognize patterns in your test data creation. This will help you to keep simple things simple.
Direct Known Subclasses
Class Method Summary collapse
-
.helper_methods ⇒ Object
:nodoc:.
-
.helpers(&method_definitions) ⇒ Object
Allows a subclass to define helper methods that should be made available to instances of this dataset, to datasets that use this dataset, and to tests that use this dataset.
-
.used_datasets ⇒ Object
:nodoc:.
-
.uses(*datasets) ⇒ Object
Allows a subsclass to declare which datasets it uses.
Instance Method Summary collapse
-
#load ⇒ Object
Invoked once before a collection of tests is run.
Class Method Details
.helper_methods ⇒ Object
:nodoc:
29 30 31 |
# File 'lib/dataset/base.rb', line 29 def helper_methods # :nodoc: @helper_methods end |
.helpers(&method_definitions) ⇒ Object
Allows a subclass to define helper methods that should be made available to instances of this dataset, to datasets that use this dataset, and to tests that use this dataset.
This feature is great for providing any kind of method that would help test the code around the data your dataset creates. Be careful, though, to keep from adding business logic to these methods! That belongs in your production code.
20 21 22 23 24 25 26 27 |
# File 'lib/dataset/base.rb', line 20 def helpers(&method_definitions) @helper_methods ||= begin mod = Module.new include mod mod end @helper_methods.module_eval &method_definitions end |
.used_datasets ⇒ Object
:nodoc:
62 63 64 |
# File 'lib/dataset/base.rb', line 62 def used_datasets # :nodoc: @used_datasets end |
.uses(*datasets) ⇒ Object
Allows a subsclass to declare which datasets it uses.
Dataset is designed to promote ‘design by composition’, rather than ‘design by inheritance’. You should not use class hiearchies to share data and code in your datasets. Instead, you can write something like this:
class PeopleDataset < Dataset::Base; end
class DepartmentsDataset < Dataset::Base; end
class OrganizationsDataset < Dataset::Base
uses :people, :departments
end
When the OrganizationsDataset is loaded, it will have all the data from the datasets is uses, as well as all of the helper methods defined by those datasets.
When a dataset uses other datasets, and those datasets themselves use datasets, things will be loaded in the order of dependency you would expect:
C uses B
A uses C
B, C, A is the load order
58 59 60 |
# File 'lib/dataset/base.rb', line 58 def uses(*datasets) @used_datasets = datasets end |
Instance Method Details
#load ⇒ Object
Invoked once before a collection of tests is run. If you use a dataset in multiple test classes, it will be called once for each of them - remember that the database will be cleared at the beginning of running a ‘suite’ or ‘group’ of tests, unless you are using nested contexts (as in nested describe blocks in RSpec).
Override this method in your subclasses.
75 |
# File 'lib/dataset/base.rb', line 75 def load; end |