v6.0.0: expand EntryStore, test more, cache harder
This commit is something of a hairball, the result of evenings-and-weekends
hacking building up a set of changes that got out of hand in parallel.
If I had the energy to spare, I would break it apart into
semantically-related changes, but I don't - and I suppose all this crap
being rolled together is at least reflective of how the code was
written.
These changes are really half-finished, at best. Eventual goals:
- App::WRT shouldn't directly touch the filesystem
- App::WRT::EntryStore should model the entry archive completely
- App::WRT::Renderer should say what to write to the publication
directory
- This one's a maybe: Filesystem interaction should pass through
App::WRT::FileIO or something like it so that EntryStore and Renderer
can be more usefully tested, with mocked writes (maybe)
I do think this represents an inflection point in the long, silly life of
this program: It includes a handful of new tests, and a number of the
code changes were in turn easy to make because the test suite begins to
model the code in a useful way. It's less and less necessary to run wrt
against the p1k3.com archives to be sure that I haven't trashed something.
Breaking changes to note:
- Will no longer render HTML for nonexistent entries
- Months and years which are flatfiles or contain an index are handled
differently, albeit less brokenly
- EntryStore includes index files in its overall list of entries
(this seems to break less than I thought), which trickles out to
bin/wrt-ls
Overall changes herein:
- App::WRT::Date
- Move month_name() in here from App::WRT, add tests.
- App::WRT::EntryStore
- Hash file types for entries (directory or flatfile)
- Use keys of file type hash for complete list of entries.
- has_prop($entry, $property)
- is_dir($entry), is_file($entry), is_extant($entry)
- parent_of($entry)
- has_index($entry)
- Make EntryStore cache whether a file is a flatfile or a directory, as
well as its existence, in a single hash.
- Include index flatfiles in @source_files for use by has_index()
- Various tests.
- App::WRT::FileIO
- Still duplicates a bunch of shit from Util, so that needs sorted.
- App::WRT::Renderer
- Convert to a proper class.
- Add experimental FileIO class to use in Renderer (imperfect,
tricky, still thinking about this). The idea is to separate out the
concerns of reading and writing the filesystem.
- App::WRT
- Refactor display() and improve tests
- Use "@entries" instead of "@options" for clarity
- Handle entry names that might evaluate as false
- Test running display() without any params
- Rename expand_option() -> expand_alias(), refactor
- Use EntryStore::has_prop() to detect wrt-noexpand.prop
- year(), month(), entry() partially rewritten to use EntryStore
- year() should handle months which are a flatfile
- Refactor icon_markup() to use is_file() / is_dir() / is_extant(),
add tests.
- Add subtitle to feeds
- bin/wrt-ls is now a "modulino" with tests
- bin/display errors on non-existent entries
- Build.PL
- Remove bogus XML::Feed dependency
5 years ago |
|
- Revision history for App::WRT
-
- v8.1.0 2023-05-24
-
- - Add url_rel
-
- v8.0.0 2022-09-26
-
- - Add experimental filters feature
- - Revise license to explicitly GPL 2 or 3
- - Update various dependency versions
-
- v7.1.2 2020-07-24
-
- - Alphabetically sort sub-entries
-
- v7.1.1 2020-07-23
-
- - Add a date_published to JSON Feed output
-
- v7.1.0 2020-04-18
-
- - Add some handling for sites with an index file in the root
- - wrt-render-all now uses the configured default for root of site instead
- of "new"
-
- v7.0.0 2020-04-04
-
- - Add a full tagging system
- - Cache HTML for every entry in the archive for a speedup in rendering large sites
- - Extract headers from rendered HTML with Mojo::DOM and cache
- - Use extracted headers to title pages, navigation links, and feed entries
- - Handle feed_alias in wrt-display
- - Remove entry_map from configuration and hardcode the default's assumptions
- about blog entry layout
- - Remove embedded_perl from configuration - now always look for embedded
- Perl, since this is required for templates. This feature may be
- deprecated in a future release.
- - Warn on HTML parsing errors (usually character encoding issues)
- - Rename default template from "basic" to "default"
- - Add JSON Feed support, improve Atom feed performance
- - Add wrt-repl for debugging
- - Add feed links to default template produced by wrt-init
- - Add wrt-feed for printing feeds
-
- v6.3.1 2019-06-23
-
- - Generalize iso_date() test for epoch to include all timezones
-
- v6.3.0 2019-06-22
-
- - Move get_date() from App::WRT::Util to App::WRT::Date
- - Make App::WRT::FileIO and ::Util less redundant
- - Add App::WRT::Mock::FileIO for faking writes in tests
- - Make bin/wrt-render-all testable, add t/bin-wrt-render-all.t
-
- v6.2.4 2019-05-28
-
- - Replace README.pod with a concise README.md
-
- v6.2.3 2019-05-16
-
- - bin/wrt-display: correctly expand new, fulltext, all
-
- v6.2.2 2019-05-16
-
- - EntryStore: stash sorted list of all entries as found
-
- v6.2.1 2019-05-16
-
- - bin/wrt-help
- - list more subcommands
- - fix display of utility name
-
- v6.2.0 2019-05-16
-
- - EntryStore: Add methods for further slicing entry list:
- - Days by month or year
- - Months by year
- - Immediate children and parents of entries
- - basename($entry)
-
- v6.1.0 2019-05-16
-
- - Add bin/wrt-help and bin/wrt-version
- - Includes -h, --help, -v, --version, -v aliases.
-
- v6.0.0 2019-05-06
-
- - App::WRT::Date
- - Move month_name() in here from App::WRT, add tests.
- - App::WRT::EntryStore:
- - Hash file types for entries (directory or flatfile)
- - Use keys of file type hash for complete list of entries.
- - has_prop($entry, $property)
- - is_dir($entry), is_file($entry), is_extant($entry)
- - parent_of($entry)
- - has_index($entry)
- - Make EntryStore cache whether a file is a flatfile or a directory, as
- well as its existence, in a single hash.
- - Include index flatfiles in @source_files for use by has_index()
- - Various tests.
- - App::WRT::FileIO
- - Still duplicates a bunch of shit from Util, so that needs sorted.
- - App::WRT::Renderer
- - Convert to a proper class.
- - Add experimental FileIO class to use in Renderer (imperfect,
- tricky, still thinking about this). The idea is to separate out the
- concerns of reading and writing the filesystem.
- - App::WRT
- - Refactor display() and improve tests
- - Use "@entries" instead of "@options" for clarity
- - Handle entry names that might evaluate as false
- - Test running display() without any params
- - Rename expand_option() -> expand_alias(), refactor
- - Use EntryStore::has_prop() to detect wrt-noexpand.prop
- - year(), month(), entry() partially rewritten to use EntryStore
- - year() should handle months which are a flatfile
- - Refactor icon_markup() to use is_file() / is_dir() / is_extant(),
- add tests.
- - Add subtitle to feeds
- - bin/wrt-ls is now a "modulino" with tests
- - bin/display errors on non-existent entries
-
- v5.0.0 2019-04-14
-
- - Add bin/wrt-ls for listing entries in current archive
- - Add bin/wrt-config for displaying configuration info
- - Allow header tags with attributes
- - Minor documentation cleanup
- - Bump XML::Atom::SimpleFeed to 0.900; remove wrt-fcgi
- - Concatenation instead of variable interpolation in HTML::tag()
- - Remove hardcoded "public" from renderer directory path copying
- - Remove unused feed_url param from wrt-init and example dir
- - Remove an extraneous JSON->convert_blessed(1) call
- - WRT::entry(): fix glitch with contents list for binfile_expr matches
- - Correctly encode feed output - see https://p1k3.com/2018/5/28/
- - Add App::WRT::Util::file_get_contents();
- - Optionally cache included files in-memory
- - Add EntryStore, a class for wrapping various methods for finding entry lists
- - Refactor display()
- - Use Carp for errors
- - Remove old LaTeX markup stuff
- - Add this Changes file
-
- v5.0.0-alpha 2018-04-19
-
- - Use 5 most recent entries for home page instead of latest month
- - Remove accessor methods for instance variables / configuration
- - Give absolute paths to imgsize() so it chills out on Cwd::getcwd() calls
- - Remove local_path(), recent_month(), month_before, and feed_print_latest()
- - Stop using a() in entry_markup()
- - Cache get_date_entries_by_depth() results
- - Swap out state vars for stashing things on $self in get_all_source_files()
- - Add get_date_entries_by_depth()
- - Tweak link_bar() behavior to retain link for current page
-
- v4.3.0 2018-04-06
-
- - Render feed for last feed_length day entries instead of for latest month
- - Switch example config from p1k3.com to example.com urls
- - feed_print() now takes a list of entries instead of a month
-
- v4.2.2 2018-02-10
-
- - Fix --config option to wrt-display & wrt-render-all
- - Remove year list from linkbar
-
- v4.2.1 2017-11-18
-
- - Change url_root default to /
- - Add url_root to topic link generator
-
- v4.2.0 2017-11-18
-
- - Improved documentation in shell utilities
- - Make a copy of %default before blessing
- - Document MethodSpit
- - Document the overlay option, add an accessor method for it
- - Use a logging callback to WRT::Renderer::render()
- - Miscellaneous test cleanup
- - Add publish_dir to example wrt.json
- - Improve documentation
- - Add $wrt->feed_alias and a .xml copy of same
-
- v4.1.0 2017-11-15
-
- - Add wrt-init for creating a skeleton project directory
- - Die on missing template file
-
- v4.0.1 2017-11-14
-
- - Fix App::WRT::Markup require of WRT::Image
- - Remove an unused dependency on Imager
-
- v4.0.0 2017-11-14
-
- - Rename WRT to App::WRT
- - Add a license info
- - Strip unused image size code from WRT::Image
- - Add publish_dir config value, ensure that dir exists when rendering
- - Add rendering tests
-
- v3.5.0 2017-11-13
-
- - wrt-render-all now handles /, /all, and /feed
- - Migrate wrt wrapper utilities to posix shell
-
- v3.4.2 2017-06-21
-
- - Add [0-9] to acceptable sub-entry characters
-
- v3.3.1 2017-06-19
-
- - Die on attempting to include a directory
- - Include datestamps in feed
-
- v3.3.0 2017-04-03
-
- - Add topic list to entries
- - List topics in datestamp
- - Clean up addprop output
- - Allow `-` in entry names, use .prop for properties
- - Simplify datestamps
- - Add wrt-noexpand property
- - Remove a sorta-extraneous trailing slash on contents
-
- v3.0.0 2016-10-12
-
- - Split wrt utility into git-style subcommands
- - Support for includes, change root_dir semantics, add entry_dir
- - addprop and findprop subcommands for dealing with entry properties
-
- v2.0.0 2016-08-09
-
- - Now called "wrt" instead of "display"
- - Extract http_header stuff from WRT module
- - Switch to wrt.json for configuration
- - Add XML::Feed and CGI::Fast to dependencies
- - Make wrt.fcgi work, more or less
- - Escape braces in variable interpolation regexp
- - Add --stdin flag
|