ShinyCMS Ruby Versions Save

ShinyCMS is an open-source CMS built in Ruby on Rails, with support for themes, plugins, and cloud hosting. (There is also a Perl version: www.github.com/denny/ShinyCMS)

v21.06

2 years ago

Today is my flatmate's birthday! And it was either name the release for that, or call it 'the unemployed layabout release', as I finished working my notice on Friday and haven't quite sorted out the next job yet 😱

This month was mostly about finishing up the View Components work in the admin area that I started last month, although some other stuff happened along the way, as it does tend to. In particular, route partials got a complete rewrite, and feature plugin controllers/mailers/components no longer inherit common behaviour from core plugin Base classes (now they import it from core plugin Base modules instead - much better!) (I think!) 😝

Also I added an 'add element' feature to templates and templated content (pages and newsletter editions), something that power users have got a lot of mileage out of on the Perl version of ShinyCMS.

Shout out for the docs contributions from @paultcochrane this month; thanks Paul! 😃

As ever, there are more details in the release notes.

v21.05

3 years ago

Relatively quiet month, especially compared to the last few! I'm in the process of quitting one job and finding the next, so that's taken a lot of my time and energy. I'm happy with the first pass at adding view components though, expect more of those next month...

Highlights for this release:

  • Security updates: Rails and related Action* gems had a cluster of CVE fixes this month
  • Added: [View Components][1], [mutant][3], config/initializers/shinycms.rb, flayignore, Blazer::ApplicationController, ... and more 🙂
  • Updated:
    • Split main site DiscussionsController, creating CommentsController too
    • Accessibility fixes for the Halcyonic theme [PR #1088][5] [PR #1091][6] [PR #1112][7]
    • The host app's ApplicationController is now free of confusing Blazer gank
    • Lots of gem version bumps - including rubocop*, which required some code and config changes
  • Removed: several packwerk todo files, the now-unneeded host app MainController, and all the admin menu partials that got replaced by view components 😃

There's a little bit more detail in the release notes, but this is the bulk of it - quiet month, as I say! The next few might be quiet too, as I get to grips with a new job and their codebase.

[1] https://github.com/github/view_component#readme [2] https://github.com/denny/ShinyCMS-ruby/pull/1096 [3] https://github.com/mbj/mutant#readme [4] https://shinycms.org/blog/2021/04/cheat-codes [5] https://github.com/denny/ShinyCMS-ruby/pull/1088 [6] https://github.com/denny/ShinyCMS-ruby/pull/1091 [7] https://github.com/denny/ShinyCMS-ruby/pull/1112

v21.04

3 years ago

Main addition (and cause of some fairly major code shuffling) in this release is Packwerk, to enforce plugin boundaries.

Also added routes partials, bullet (N+1 query detection), CodeClimate coverage reporting, and the Items extension for Pagy.

Plus lots of improvements to base controllers and mailers (now in the core plugin's app/public area), and moved Rails Email Preview engine, rubocop config, and ShinyCMS rake tasks, from main_app into the core plugin.

v21.03

3 years ago
  • Headline for this release: I moved almost all the code that was still in main_app, into a plugin! 😮

  • I wrote a lot more code to support the Plugins 'infrastructure' or framework or whatever you'd call it.

    • I used the Persistent Diamond immutable data structures to underpin the Plugin subsystem; so far so good, so probably more of that in future.
  • New plugin! ShinySEO can generate sitemaps for Googe et al (although it's not automated yet)

(Lots) more details in the release notes, which nearly turned into a blog post this month for some reason.

FYI, installing on Heroku right now seems problematic; I had to remove Pry from the Gemfile to get it working personally, they seem to be unable to find one of its dependencies although I had no trouble locally.

v21.02

3 years ago

A quiet month, after last month's big bang of Ruby + Rails upgrades!

Bug fixes include tags on hidden content being hidden now, a fix to user profile instantiation in dev that stops the User.profile relation vanishing under stress, and more robust handling of attempts to hit non-existent non-HTML resources (usually by malware).

Various bits of work on code quality - in particular, refactoring around the User model, and moving admin 'quick search' implementation details from controllers to models. Also, properly adding Ruby Critic, and continuing to nibble away at the things it highlights.

The MJML syntax validator was rewritten to use the mjml -v directly, rather than going through the Mjml::Parser gem.

Changes to error handling to make it more standard - mostly starting with 404s.

See the release notes for more details.

v21.01

3 years ago

A couple of fairly significant bumps in the dependency chain last month, with Rails going from 6.0 to 6.1, and Ruby from 2.7 to 3.0 - between them this entire release probably counts as a breaking change. Enjoy! 😉

Other notable updates include a change of pagination gem (goodbye Kaminari, hello Pagy!), the removal of Travis CI (the new owners do not seem keen on open source projects), the addition of a few more code quality tools (rubocop-rspec, rails_best_practices, rubycritic, and TypoCI), and some more work on moving all of the supporting files for themes into the /themes directory - this time the JavaScript bits.

More details in the release notes, as ever.

🎉 🎉 🎉 Happy New Year!! 🎉 🎉 🎉

v20.12

3 years ago

The most noteworthy features of this release are:

  • The new ShinyAccess plugin, which provides access control features for content on the main site
  • Image elements in templated content are now handled by ActiveStorage
  • User profiles have been fully split off from user accounts
  • Default charts and dashboard added for Blazer
  • Explicit config added for HTML sanitizer, meaning various common tags/attributes are now allowed through when displaying blog and news posts

Notable bug fixes in this release include one security fix (access to the Blazer charting features in the admin area is now properly controlled by Pundit authorisation), and two ways that a mistake in the content of SHINYCMS_PLUGINS could have caused fatal errors on startup are now handled gracefully instead.

Breaking changes include renaming of two feature flags, and a new location for theme asset files.

For more details, please see the release notes

v20.11

3 years ago

Okay, I admit it - I almost forgot that I'd started doing releases, and that I intended to aim to do one at the start of each month.

My memory was jogged by the fact that I'm giving a talk tomorrow (well, today now), partially about ShinyCMS... so here is a slightly late November 2020 release :slightly_smiling_face:

See the release notes for the gory details, but highlights include updating to ruby 2.7.2, adding search and pagination to pretty much all sections of the admin area, and adding 'soft delete' to all the models.

v20.10

3 years ago

First release!

Fair warning; I'm releasing today because of the date (one year since I started the project!) rather than with any guarantee that this particular version of the code is more stable or less buggy than it was yesterday or will be tomorrow.

This project is still under very active development, and until I hear from somebody who is using it in production, I reserve the right to commit breaking changes with no warning and no shame :smile:

Current features

  • Provided by plugins:
    • Pages and Page Sections
      • Site admins can add as many pages and (nested) sections as they like
      • Pages have defined content areas which can be edited by admins
      • Page layout is controlled by Page Templates (can be provided by a theme or custom-built)
      • Dynamically generated menus
    • Inserts (re-usable content fragments that can be pulled into any template)
    • News section
    • Blog
    • Mailing lists
    • Newsletters
    • Basic form handlers (e.g. contact form submitted -> email form data to site owner)
    • Site search feature (supports multiple search back-ends; default is pg_search)
    • Load only the plugins you want/need - smaller footprint, smaller attack surface
  • Provided by the main app:
    • Comments (currently enabled on blog posts and news posts)
      • Fully nested, so you can easily see who is replying to who at any level
      • Email notifications of replies to your comments and posts
      • Uses reCAPTCHA to block comments from bots
      • Uses Akismet to flag potential spam comments for moderation
        • Spam comment moderation sends 'spam'/'not spam' training data to Akismet
    • Tags (currently enabled on blog posts and news posts, ready to add to any content type)
    • Likes or up/down votes on posts, comments, etc
    • User accounts and administration
      • ACL-based authorisation system for admins (powered by Pundit)
      • Uses reCAPTCHA to block registration by bots
  • Support for themes on the hosted site
    • Light-lift theme system - you only need to override the default templates that you want to change
    • Two themes currently included:
      • Halcyonic (one, two, and three column layouts; suitable for content-rich sites)
      • Coming Soon (single page with mailing list sign-up form and slideshow background)
  • Web interface for site settings
    • Change most site settings from within the CMS admin area
    • Easily enable or disable CMS features (e.g. new user registrations)
    • Decide which settings to allow site users to override (e.g. theme)
  • All emails use MJML templates, producing reliably cross-platform HTML emails
  • Built-in web stats (powered by Ahoy) and email stats (powered by Ahoy::Email)
  • Charts and dashboards for viewing stats (powered by Blazer)