-
Publish to S3. If you create a bucket in S3 and configure it for 'website hosting' then you can publish to it directly and serve your (static) site directly from there with no need for a public web server on your CMS host.
-
The previous 'entry_store' based method of recording box contents has been replaced with a more natural many-to-one SQL relation.
-
There's a new
spot site indexcommand that can re-generate the search indexes based on the currently published content. -
Model classes now have
::eachand::mapmethods for iterating through all instances of a type. -
The output store is now responsible for marking a revision as active, which is how it should have been all along.
-
Assets and static files are now published into the output store, along with templates.
-
Media URLs now include the MD5 of the content to prevent caching problems when using a CDN.
-
Boxes can now have user-visible comments added.
-
A massive performance improvement when working with large schemas.
-
Move to an external asset pipeline. Bye-bye sprockets! See
docs/assets.mdfor an overview.
- There's now a cli task to re-index the site
- A legacy '/rev' route has been removed from the front Rack app
- Box tabs now display better (the power of Flexbox)
- Sprockets-Sass is now used to improve import behaviour
-
Box#adoptnow cascades changes to the content path through all the adopted contents children. This paves the way for moving content around in the UI... A side-effect of this is that an item'sowner_idis now included in the calculation of the current content hash, so there'll be some bad behaviour around modification status until this beds in. -
File and image fields now return consistent values for
#blank?and#empty?. -
Adding an alias of an invisible target no longer sets creates a bad visibility state on the created alias (#57)
-
Changing the visibility of the parent of an item with aliases now correctly updates the visibility of the aliases.
-
The UI correctly reflects the status of all items in the current page affected by a visibility change, even if they're in another box.
-
Incremental loading of box entries in the UI now works according to the height of the box contents, rather than arbitrary counts. This improves the behaviour of long lists of entries.
-
File-based fields now include the file MD5 digest in their generated media URLs by default to avoid problems with CDN caching (this is how it should have worked from the start TBH)
-
Modified page slugs are actually published.
-
Changes to target page slugs are published to any page aliases
-
Fixes to box ordering
-
Strip trailing slashes when looking up preview paths
-
Add an index to improve publishing times
-
Remove associated page locks when cleaning up after schema changes
-
Page order changes are now correcly published
Is it wise to release a new version during a solar eclipse?
-
Enabled previewing of private pages within the CMS. Previously this would invoke some Inception-like preview-within-preview loop
-
Boxes can now define a
path_originfunction that returns aContent::Pageinstance or a string which sets the root path for all pages added to it. This allows for your content & path hierarchies to differ (e.g. having child pages of the/bandspage, e.g./bands/the-beatlesappear publicly at the root of the site i.e./the-beatles). -
Page types can set a custom default slug root so that instead of being added as
page-YMD-HMSthey can be configured to default tosomething-YMD-HMSby overriding the value returned byContent::Page#default_slug_root. -
You can now get a list of content ids for a box using the
Box#idsmethod -
The db connection can now be set using a
DATABASE_URLenv setting -
File and Image fields now generate their URLs dynamically. In the case of cloud hosted media this means you can change the way you address the media without having to regenerate the values e.g. in the case that you move from a direct S3 bucket to a CDN. You can also use any object that responds to
#call(path)to generate the URLs which opens the door to splitting your media across multiple asset hosts. -
Pages can now declare 'wildcard' routes without namespaces which makes them more like standard controllers. E.g. declaring
controller do get '/wibble/:id' do ... end endwill allow a page mounted at
/wombleto accept requests to/womble/wibble/23etc. -
The publish dialogue now has a
Rerenderbutton that allows developers to re-render the site without publishing any content in the case of a template/asset change. Great if you need to push a fix but don't want to wait for or force the editors to publish something. -
You can now configure some default options for rendering image fields (and the default output for
${ image }no longer includes the width & height by default (we’re responsive now, right?)).
- JSON de/en-coding is now handled by Oj not Yajl after some informal testing showed a ~50% speed improvement.
- The site initialization has been re-written to improve clarity & reliability
- Capistrano tasks can now be configured to use a custom binary for
rakeandspotcommands - Boxes now have a
#clear!method to remove all their contents Content#/is an alias for#getby id- The db timezone is set to UTC which results in some improved performance
Site#inspectoutput is less mad- The asset serving in preview mode has been moved before the authentication checks so we aren't running hundreds of db calls just to return some JS and images.
- The sprockets context has been given some Rails-compatible methods to help
with using 3rd party sprockets plugins, e.g.
sprockets-less. - Select fields can now have a default value set
- Video fields now have an
aspect_ratiomethod spot site rerenderis an alias forspot site render
- Enabled previewing of private pages
- Front server no longer needs restarting to pick up a new revision in development mode (#47)
- Fixed entry deletion confirmation popup
Array#rendernow callsrender_inlinerather thanrenderso that rendering an array of pages doesn’t do mad things.- The postgres database dumper/loader now works with custom hosts and ports and correctly authenticates itself when password authentication is in place
- File & image fields
#blank?methods now work correctly (and are aliased as#empty?) - Removed broken render context implementations of
#first?and#last? spot site initensures that thelog&tmpdirectories exist- Don't try to set encoding values when there's no content-type header returned
asset-data-uriis now correctly wrapping the result in aurl()declaration.- Displaying exceptions in development preview now works
- Second level boxes now correctly show an 'add' toolbar below the last entry
- The 'no changes' message is now a more pleasing size & the spinner goes away
- Revert some changes to the asset compilation step to fix publishing in development mode.
- Include
-webkitprefixed versions of all flexbox properties to fix display in Safari - Fix image drag & drop in Chrome -- revoking blob URLs immediately now results in a broken image
- Remove all references to
Page#pathin initialization to avoid trying to resolve the full path before the pages' parents have been assigned - Explicitly copy compiled assets to the new published revision using a new core publish step rather than hijack the asset compilation/resolution step. This ensures that dependencies are copied on a second publish.
- Fix layout of box tabs by using appropriate mixins to apply
-webkitprefixed styles
- Bring Rake dependency up-to-date
- Spontaneous now requires Ruby 2
- SQLite 3 support added and set as default db for new sites
- Startup now requires each file in the
config/initializersdirectory after intializing and configuring the site instance. This allows for Rails-style extensions to the site state & functionality. - Publishing is now managed by a configurable pipeline declared in
config/initializers/publishing.rb. This greatly clarifies the publishing process and also allows for the insertion of custom actions that will run on each publish. - The modification state of pages is now calculated using the actual state of the page's content, rather than just comparing the modification date with the date of the last publish. This means that making & then undoing a change won't result in the page appearing in the modified list.
- UIDs have been replaced by the concept of 'singleton' classes which return a single instance based on the type name or a set of labels. This removes the last bit of developer-controlled content from the database & hence resolves issues around publishing pages purely for developer originated UID changes.
- Page types can now be configured to render the content of another page as their own using the Page::renders method.
- You can now add multiple aliases at once, selecting individually or by drag-selecting or shift-selecting ranges & groups of items.
- The site generator now takes the current user name as the default database user for postgres installs. This will hopefully make installation easier.
- Changed dependency from 'bcrypt-ruby' to 'bcrypt' (as instructed)
- Made bundler version dependency more explicit (as instructed)
- Removed warning about declaring task 'generate_site'
- Add some documentation about templating into the generated layout
- Replaced outdated flexible box CSS properties with new style ones
(
display: box=>display: flex) - Add index to
content.target_idto improve performance of searches for aliases - Content associations now use prepared statements which significantly speeds up page load & site render
- Slug change propagation and modification tracking no longer rely on mystery instance variable flags
- The editing interface now has some feedback/a loading animation when navigating between pages
- Publishing re-uses compiled assets if they exist. Assets are compiled once per deploy rather than once per publish. This cuts a significant amount of time off the publishing step (especially for small sites)
- The contents of boxes now render in batches as you scroll, rather than rendering every single entry at page load. This speeds up the display of pages with a lot of content.
- Using Velocity.js for animation where possible for smoother transitions
- Better support for private roots
- Fix broken publish command
- Piece aliases now link using the id of the owning page of the target, rather than the id of the target itself
- Rendering a private root no longer crashes in the
navigationhelper - Directly rendering a page instance within a tenplate no longer results in a page-within-page situation (context instances now call a separate #render_inline method which passes the call onto a page's containing entry)
- Previewing of private pages has been disabled (fixing issue #36)
- Rendering output now goes to a 'output store' class rather than directly to the filesystem. The default output store mimics the existing functionality but it can be overridden by any Moneta compatible key-value store (e.g. Redis, Memcache). Another step closer to Heroku compatibility
- Individual fields can now be hidden in the list view by specifying
list: falsein the field definition options - The navigation helper now accepts options for filtering the list of pages to include
- Page controllers are now full Sinatra instances
- The UI allows for images to be cleared
- Deleting a schema entry now raises a modification error & prompts for confirmation. Before this a typo or other error could end up deleting db content
- Modifying the schema will now automatically delete any stray, unmapped, instances from the db on deploy
- You can specify the name that a type will appear as in the add list, this enables the same basic type to fill many roles without having to subclass it
- Add tests for & fix current issues with Thor's handling of namespaces
- Fix equality tests for PagePiece's i.e.
PagePiece#target == PagePiece - Force every content query to include a list of
schema_ids so that content entries with an invalid/unmapped schema class won't be returned
- Upgrade to Sequel 4.x
- Use the
sequel_pggem for better performance with Sequel on Postgres - Change version specifiers in gemspec to a more liberal range (i.e. "
> 0.x.y" becomes "> 0.x") - Improve layout of box tabs to handle cases with many boxes
Site[:symbol]now searches by UID- The 'back' stack now allows for insertion of Rack apps, rather than just Sinatra apps
- Rename the
:textfieldtype to:markdownto make this clearer - Rubinius 2 compatibility
- Add a CHANGELOG