SpontaneousCMS/spontaneous

View on GitHub
CHANGELOG.md

Summary

Maintainability
Test Coverage
## 0.2.0.beta11, released 2016-XX-XX

#### New features

- **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 index` command that can re-generate the search
  indexes based on the currently published content.

- Model classes now have `::each` and `::map` methods 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.md`
  for an overview.

#### Misc

- 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

#### Fixes

- `Box#adopt` now 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's `owner_id` is 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

## 0.2.0.beta10, released 2015-03-20

Is it wise to release a new version during a solar eclipse?

#### New Features

- 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_origin` function that returns a `Content::Page`
  instance 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 `/bands` page, e.g. `/bands/the-beatles` appear 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-HMS` they can be configured to default to `something-YMD-HMS` by
  overriding the value returned by `Content::Page#default_slug_root`.

- You can now get a list of content ids for a box using the `Box#ids` method

- The db connection can now be set using a `DATABASE_URL` env 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
        end

    will allow a page mounted at `/womble` to accept requests to
    `/womble/wibble/23` etc.

- The publish dialogue now has a `Rerender` button 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?)).

#### Misc

- JSON de/en-coding is now handled by [Oj](https://github.com/ohler55/oj) not
  [Yajl](https://lloyd.github.io/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 `rake` and
  `spot` commands
- Boxes now have a `#clear!` method to remove all their contents
- `Content#/` is an alias for `#get` by id
- The db timezone is set to UTC which results in some improved performance
- `Site#inspect` output 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_ratio` method
- `spot site rerender` is an alias for `spot site render`

#### New Features

- Enabled previewing of private pages

#### Fixes

- Front server no longer needs restarting to pick up a new revision in
  development mode (https://github.com/SpontaneousCMS/spontaneous/issues/47)
- Fixed entry deletion confirmation popup
- `Array#render` now calls `render_inline` rather than `render` so 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 init` ensures that the `log` & `tmp` directories exist
- Don't try to set encoding values when there's no content-type header returned
- `asset-data-uri` is now correctly wrapping the result in a `url()` 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

## 0.2.0.beta9, released 2014-10-30

#### Fixes

- Revert some changes to the asset compilation step to fix publishing in
  development mode.

## 0.2.0.beta8, released 2014-10-29

#### Fixes

- Include `-webkit` prefixed 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#path` in 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 `-webkit`
  prefixed styles

## 0.2.0.beta7, released 2014-09-03

#### Fixes

- Bring Rake dependency up-to-date

## 0.2.0.beta6, released 2014-08-06

#### New Features

- 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/initializers` directory 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.

#### Misc

- 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_id` to 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


#### Fixes

- 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 `navigation` helper
- 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)

## 0.2.0.beta5, released 2014-03-18

#### New Features

- 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: false` in 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

#### Fixes

- 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_id`s so that content entries
  with an invalid/unmapped schema class won't be returned

#### Misc

- Upgrade to Sequel 4.x
- Use the `sequel_pg` gem 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 `:text` fieldtype to `:markdown` to make this clearer
- Rubinius 2 compatibility
- Add a CHANGELOG