Changelog for Yancy 1.067 2020-11-15 22:39:19-06:00 America/Chicago [Fixed] - Prevent authentication return URL from redirecting somewhere offsite, which is a potential security risk: http://cwe.mitre.org/data/definitions/601.html - Fixed missing logs when an exception is caught. Thanks @stephan48 for reporting this! [Github #126] - Fixed editor not displaying Internal Server Errors. It now displays an alert box with a button to show more details. Thanks @stephan48 for reporting this issue! [Github #127] 1.066 2020-08-07 19:45:13-05:00 America/Chicago [NOTE] - Yancy now scans your database schema by default. To disable this, add `read_schema => 0` to your Yancy plugin configuration. [Added] - Added push updates to the table component. This is still experimental, but it allows a table on a page to automatically update when data is changed. - Added an example application that uses the table component with push updates: The ETL Viewer. [Fixed] - Fixed query params not being passed through the table component. Now any search on the page will be shown in the table. - Rewrote the primary Yancy docs to emphasize drop-in administration of existing databases, Yancy's primary use-case. 1.065 2020-07-29 22:08:56-05:00 America/Chicago [Added] - Added templates for foreign key display fields. This means you can see (and search) multiple fields when resolving a foreign key record. - Added a 'yancy/component/table' Vue component. This component accepts a URL to a "list" and displays the items. Users can navigate pages and sort the table asynchronously. This is the first of many future Vue components that can be used for progressive enhancement and rapid development. These will also be used to build the next version of the editor app. - Added a "feed" action to Yancy::Controller::Yancy. The feed action opens a websocket to first send the same response as the "list" action: A page of items. Then, it polls the database periodically and sends any new items, updated items, or deleted items, keeping the page of items in-sync with the client. Look for some example applications using this soon! [Fixed] - Fixed the link in the cookbook to the limited-editor example. Thanks @joshrabinowitz for the patch! [Github #120] [Other] - Added Northwind example application, along with some other Cookbook entries and example apps. 1.064 2020-06-25 23:57:58-05:00 America/Chicago [Added] - Added the "binary" format for string fields to store binary data. These fields will not be displayed in the editor (yet), but could be another way of accepting file uploads in the future... Thanks @mohawk2 for doing most of this work! [Fixed] - Fixed performance when reading schemas with hundreds of tables: The foreign key detection was O^2 :(. Thanks @joshrabinowitz for help debugging this issue! [Github #119] - Fixed very long values from breaking the list view in the editor. Now the editor caps the width of a column, prevents wrapping, and truncates the field with ellipses if needed. If necessary, the table can be scrolled horizontally. - Fixed the editor list view to display a more useful set of columns if no x-list-columns are defined: Any column that is not hidden or a binary column will be shown in the list view. Thanks @joshrabinowitz for the idea! [Github #46] 1.063 2020-06-24 21:51:10-05:00 America/Chicago [Fixed] - Added missing "offset" field to OpenAPI spec. Thanks @mario-minati for reporting this! [Github #117] - Fixed being able to give bad objects to the Yancy backend (for example, a very, very old Mojo::MySQL). Thanks @joshrabinowitz for reporting and debugging this issue! - Added deprecation notices for some configuration values that were long ago moved to the Editor plugin (route, info, host, return_to). Thanks @mario-minati for reporting this! [Github #116] [Other] - The OpenAPI spec is fully internationalized. If anyone would like to start translating Yancy, let me know! 1.062 2020-06-16 19:58:55-05:00 America/Chicago [Fixed] - Fixed missing $match parameter in OpenAPI spec for list actions. Thanks @mario-minati for reporting this! [Github #114] - Added a few more i18n strings to the lexicon. - Fixed DBIx::Class backend not finding schemas and foreign keys when the result name did not match the table name. Thanks @mario-minati for help debugging this! [Github #112] 1.061 2020-06-10 10:49:12-05:00 America/Chicago [Fixed] - Fixed UTF-8 error in POD. Thanks @borisdaeppen for the patch! [Github #110] - Fixed issues in OpenAPI specs not validating w/ JSON::Validator v4.00. Thanks @eserte for the report! [Github #111] [Docs] - Fixed an issue in the Yancy::Controller::Yancy docs where the `:id` placeholder was not explained correctly: This needs to be the name of the ID field (or fields) in order to work. 1.060 2020-06-07 16:25:43-05:00 America/Chicago [Fixed] - Fixed editor not working with any Markdown fields, a regression caused by v1.057. Thanks @uniejo for the patch! [Github #109] This time, there are tests to prevent further regressions... 1.059 2020-06-06 17:53:43-05:00 America/Chicago [Added] - Added Yancy::I18N and started translating parts of the Yancy editor. Much more work to do here, but it's a start! [Fixed] - Fixed no response from the server when user tries to register while registration is disabled. Thanks @uniejo for the patch! [Github #108] - Fixed finding foreign keys on databases with multiple catalogs or schemas. Thanks @sammakkoinen for the report! [Github #107] 1.058 2020-06-03 14:15:16-05:00 America/Chicago [Fixed] - Increased File::Temp version to fix SQLite locking problem during tests on BSD systems. Thanks @eserte for reporting this and explaining the fix! [Github #106] 1.057 2020-05-30 21:37:23-05:00 America/Chicago [Important!] - Mojolicious 8.50 raised its minimum Perl requirement to 5.16, and in this version, Yancy has done the same. - The undocumented `id_field` attribute has been removed to support composite keys. Please make sure that your URL placeholders are named after the field in the schema, not just `id`. [Added] - Added composite keys in schemas. Now backends can handle tables with a multi-column primary key. [Fixed] - Fixed the editor not working when a Markdown field was misconfigured. 1.056 2020-04-26 13:34:24-05:00 America/Chicago [Added] - Added internationalization (i18n) hooks to the login form via Locale::Maketext. Thanks @pavelsr for the patch! [Github #102, #103] i18n is now on the v2 roadmap and will be completed before the v2.000 release. [Fixed] - Fixed test failures on older versions of Mojolicious (before `curfile` was part of Mojo::File). Thanks @eserte! [Github #101] - Fixed set/delete hooks to be able to change which item ID is being set/deleted. 1.055 2020-04-24 21:01:05-05:00 America/Chicago [Added] - Added controller action hooks to Yancy controllers. These hooks allow for editing data during certain events: * before_render - For the get/list actions. Add more data or format item data before rendering. * before_write - For set actions. Edit the submitted item before saving in the database * before_delete - For delete actions. Delete related data, or write some logging. This feature will replace the `x-filter-output` feature, which will be removed in v2.0. [Fixed] - Fixed issue with reading Postgres column names requiring quotes. Now these schemas can be read correctly. - Fixed issue with DBIx::Class schemas with column names requiring quotes. Now these schemas can be deployed correctly. - Fixed `require_user` to accept `1` as "require a user to be logged-in". 1.054 2020-04-19 16:22:12-05:00 America/Chicago [Important!] - The 'yancy.auth.login' route is now named 'yancy.auth.login_form' to match the other login form routes. [Added] - Added disabling of CSRF field in Form plugins. Use this to build a form without a CSRF token inside. - Added top-level OR matching to `match` utility. Now the `require_user` authorization method can express more options. - Added `$match: any` to controller list actions. This changes the filter from "AND" to "OR", returning results that match any filter instead of requiring them to match all filters. [Fixed] - Fixed test failure with too old versions of Test::Mojo::Role::Selenium. Thanks @eserte for reporting this! [Github #98] - Fixed `yancy.form.form_for` helper being called with `app` causing CSRF failures. Now the Form helper will warn you when called without a request that can build a useful CSRF token. Thanks @pavelsr for reporting this! [Github #95] - In the controller list actions, '$order_by' can now be a field name to sort by that field ascending. Previously, the 'asc:' or 'desc:' prefix was required. - Fixed foreign key fields not working when the first item in x-list-columns was using a template. Now, the foreign key field searches all fields in the template and uses the template to display the current value of the field. Thanks @OpossumPetya for reporting this issue! [Github #96] - Removed extra page loads from the authentication workflow: - The login form is now displayed on the unauthorized error page - Logging out brings the user back to where they were so, if necessary, they can log in again - Fixed user being returned to the wrong place after authentication: - If the login form was displayed by the login page, the user is returned to the previous page - Otherwise, the login form was displayed on the page the user wants, so they are directed back to that page - The `return_to` query param can be used to override where a user is returned in either circumstance [Docs] - Made the docs for Yancy::Controller::Yancy and Yancy::Controller::Yancy::MultiTenant easier to read. - Added undocumented `login_form` helper to auth plugins - Added examples of how to use Auth plugin routes and helpers. Thanks @pavelsr for reporting this issue! [Github #100] 1.053 2020-04-14 22:56:26-05:00 America/Chicago [Added] - Added `yancy.mask` filter to mask field values (hide parts of e-mail addresses, mask SSNs, etc...) [Fixed] - Actually fixed output filters (`x-filter-output`) for both the `get` and `list` helpers. Now with tests so that it stays fixed! Thanks @rmallah for reporting and testing this issue! 1.052 2020-04-13 23:51:56-05:00 America/Chicago [Fixed] - Fixed a case where a SQLite field could be wrongly seen as an auto-increment field when two columns have similar names. - Fixed output filters (`x-filter-output`) to be executed by `yancy->get`. This was a feature that was formerly only in the API, but is now available everywhere. Thanks @rmallah for reporting this issue! [Other] - Added new test fixtures to make unit testing Yancy less fragile. Tests will slowly be migrated to these new fixtures over time. - Added a bunch of ways to identify elements in the editor, mostly for Selenium testing but it might be useful for others... 1.051 2020-04-11 00:06:52-05:00 America/Chicago [Important!] - Read-only fields are now hidden in forms built by the form plugin by default. These aren't editable, so there's no reason to display them. Use the new "properties" configuration to show them if desired. - The Yancy::Plugin::Auth module's login_form method now returns only the form itself, not the entire page. This means it is easier to include the login form in site layouts and other pages. [Added] - Added "properties" configuration to Form plugins. This limits the form to only displaying those properties. Thanks @pavelsr for the patch! [Github #93, #94] - Added missing login forms for Github and OAuth2 auth modules. Now these will show up in the pluggable auth module [Fixed] - Added more documentation for the form plugin and the auth plugins. - Fixed form plugin to get values from the current request. This allows forms with errors to have the values the user had entered. - Added more docs for x-foreign-key fields. 1.050 2020-04-07 23:07:02-05:00 America/Chicago [Fixed] - Fixed yes/no field values not being loaded in the editor - Fixed extra browser history items being added in the editor 1.049 2020-04-06 23:25:50-05:00 America/Chicago [Added] - Added the ability for any "route" configuration to be a string. These will automatically be made into routes for you. Thanks @pavelsr for the suggestion! [Github #90] - Added "yancy.auth.logout" helper and route so that any authed user can be cleared out from any auth plugin. Thanks @pavelsr for the suggestion! [Github #91] [Fixed] - Fixed a bunch of missing/broken documentation (found by @pavelsr in #90, #91, and #92) 1.048 2020-04-05 20:59:55-05:00 America/Chicago [Fixed] - Fixed additional editor instances using the original editor's API URL. This allows additional editors to have different schemas, hiding some fields from some users. - Fixed MultiTenant controller not allowing JSON post. Now the MultiTenant controller can be used by the editor. - Fixed handling some defaults from the database. This is an attempt to fix #88 (but I don't think it does, since I could not reproduce it). [Added] - Added a sanity check for x-list-columns to make sure the columns exist. This prevents an issue where the editor would refuse to load. 1.047 2020-03-31 22:00:54-05:00 America/Chicago [Added] - Added example Dockerfiles in eg/docker and started publishing Docker images (with bundled database backends) to https://hub.docker.com/r/preaction/yancy [Fixed] - Fixed SQLite backend minimum version to 1.56. 1.54 has an issue with finding unique constraints that prevents `read_schema` from finding the right surrogate keys. Thanks @chy-causer for the report! [Github #87] 1.046 2020-03-29 12:55:40-05:00 America/Chicago [Added] - Added "now" as a default value for date/time fields. This will be translated to the database's function for getting the current date/time. [Fixed] - Fixed date/time input validation error in Chrome: "datetime-local" fields in HTML do not support seconds, so we must not give them seconds in the value. - Fixed a bunch of tests to be less fragile - Fixed date/time backend validation of empty strings. Empty strings are sent by forms a lot, but the user most likely intended the value to be some kind of null. Thanks @chy-causer for reporting this bug! 1.045 2019-12-16 22:36:47-06:00 America/Chicago [Fixed] - Fixed a bug in the DBIx::Class foreign key detection: Yancy was incorrectly using the table name, not the source name. Thanks @mario-minati for the report! [Github #84] 1.044 2019-12-05 21:49:40-06:00 America/Chicago [Added] - Added documentation for user authentication / authorization, and a corresponding demo application. - Added documentation for how Yancy hashes passwords (to integrate with other systems). 1.043 2019-12-05 16:26:02-06:00 America/Chicago [Added] - Added limited support for resolving foreign keys. A foreign key column must reference the `x-id-field` of the primary table, and composite foreign keys are not supported (same as composite primary keys). 1.042 2019-11-24 02:10:37-06:00 America/Chicago The Yancy IRC channel has been moved to Freenode #mojo-yancy [Added] - Added Yancy::Plugin::Auth::Role::RequireUser for simple authorization [Fixed] - Fixed an issue with formatting error messages from new JSON::Validator versions (3.15). Thanks @wbazant! [Github #78] - Added documentation on how to create users for password authentication. 1.041 2019-10-12 18:52:06-05:00 America/Chicago [Added] - Added array support to the Yancy editor UI. This is presently only being used by Yancy::Backend::Static, but other backends can now add support for complex data structures using JSON fields or by serializing to some data format. Thanks @wbazant! [Github #72] [Fixed] - Fixed boolean fields not allowing undefined to exist. Thanks @wbazant! [Github #73] - Fixed required Markdown fields not showing an error when not filled in. Thanks @wbazant! [Github #75] - Fixed minimum JSON::Validator version. The old minimum did not yet support some of the features we were using. Thanks "fnord" on irc.perl.org! 1.040 2019-09-13 23:15:28-05:00 America/Chicago [Fixed] - Fixed an exception being thrown when trying to show an error message on the `list` action in Yancy::Controller::Yancy. When `list` doesn't yet know how to search on a field of a certain type, it gives an error. An error in that error caused the wrong error to show. Thanks @wbazant! [Github #70] - Fixed `match()` utility throwing an uninitialized warning when testing a `!=` against an `undef` value. Thanks @wbazant! [Github #71] 1.039 2019-08-10 18:30:53-05:00 America/Chicago [Fixed] - Fixed Auth::Password plugin throwing an error when it could not determine what fields to display during registration (even if registration was disabled). Thanks @ViktorNacht for reporting this issue! (Github #69) - Fixed a broken link as reported by CPANTS. Thanks @manwar for fixing this! (Github #68) 1.038 2019-07-29 23:25:18-05:00 America/Chicago [Fixed] - Fixed `-has` and `-not_has` throwing exceptions when the queried value is not defined. Undefined values are now treated the same as an empty array/hash and always returns false for `-has` and true for `-not_has`. - Fixed Yancy controller list action total page count off by one when the total number of items is equally divisible by the page size. 1.037 2019-07-26 19:47:50-05:00 America/Chicago [Added] - Added `-has` to Yancy::Backend. This allows for searching inside deep data structures. This is only implemented by Yancy::Backend::Static, but the Postgres and MySQL backends may implement it to look inside JSON/XML in a future version. 1.036 2019-07-06 18:47:40-05:00 America/Chicago [Added] - Added `order_by` utility function for ordering arrays - Added `order_by` default for Yancy controller `list` action - Added support for null and not null to the `match` utility [Fixed] - Added better documentation for the new File plugin - Fixed Yancy controller to respond to any request format. 1.035 2019-06-30 22:04:46-05:00 America/Chicago [Added] - Added File plugin to manage file uploads. This plugin uses the local filesystem, but other plugins could be built to use file storage services. [Fixed] - Fixed default values not appearing in the editor. This changes how examples work, so there might be some problems here that will need to be worked out... - Fixed required password field not passing validation. When a user already has a password, they shouldn't have to keep giving us a new one. So, passwords are not subject to validation. 1.034 2019-06-23 20:53:24-04:00 America/New_York [Added] - Added filter subref to Yancy controller. Now you can pass in a subroutine reference to resolve the `list` action's filter. This makes it easy to add filters based on session information, user information, or otherwise. - Added multi-backend support to the editor and controllers. Now you can create a second Yancy::Backend object and use that in a second editor instance or any controller. 1.033 2019-06-19 22:34:28-04:00 America/New_York [Added] - Allow `x-list-columns` templates to contain HTML. Now you can create links in the editor. Any HTML in the database will be escaped, to prevent malicious users from messing with things. - Added a default list template: 'yancy/table'. This template shows a table with the schema's `x-list-columns` by default. Adding `show_filter => 1` adds a form to filter the table. 1.032 2019-06-13 22:36:44-05:00 America/Chicago [Fixed] - Fixed two issues preventing Auth::Github from working in standalone mode: - One was causing "Can't call method 'clone' using package ''". - The other was causing users to not be found. 1.031 2019-06-06 21:24:24-05:00 America/Chicago [Fixed] - Fixed screenshot display in documentation. 1.030 2019-06-06 21:05:22-05:00 America/Chicago [Added] - Added 'yancy.editor.include' and 'yancy.editor.menu' helpers. These helpers allow you to add new VueJS components to the editor application to help manage the content in your web application. 1.029 2019-06-06 00:22:57-05:00 America/Chicago [Fixed] - Fixed some bugs in the editor caused by switching to Yancy::Controller::Yancy. [Added] - Added Selenium tests for the Yancy editor 1.028 2019-06-04 12:11:51-05:00 America/Chicago [Fixed] - Fixed incompatibility with Mojo::JSON. Thanks @rabbiveesh! [Github #64] - Fixed some POD errors caught by CPANTS. Thanks @manwar! [Github #63] 1.027 2019-06-02 01:02:26-05:00 America/Chicago [DEPRECATED] - The Yancy::Controller::Yancy::API duplicated all the functionality of Yancy::Controller::Yancy for no good reason, so it is now deprecated. - The configuration for the API controller is now changed from `api_controller` to `editor.default_controller`. [Added] - The editor is now a plugin, Yancy::Plugin::Editor. This should help future development by making it easier to extend the editor, add new functionality, and even make it possible to have multiple instances of the editor. - Added Yancy::Help::Upgrading for help navigating the deprecations for v2.000. 1.026 2019-05-17 01:23:13-05:00 America/Chicago [DEPRECATED] These are the only deprecations until after version 2.000. - The "collections" configuration is now "schema". This is more descriptive and will allow for expanding Form and Controller plugins to accept ad-hoc schemas. The existing "collections" configuration will work, but will warn until version 2.000 (at which point it will be removed). - The Auth::Basic plugin is deprecated. Switch to Auth::Password and your users' passwords will be automatically upgraded the next time they log in. This feature will be removed in version 2.000 (at which point the user must reset their password somehow). [Fixed] - Github auth no longer registers users by default. If you want to allow new users to be created from Github, you must set 'allow_register' to true. - The editor now uses floating notifications for saved items to avoid the page jumping around. - The default layouts are now responsive for mobile devices. [Added] - The bundled Bootstrap version has been upgraded to 4.3. This version includes the "toast" component now being used by the editor. 1.025 2019-05-05 23:08:11-05:00 America/Chicago [Added] - Added new Password auth plugin. This plugin allows user to register accounts and login with a password (similar to the Basic auth plugin). - Added simple Token auth plugin. This allows for easy API authentication. - Added OAuth2 auth plugin. - Added Github auth plugin. This uses the OAuth2 plugin and fetches useful information from the Github API. - Added Auth multiplex plugin to enable multiple authentication mechanisms in a single site. This allows individual users to be authenticated from one or more auth mechanisms attached to the same account. - Added `require_user` helper for basic authorization schemes. - The Bootstrap4 Form plugin is now the default form plugin if no other form plugin is loaded. This allows the new Auth plugins to have a way to generate fields for registering users. - Added `default` value handling in `create` helper. 1.024 2019-04-26 15:55:07+01:00 Europe/London [Added] - When reading a schema from the database, Yancy will now prefer "natural" keys to artificial ones. For example, if you have a "users" table with an auto-increment "id" column and a unique "username" column, Yancy will pick the "username" column as the ID field. This creates a nicer URL structure in Yancy controllers. - Default values are now properly set from the database when reading the schema. - For DBIx::Class backends, Yancy will now call the `yancy` method on the ResultSource object to get default configuration for the collection. Using this method you can quickly make Yancy ignore your table by returning `{ 'x-ignore' => 1 }`, you can improve Yancy's detection of field settings, or you can provide a default set of list columns. - Virtual collections can now be created with `x-view`. A virtual collection can provide a read-only subset of the underlying collection's properties. In the future, virtual collections can become editable and will have column filters. - Added a `yancy backend copy` command. Use this command to copy data from your app's backend to another backend. This can initialize a test database, migrate from one backend to another, or promote data from a staging server to production. [Fixed] - Yancy will now normalize the JSON schema passed-in so that consumers get a full schema. All the default values Yancy uses will be placed in the schema data structure returned by the `schema` helper. - When reading a MySQL database, Yancy now correctly finds a unique column. Previously, it could pick a non-unique column that had an index. [Other] - Added tests for running search queries on various non-string types (integer, boolean) - Added more tests for `order_by` in the backend list method - Migrated the Yancy doc site example to use the new Yancy::Backend::Static module. This backend module is in its own distribution because it depends on some extra prerequisites. 1.023 2019-02-14 20:23:07-06:00 America/Chicago [Added] - Added auth failure logging to the Basic auth module to help diagnose user login issues. - Added filter parameters. Now a filter can be configured with parameters directly by giving an array as the filter (instead of a name). The first item in the array is the filter name, the rest of the items are passed in to the filter function. - Added `yancy.from_helper` filter. This filter calls a helper from your app to filter data. - Added `yancy.overlay_from_helper` filter. This filter calls multiple helpers to update different fields in an item. - Added `yancy.wrap` and `yancy.unwrap` filters. These allow you to flatten (unwrap) a complex data structure into a simple set of key/value pairs (suitable for a relational table) and then undo it (wrap) later. [Fixed] - Fixed the backend documentation to be clearer and provide some examples of `list()` method usage. [Other] - Increased dependency on Mojolicious::Plugin::OpenAPI to 2.12 to fix failing Yancy tests. This includes an upgrade to JSON::Validator which fixes a problem that was causing booleans to not be coerced. Now all booleans are being coerced correctly, so you should expect to see `true` and `false` values (from Mojo::JSON) after validation. - Removed duplicate code from the Mojo::* backends (Pg, Mysql, Sqlite) into a new Yancy::Backend::Role::Relational and Yancy::Backend::Role::MojoAsync 1.022 2019-01-13 13:22:33-06:00 America/Chicago [Fixed] - Fixed home directory for Yancy standalone app to be the current working directory. This directory is where the config file, "public" (static files) directory, and "templates" directory are found. Thanks @pplu for reporting this bug! [Github #47] - Added documentation note about how to configure Auth::Basic login session expiration using Mojolicious::Sessions `default_expiration` 1.021 2019-01-08 23:52:52-06:00 America/Chicago [Added] - Added some more intelligent inferences about a configured OpenAPI spec to hook up the controller. In short: It's now easier to provide your own OpenAPI spec to work with the Yancy editor. Thanks @mohawk2 for continuing this work! [Github #43] [Fixed] - Fixed compatibility with JSON::Validator version 3. Thanks @mohawk2 for the patch! [Github #45] Thanks @eserte for the report [Github #44] 1.020 2019-01-01 19:02:29-06:00 America/Chicago [Fixed] - Fixed hosting Yancy behind a reverse proxy with a path. In previous versions, this would result in links with 404 errors, problems logging in using Auth::Basic, and a completely broken editor. - Removed sanitization from the Markdown editor in the Yancy editor. This allows use of raw HTML, as Markdown was intended to allow. 1.019 2018-12-30 18:33:51-06:00 America/Chicago [Added] - Added a warning when the editor is only displaying a numeric ID for the row. This should make it easier for users to know what to do to configure `x-list-columns`. Thanks @smonff for the report! [Github #41] [Fixed] - Fixed OpenAPI spec references to properly escape URL metacharacters. Thanks @mario-minati for the report! [Github #38] - Some documentation fixes 1.018 2018-12-17 22:37:43-06:00 America/Chicago [Added] - Added `read_schema` flag to collections. Now you can opt-in to only the collections you want: use Mojolicious::Lite; plugin Yancy => { backend => 'sqlite:myapp.db', collections => { # Only edit the blog from the Yancy editor blog => { read_schema => 1 }, }, }; app->start; Thanks @mario-minati for the suggestion [Github #34] [Fixed] - Fixed some broken links in the docs - Fixed property-level filters to run before the collection-level filter. This was my original intention. Thanks @CandyAngel for testing this! - Added a better error message when a collection is missing some kind of ID field. This should make it easier to see when configuration (or auto-configuration via `read_schema`) has failed. Thanks @mario-minati for the bug report [Github #35]! 1.017 2018-12-09 17:43:07-06:00 America/Chicago [Added] - Render boolean fields in the editor list as "Yes" or "No" - Confirm dialog when trying to close an edit form with changed data. No more will you lose work when accidentally hitting the "Cancel" button! - Removed "password" fields from the return value of the "get" and "list" helpers. The data helpers are designed for safety: The result of these helpers can be dumped out without worry about sensitive data. If you need to see a hashed password, use the backend directly. [Fixed] - Fixed string "0" and "1" failing boolean validation. Now these values can be used in forms to edit boolean fields. [Other] - The controllers were enhanced to allow easier subclassing. Now `render()` is never called directly, allowing you to subclass and call `render()` yourself! 1.016 2018-12-06 22:51:13-06:00 America/Chicago [Added] - Added 'x-filter' to collections. Now filters can be run for the entire item and not just a field inside the item. Collection-level filters can do fun things like derive one column's value from another column. Thanks @CandyAngel for the idea! [Fixed] - Fixed a broken link in the documentation 1.015 2018-11-24 22:52:23-06:00 America/Chicago [Added] - Basic Markdown field for Bootstrap4 plugin. Markdown is not yet processed correctly, but that will be added later. Thanks @mohawk2! - Added documentation about how the OpenAPI spec is generated, along with the ability to provide your own OpenAPI spec to the editor. - Added a new documentation website to http://preaction.me/yancy [Fixed] - Added more tables to ignore by default: Now all the "pubsub" tables for Mojo::mysql::PubSub and Mojo::SQLite::PubSub are ignored, as well as the tables for DBIx::Class::Schema::Versioned. [Other] - Improved test coverage thanks to http://cpancover.com. Thanks @mohawk2 for doing this work! 1.014 2018-11-09 15:54:17-06:00 America/Chicago [Added] - Added method to get all of the collections read from the schema using the `yancy.schema` helper. Thanks @treehug88 for the idea! [Fixed] - Removed duplicate NAME section from `bin/yancy` POD. Thanks @manwar! - Fixed missing ABSTRACT section in `Yancy::Backend` POD. Thanks @manwar! 1.013 2018-11-09 11:32:00-06:00 America/Chicago [Added] - Yancy backends now ignore some database tables by default. These tables are: * mojo_migrations - Used to track database migration versions * Minion tables (based on which backend you're using) - Added documentation site example. This will (eventually) be used to build a Yancy documentation website. [Fixed] - Fixed OpenAPI spec to remove unused "Array" items. Thanks @mohawk2! - Removed deprecated PODRenderer plugin in examples. I have created a fork called PODViewer. - Fixed documentation for Standalone mode to make it easier to use. - Fixed detection of `UNIQUE` keys in SQLite. SQL is case-insensitive, and SQLite's table schema is just the SQL used to create the table, which we parse to create the JSON schema. - Fixed a problem with Postgres tables having multiple unique keys. - Allow `id` values to change when editing. This fixes multiple problems in the editor and the backend that were activated as a result of trying to edit the `x-id-field` values. - Allow `/` in `id` values. This allows paths to be used as IDs, which is crucial to making an easily-editable website. [Other] - Work has been started to separate the Yancy editor into its own Yancy::Plugin class. Thanks @mohawk2! - Removed a UTF-8 character from some documentation. The Mojolicious::Plugin::PODViewer doesn't correctly say that it's sending UTF-8 data, and the Mojolicious::Command::export doesn't correctly decode/encode UTF-8 data. 1.012 2018-10-29 22:19:56-05:00 America/Chicago [Added] - Added `curry` and `currym` utility functions. These functions make it much easier to create Mojolicious helpers inside of plugins. - Added better exception handling from backend methods. Now if a backend method dies for some reason (misconfigured schema, bug in the backend, lost connection), a friendlier error message will be displayed. [Fixed] - Normalize boolean fields to `0` (false) and `1` (true). Different databases have vastly different ways of handling booleans, but this is supported by all of them. Backends will support input in multiple ways (`0`, `false`, ``, and `f` for false), but will always output `0` and `1`. - Fixed required field order when reading schema in MySQL backend. Reading the schema was being done in an unpredictable order. 1.011 2018-10-27 00:31:00-05:00 America/Chicago [BREAKING] - The new schema helper (added in v1.009) no longer allows accessing fields in a schema. The second argument is now used to add new collections. [Added] - Added new argument to `schema` helper to allow adding new collections. This allows plugins and apps to add their own collections during startup after Yancy configuration has been read. [Fixed] - Fixed tests failing due to Mojolicious::Plugin::OpenAPI v2.00 by increasing dependent version to 2.01. - Removed extra Bootstrap 4 from the distribution example apps - Fixed form plugin field title and description not appearing correctly - Fixed detecting boolean fields when reading the schema for MySQL, SQLite, and DBIC backends 1.010 2018-10-24 19:19:28-05:00 America/Chicago [BREAKING] - The minimum Perl version that Yancy supports is now 5.14. Mojolicious says "Perl versions 5.10.x and 5.12.x are known to work very poorly with Mojolicious" (https://mojolicious.org/perldoc/Mojolicious/Guides/FAQ#Which-versions-of-Perl-are-supported-by-Mojolicious), and causes Yancy's tests to fail on 5.10. From this guidance, Yancy no longer supports these versions of Perl and will be at least Perl 5.14 going forward. [Fixed] - Upped dependency on Role::Tiny to version 2.000001 in accordance with Mojo::Base needing this version do actually do roles. Thanks @eserte and CPAN Testers for the report! - Fixed a missing `=back` in the documentation. Thanks @manwar and CPANTS for the report! - Fixed some unclear documentation for configuring the "properties" stash in Yancy::Controller::Yancy. 1.009 2018-10-21 20:48:42-05:00 America/Chicago [Added] - Added `schema` helper function to easily access the JSON schema for collections and properties. - Added Yancy::Plugin::Form::Bootstrap4. This plugin generates forms for the configured collections, making simple create/edit forms even easier. - Added first/last page links in the editor pagination bar. This makes it easier to get back to page 1 after browsing a few pages. - Added `inputmode` attribute to the editor form elements to provide better input choices to mobile devices. - Added `properties` option to the Yancy::Controller::Yancy `set` action and the `set` and `validate` helpers. This allows editing only a subset of the fields in an item. Previously, the entire item would need to be given to `set` to pass validation. Now we can update a single field and assume that the data already in the database passed validation when it was created. [Fixed] - Fixed Yancy generating an invalid spec when not all field types are filled out in the configuration. - Fixed `item` stash value not being set during a `GET` request on the Yancy::Controller::Yancy `set` action. It's hard to generate a form to edit an item if there's no item to edit... - Fixed an issue preventing Yancy from working with Mojolicious::Plugin::OpenAPI version 2.00. Yancy was using behavior that only worked accidentally, and broke with the new release [Github #18]. Thanks @eserte for the report! - Documented the bundled versions of the included JS/CSS projects. These versions are subject to change, so be sure to read these changelogs if you're also using these bundled projects. - Silenced a warning about a missing "password" format from JSON::Validator. - Fixed overly-strict number validation from JSON::Validator: A string "10" previously would not be understood as a number, which makes it difficult to read forms (which are all strings). - Prevent updating read-only fields from the Yancy::Controller::Yancy `set` action. Read-only fields should never be updated from the web. 1.008 2018-09-10 20:14:42-05:00 America/Chicago [Fixed] - Fixed editor not fetching newly-created item when `x-id-field` is set in the collection. Thanks @ViktorNacht for reporting this issue! [Github #17] - Fixed item list table not showing any columns when `x-id-field` is set. Thanks @ViktorNacht for reporting this issue! [Github #17] - Fixed docs for the `x-ignore` collection configuration appearing under the field configuration 1.007 2018-08-12 15:25:30-05:00 America/Chicago [Fixed] - Fixed missing prereq on Role::Tiny. Thanks @manwar! [Github #16] 1.006 2018-08-12 01:07:34-05:00 America/Chicago [Added] - Added promise-based APIs to all backends. Now backends that support asynchronous requests can be used asynchronously, and backends that do not can still use the promises API for compatibility. [Fixed] - Fixed tests writing spurious log output to STDERR 1.005 2018-05-18 21:47:07-05:00 America/Chicago [Added] - Added the ability to pass a hash of configuration options to Yancy backends. This allows backends to be configured directly from a configuration file, instead of requiring the consumer to instantiate an object themselves. [Fixed] - Fixed filters persisting when changing collections. Most collections do not have the same fields, so there is little possibility keeping filters between collections could be useful. - Fix filter description text misaligned with remove button - Fix sortable column showing incorrect cursor. Now, hovering over the column header will show the correct pointer icon, inviting it to be clicked. The sort column header now also changes color slightly on hover to help show which column you are about to sort. - Upgraded Mojolicious and Mojolicious::Plugin::OpenAPI dependencies to silence warnings from deprecations and new development in those projects. - Fix paginator not showing the last page. Instead of showing the last page, it would just show a `...` always. Off-by-one errors are hard! - Fixed sidebar showing when the "No collections configured" error is shown. It looked like it was hiding something. - Fixed new items showing as "undefined" in the list. This has been broken since 0.022, when we changed the `create` backend method to return the ID of the new item. We could use a test suite for our JavaScript application... 1.004 2018-03-30 13:24:14-05:00 America/Chicago [Fixed] - Fixed dependency version for OpenAPI plugin to support `yancy.openapi` helper. - Fixed editor pagination links to scroll to the top of the window 1.003 2018-03-28 15:47:55-05:00 America/Chicago [Added] - Added a `yancy.openapi` helper to get at the Mojolicious::Plugin::OpenAPI object for useful purposes. Thanks @mohawk2! [Fixed] - Fixed a bunch of spurious warnings in the tests. Thanks @mohawk2! - Fixed missing dependencies on required modules. This should help fix test failures in CPAN Testers and strange errors from users. Thanks @0xAF for reporting this! - Fixed missing tests for date/time fields and array of types. - Fixed warnings about invalid formats from JSON::Validator. - Fixed field config documentation to explain what the field config values mean. 1.002 2018-03-18 16:55:11-05:00 America/Chicago [Fixed] - Fixed some optional tests that were causing Travis build failures - Fixed Yancy API returning an error message when an item contained a `null` value. Thanks @Akron! [Docs] - Added documentation on how to use the `run_backend_tests.pl` script to run Yancy's integration tests. Thanks @Akron! - Added documentation on nullable fields and what to do if the Yancy API returns an error about "Expected - Got null." Thanks @Akron! 1.001 2018-03-15 14:55:05-05:00 America/Chicago [Fixed] - Stop using deprecated `Mojo` base class - Improved backend helper documentation with links - Fixed links to old config docs to link to new config docs 1.000 2018-03-15 00:21:07-05:00 America/Chicago [Added] - Added basic filtering to the editor web app - Added `x-ignore` to completely remove collections from the API (when these collections would otherwise be added by `read_schema`) - Allow any unique constraint to be used as the Yancy key for a collection. This solves some problems where a table had a unique constraint, but no primary key. - Added an example application, and some integration tests to go with it. More example applications will be built later. 0.023 2018-03-10 18:57:54-06:00 America/Chicago [Added] - Added a `total_pages` stash to the `list` action of controllers. This can be used to build pagination links to move between list pages. - Added a `filter` stash configuration to the `list` action of controllers. This allows for filtering the data in the list. - The ID field of a collection can now be any unique field of the collection. - Added sorting to the editor. Clicking a column heading will sort the list by that column. [Fixed] - Fixed multi-tenant controller (Yancy::Controller::Yancy::MultiTenant) to be useful. Previously, it tried to make the editor available in a multi-tenant style. Now, you can use it to build routes to display content from a collection that is owned by a specific user. - Fixed page/limit stash values not always appearing in Yancy controller actions. Pagination links require that we always know the current page, so now Yancy is sure to set the current page if it is not already set. - Fixed DBIx::Class backend to work with any unique column in a table, not just the primary key. For example, this allows Yancy to use the `username` column of a `users` table while still allowing an `id` column to be the primary key. - Fixed MySQL backend returning the wrong ID during create. It was always returning a generated ID, even if that ID could not be used by Yancy to fetch the data just inserted. - The query parameters for the `list` API used by the editor have now been prefixed with a `$` to distinguish them. In the future, we will be adding filtering to the `list` API, and there cannot be collisions with existing meta-parameters. 0.022 2018-03-06 15:56:48-06:00 America/Chicago [BREAKING CHANGES] These are likely the last breaking changes before version 1.0. - The `create` method of all Yancy backends now only returns the ID of the newly-created item. This also extends to the API and the `yancy.create` helper. - The `set` and `delete` methods now return true if there was an item found and modified, false otherwise. The API still returns the full, modified object, but the `yancy.set` and `yancy.delete` methods both return true/false. [Added] - Added CSRF protection to the Yancy controller. Code in Yancy needs to be secure by default. - Added logging for validation errors using Yancy helpers. Exceptions need to be logged to help track down problems. 0.021 2018-03-02 12:39:14-06:00 America/Chicago [BREAKING CHANGES] - The `list` method of all Yancy backends now returns a hash with keys named `items` and `total`. Previously, the keys were named `rows` and `total`. This change makes it more clear what data is where, and makes it easier to simply shove all the data into the stash. The word "rows" implies more of a relational database model than Yancy is meant to be. [Added] - Added `Yancy::Controller::Yancy`, a simple controller for boilerplate Create, Retrieve, Update, and Delete (CRUD) operations on data. Use these to speed development instead of writing your own route handlers. [Fixed] - Fixed out-of-date screenshots - Markdown editor is now responsive for smaller screens 0.020 2018-02-25 14:42:31-06:00 America/Chicago [Added] - Added a new responsive sidebar menu to the editor. This menu performs better on mobile devices. [Fixed] - Fixed integration test for other backends. This wouldn't have prevented installing, but could have hidden bugs in backends. - Fixed "add item" button to be more visible when the add item form was open. Clicking on the "add item" button will now close the add item form. - Fixed bad Auth::Basic plugin configuration causing strange errors. The configuration is now checked for sanity before continuing. - Fixed `auth` layout being too big for the page, causing a scrollbar to appear. [Docs] - Moved standalone app docs to another file. This should de-emphasize the standalone app, which is more of a curiosity than a useful product. [Other] - Upgrade to Bootstrap 4.0.0 release. Previously we were using the 4.0.0 beta version. The stable release version re-adds offset classes and other utilities that we need. - Moved `controller_class` configuration to `api_controller`, which better defines what the class does. The controller class itself is now `Yancy::Controller::Yancy::API`, to better describe what it does and to free up the `Yancy` name for future development. This future development should make the `MultiTenant` controller more useful and make developing apps with Yancy even easier. 0.019 2018-02-23 23:25:57-06:00 America/Chicago [Added] - Added a layout template for auth plugin. This layout template doesn't have confusing links like "Yancy" and "Back to Application". - Added error message when login fails [Fixed] - Fixed missing documentation for title/description fields in collections. Thanks @lindleyw! [Github #11] - Fixed documentation for auth plugin: The code examples were completely broken. - Fixed login form losing the return to URL if there was a login failure. - Fixed editor displaying no content when URL points to a non-existent page - Fixed "Back to Application" link being collapsed behind a menu button on small screens - Fixed collection title not being used in the collection navigation list - Improved responsiveness of editor application: Now the collection list takes up more space on smaller screens to avoid wrapping of collection names. 0.018 2018-02-21 18:10:29-06:00 America/Chicago [Added] - Added `plugin` helper to easily load Yancy plugins - Added `auth->route` helper to Yancy::Plugin::Auth::Basic to allow adding more routes that require authentication. [Fixed] - Fixed displaying login form requiring authentication if auth covered the entire site - Fixed wrong tables being found when reading MySQL or Postgres database schemas. These database systems allow multiple schemas in a single database instance, so we need to make sure we're reading from the right schema. - Fixed the SQLite backend docs using invalid SQL syntax. Thanks @Akron [Github #10] - Fixed test module (Yancy::Backend::Test) being installed with rest of project [Other] - Run all tests under all backends using Travis. All supported backends are running all Yancy tests instead of just their individual backend tests. This should help to ensure that every backend has the same behavior and functionality. 0.017 2018-02-17 22:25:32-06:00 America/Chicago [Added] - Added `route` configuration to allow Auth plugin to protect more than just the Yancy editor. Now it can protect the entire site. [Fixed] - Fixed paginator looking bad when more than a few dozen pages existed. Now only 9 pages are shown at maximum. - Fixed login failed not having the correct, 400 HTTP status code - Fixed login form to return to previous page. This will be important when the login form is used for more than just the Yancy editor. 0.016 2018-02-16 22:33:21-06:00 America/Chicago [Added] - `read_schema` now properly adds `x-order` to show the form fields in the same order as defined in the table schema. - Added templated list columns. Useful information can be shown more compactly in the list view. - Added `x-view-url` and `x-view-item-url` to provide links to view information in the editor. [Fixed] - Fixed pagination showing blank pages 0.015 2018-02-12 12:52:32-06:00 America/Chicago [Added] - Allow `null` as a value for optional fields. Now we can specify optional fields as `type: [ "", null ]` and these fields are correctly parsed from the existing schema. This fixes validation errors where data could be inserted into the database but not read back out because the JSON::Validator correctly asserted that the data was not allowed to be `null`. [Fixed] - Fix error when collection in URL is invalid. This seemed to cause very strange errors throughout the application. 0.014 2018-02-09 14:50:26-06:00 America/Chicago [Added] - Added "textarea" field format for multiline text fields - Added friendly error message when no collections configured - Added `x-order` field configuration to control the order of fields in the edit form [Fixed] - Fixed "Yancy" and "Back to Application" links in Yancy UI to point to useful locations. Thanks @lindleyw! 0.013 2018-02-07 23:21:49-06:00 America/Chicago [Added] - Added display of `title` and `description` for collections and fields [Fixed] - Fixed problem with tests not running on Perls < 5.24. Thanks @lindleyw! [Github #9] 0.012 2018-01-29 12:37:52-06:00 America/Chicago [Fixed] - Backends now give friendly errors when their prereqs are unmet - Fixed automatically generating schema not working when no properties were configured manually - Create new item form no longer shows read-only fields. This prevents us seeing blank ID fields which we can't fill in - Fix validation error when not filling-in a field with a default value. [Added] - Added `ENUM` type detection for all backends: - MySQL has a built-in `ENUM` type - DBIx::Class has `extras` column property which has a `list` array - Postgres has custom types which can provide `ENUM` - SQLite has `CHECK` constrains which can provide `ENUM`-like features with ` CHECK ( IN ( ) )` 0.011 2018-01-13 12:46:24-06:00 America/Chicago [Fixed] - Removed dependency on Module::Loader in favor of Mojo::Loader - Removed accidental import of File::Share 0.010 2018-01-12 16:53:16-06:00 America/Chicago - Yancy now works on Perl versions down to 5.10 (just like Mojolicious). - Yancy now bundles its required CSS and JavaScript to make it easier to use Yancy when not connected to the Internet. [Added] - Yancy can now share a database object with the rest of your app by passing in a hashref for the C. See Mojolicious::Plugin::Yancy. 0.009 2018-01-07 16:33:16-06:00 America/Chicago [Added] - Added `read_schema` method to all backends. This reads the database tables in the backend and produces an OpenAPI schema ready to be used for configuration. - Added `read_schema` configuration key. If true, Yancy will read the backend schema and merge it in with your configuration. This allows for less repetition when building a Yancy application. This exposes _all_ of your data to Yancy, so you should only do this when you have added appropriate authentication and authorization to prevent malicious use. - Added `x-hidden` collection configuration to hide collections from the Yancy web app. This does not prevent API use, but does prevent data from being shown before it is ready. 0.008 2017-12-17 18:17:56-06:00 America/Chicago [Fixed] - Fixed tests failing due to outdated Mojolicious::Plugin::OpenAPI. Thanks @eserte! [Github #4] - Fixed POD formatting error due to having UTF-8 characters without declaring the right encoding. Thanks @manwar! [Github #5] 0.007 2017-12-16 18:16:22-06:00 America/Chicago [Added] - Added `controller_class` configuration to Plugin. Now you can make your own controller to customize things like authorization. - Added `config` helper to access the configuration for Yancy in custom controllers or plugins - Added MultiTenant controller which only shows content that is owned by the current user. [Fixed] - Fixed some problems that would cause the Sqlite backend to not work. Thanks @wlindley! [Github #3] - Fixed the plugin and standalone apps to use the same URL scheme by default. This makes the documentation less confusing. - The `yancy.set` and `yancy.create` helpers now validate the data and run it through any filters. These helpers are the key to making your own routes that work with data configured in Yancy. 0.006 2017-12-15 11:06:59-06:00 America/Chicago [Added] - Added backend support for SQLite (thanks @wlindley!) [Github #2] - Added Basic auth plugin for a simple, database-backed authentication scheme. - Added documentation about how to override Yancy templates to produce your own look-and-feel [Fixed] - Fixed some POD errors reported by CPANTS (thanks @manwar!) [Github #1] 0.005 2017-12-12 15:45:14-06:00 America/Chicago [Added] - Added footer with Yancy version and link to Github - Added `plugins` configuration to standalone app - Added UI feedback after saving/adding items and error messages on failure - Added `order_by` to backends and API. Now we can sort the results we get from the collection. - Added Markdown editor for fields containing Markdown (`"format": "markdown"`) - Added field filters (`x-filter`) to allow for hashing of passwords - Added auto-index templates to the standalone app. This allows for building a single template for `//`. - Added search query to list backend method [Fixed] - Fixed forms not displaying if an `example` was not added to the collection - Fixed no list columns displaying without `x-list-columns`. Now there are some default column names that will show up in the list. - Fixed missing documentation for: - Yancy::Backend - Plugin helpers 0.004 2017-12-05 14:50:02-06:00 America/Chicago [Fixed] - Fixed DBIx::Class backend test failing without SQL::Translator. Now it skips the test without that required module. [Docs] - Added more docs to the test files to help new developers 0.003 2017-12-05 13:16:44-06:00 America/Chicago [Fixed] - Raised minimum Mojolicious version to 7.15 (which adds Mojo::File). Thanks CPAN Testers! 0.002 2017-12-02 20:46:56-06:00 America/Chicago [Fixed] - Fixed app trying to save readonly properties. The OpenAPI spec prevents this, but that means we get an error and our data isn't saved correctly. - Fixed invalid spec URL. The spec only worked accidentally, which was weird... [Added] - Added screenshot to documentation 0.001 2017-12-02 18:49:56-06:00 America/Chicago - Initial release [Added] - Basic OpenAPI spec generation - Database editing web application - Auto-generated form to edit database content - Simple built-in CMS - Mojolicious plugin to add Yancy to your Mojolicious app - Database backends for MySQL, Postgres, and DBIx::Class