NAME
App::WRT::EntryStore - model the contents of a wrt repo's entry_dir
SYNOPSIS
use App::WRT::EntryStore;
my $entries = App::WRT::EntryStore->new('./archives');
my @all = $entries->all();
my @months = $entries->all_months();
my @years = $entries->all_years();
my @days = $entries->all_days();
# all_* are wrappers for dates_by_depth():
my @days = $entries->dates_by_depth(
3 # 1 for years, 2 for months, 3 for days
);
my @recent_days = $entries->recent_days(30);
my @recent_months = $entries->recent_months(12);
my @recent_years = $entries->recent_years(10);
# recent_* are wrappers for recent_by_depth():
my @recent_days $entries->recent_by_depth(
3, # 1 for years, 2 for months, 3 for days
30 # count
);
METHODS
- new($class, $entry_dir)
-
Get a new EntryStore, using a given $entry_dir.
Finds a list of entries for the given directory, and builds data structures which can be used to index into entries by depth, property, and next/previous entry.
- all()
-
Returns a list of all source files for the current entry archive (excepting index files, which are a special case - this part could use some work).
This was originally in App::WRT::Renderer, so there may be some pitfalls here.
- all_renderable()
-
Returns a list of all existing source paths which are considered "renderable".
A path should match
$RENDERABLE_EXPR
and not be an index file. - dates_by_depth($depth)
-
Returns a sorted list of all date-like entries which are at a specified depth. Use 1 for years, 2 for months, and 3 for days.
Fairly silly, but entertaining in its perverse way. all_years(), all_months(), and all_days() are provided for convenience.
- all_years(), all_months(), all_days()
-
Convenience wrappers for dates_by_depth().
- days_for($month), months_for($year)
-
Convenience wrappers for extracting days or months in a given month or year.
- recent_by_depth($depth, $entry_count)
-
Returns the $entry_count most recent dated entries at $depth (1 for year, 2 for month, 3 for day). recent_years(), recent_months(), and recent_days() are provided for convenience.
- all_years(), all_months(), all_days()
-
Convenience wrappers for recent_by_depth().
- generate_date_hashes()
-
Store hashes which map dated entries to their previous and next entries at the same depth in the tree. That is, something like:
%prev_dates = { '2014' => '2013', '2014/1' => '2013/12' '2014/1/1' => '2013/12/30', ... } %next_dates = { '2013' => '2014', '2013/12' => '2014/1', '2013/12/30' => '2014/1/1', ... }
- store_children
-
Store hashes of arrayrefs which maps parents to their immediate children.
- parent($entry)
-
Return an entry's parent, or undef if it's at the top level.
- children($entry)
-
Return an entry's (immediate) children, if any.
- children_basenames($entry)
-
Returns an entry's immediate children, but just basenames - not full paths.
- get_sub_entries($entry_loc)
-
Returns "sub entries" based on the
SUBENTRY_EXPR
regexp. - previous($entry)
-
Return the previous entry at the same depth for the given entry.
- next($entry)
-
Return the next entry at the same depth for the given entry.
- by_prop($property)
-
Return an array of any entries for the given property.
- props_for($entry)
-
Return an array of any properties for the given entry.
- has_prop($entry, $prop)
-
Return 1 if the given entry has the given property.
- prop_value($entry, $prop)
-
Return the value of given property, if it exists. Otherwise return undef.
- all_props()
-
Return an array of all properties.
- is_extant($entry)
-
Check if a given entry exists.
- is_dir($entry)
-
Check if an entry is a directory.
- is_file($entry)
-
Check if an entry is a flatfile.
- is_renderable($entry)
-
Check if an entry path is, theoretically, renderable.
- has_index($entry)
-
Check if an entry contains an index file.
TODO: Should this care about the pathological (?) case where index is a directory?
- basename($entry)
-
Get a base name (i.e., filename without path) for a given entry.
- dirname($entry)
-
Get a directory name (i.e., directory without filename) for a given entry.