All Versions
30
Latest Version
Avg Release Cycle
6 days
Latest Release
3106 days ago

Changelog History
Page 2

  • v0.9.5 Changes

    ๐Ÿ’ฅ Breaking Changes

    • ๐Ÿฑ previously, we mounted the asset folders in components at /assets, and we also mounted the /app folder (and any gem's app folders') at /assets. This allowed you to usually access what you wanted at /assets, but resulted in conflicts. To ensure better component isolation, we now only mount the app folders. To make things clear, instead of sprockets being mounted at /assets, it is now mounted at /app. So the url for something in /app/main/assets/css/something.css can be accessed at (you guessed it) /app/main/assets/css/something.css

    โž• Added

    • You can now disable auto-import of JS/CSS with disable_auto_import in a dependencies.rb file
    • โฌ†๏ธ Opal was upgraded to 0.8, which brings sourcemaps back (yah!)
    • ๐ŸŽ Page load performance was improved, and more of sprockets was used for component loading.
    • You can now return promises in permissions blocks. Also, can_read?, can_create?, and .can_delete? now return promises.
    • 0๏ธโƒฃ Anything in /public is now served via Rack::Static in the default middleware stack. (So you can put user uploaded images in there)
    • You can now use _ or - in volt tag names and attributes. (We're moving to using dash ( - ) as the standard in html)
    • ๐Ÿ‘€ You can now trigger events on controllers rendered as tags. The events will bubble up through the DOM and can be caught by any e- bindings. See the docs for more information.
    • Rewrote the precompile pipeline.
      • Added image compression by default. (using image_optim)
    • All volt CLI tasks now can run from inside of any directory in the volt app (or the root)
    • Asset precompilation has been reworked to use Sprockets::Manifest. The results are written to /public, and an index.html file is created. The entire app loading up until the websocket connect can be served statically (via nginx for example) All js and css is written to a single file.
    • The generate gem generator has been improved to setup a dummy app and integration specs out of the box.
    • Tasks can now set (only set, not read) cookies on the client using the cookies collection.
    • โž• Added login_as(user) method to Tasks and HttpController's.
    • ๐Ÿš€ asset_url helper in css/sass and html files
    • ๐ŸŽ Sourcemaps are enabled by default, you can disable them with MAPS=false env. By default Volt and Opal code is not sourcemapped. To enable sourcemaps for everything run with: MAPS=all (note this has a slight performance hit) Read the docs for more.

    ๐Ÿ”„ Changed

    • ๐Ÿ›  fix issue with raw and promises (#275)
    • ๐Ÿ›  fix issue with .length on store (#269)
    • The {root}/config/initializers directory is now only for server side code.
    • Redid the initializer load order so all initializers run before any controllers/models/views are loaded.
    • โž• Added error message for when an unserializable object is returned from a Task
    • ๐Ÿ›  Fixed issue with disable_encryption option
    • ๐Ÿ›  Fixed issue with select's not selecting options when options are dynamically loaded
  • v0.9.4 Changes

    Lingo Change

    the base collections will now be called "Repositories" or "Repo's" for short. This will only matter directly for internal volt code, but for the data provider api, this will help.

    โž• Added

    • root can now be called from a model to get the root model on the collection. (So if the model is on store, it will return store)
    • store can now be called from inside of a model
    • all repos (store, page, cookies, params, etc...) now can be accessed outside of controllers and tasks with Volt.current_app.{repository} (Volt.current_app.store for example)
    • before_save was added to models.
    • โž• added cookies model for HttpController
    • โž• added support for serializing Time objects
    • Model's now have a saved_state and saved? method.
    • Volt.current_app now has store and page collections accessable from it, and is the preferred way to access those collections outside of controllers and tasks.

    โœ‚ Removed

    • ๐Ÿšš The $page global was removed. Use Volt.current_app to get access to repos.

    ๐Ÿ”„ Changed

    • ๐Ÿ›  fixed bug with ReactiveHash#to_json
    • ๐Ÿ›  fixed bug with field Numeric coersion
    • ๐Ÿ›  fixed issue with initializers not loading on client sometimes.
    • ๐Ÿ›  fixed issue with user password change
    • ๐Ÿ›  fix issue storing Time in a hash
    • ๐Ÿ›  fixed issue with local_store not persisting in some cases
    • โšก๏ธ runners now block until messages have propigated to the message bus and updates have been pushed.
    • โฌ†๏ธ upgraded some dependency gems to fix a conflict
    • ๐Ÿ›  fixed bug with .last on ReactiveArray (#259)
  • v0.9.3 Changes

    โšก๏ธ 0.9.3 Update Blog Post โฌ†๏ธ Upgrade Guide

    โž• Added

    • โž• Added validations block for conditional validation runs
    • you can now set the NO_FORKING=true ENV to prevent using the forking server in development.
    • models without an assigned persistor now use the page persistor (which now can provide basic querying)
    • โšก๏ธ Volt now pushes updates between mulitple app instances. Updates are pushed between any servers, clients, runners, etc.. that are connected to the same database via the MessageBus (see next)
    • 0๏ธโƒฃ Volt now comes with a "MessageBus" built in. The message bus provides a pub/sub interface for the app "cluster". Volt provides a default message bus implementation using peer to peer sockets that are automatically managed via the database.
    • You can now nest models on store. Previously store was limited to only storing either values or ArrayModels (associations). You can now store directly, in mongo this will be stored as a nested value.
    • Promises got more awesome. Promises in volt can now proxy methods to their future resolved value. Something like: promise.then {|v| v.name } can now be written simply as: promise.name It will still return a promise, but to make life easier:
    • ๐Ÿ‘ All bindings now support promises directly.
    • All code in config/initializers is now run on app startup.
    • All code in any components config/initializers (app/main/config/initializers/*.rb) is now run on the server during app startup. On the client, only the included components initializers will be run.
    • ๐Ÿ‘ all initializers folders now support a client and server folder.
    • ๐Ÿ‘ has_one is now supported.
    • You can now use .create to make a new item on a collection.
    • .inspect for models is now cleaner
    • Volt.current_user now works in HttpController's
    • HttpControllers now can take promises in render.
    • ๐Ÿ‘€ You can now add your own middleware to the middleware stack. (see docs)
    • โž• Added a threadpool for Tasks, and options to customize pool size in config/app.rb
    • ๐Ÿ‘ Volt now handles Syntax errors much better, it will display an error message when your app does not compile, and can reload from that page when things change. (in development)
    • Time objects can now be saved in models.

    ๐Ÿ”„ Changed

    • All methods on ArrayModel's under the store collection now return a Promise.
    • A #create method was added to ArrayModel.
    • ๐Ÿšš All logic associated with mongo has been moved into the volt-mongo gem. If you are migrating from a previous version, be sure to add gem 'volt-mongo' to the Gemfile.
    • models using the page or store persistor now auto-generate an id when created. This simplifies things since models always have an id. It makes association easier as well. (internally that is)
    • models now use .id instead of ._id Queries and saves are mapped to _id in the volt-mongo gem
    • ๐Ÿ›  fixed issue where volt precompile would compile in extra assets from non-component gems.
    • Lots of internal changes:
      • bindings were refactored to pass around a Volt::App instead of a Volt::Page.
      • controllers now take a Volt::App when created directly.
    • You can now use .each in attribute bindings.
    • ๐Ÿšš We moved to csso as the css compressor because it does not require libv8, only an execjs runtime.
    • ๐Ÿ‘ Each bindings now support promises.
    • Volt.fetch_current_user has been deprecated and Volt.current_user now returns a promise.
    • Volt.current_user? now returns a promise that yields a boolean
    • ๐Ÿ‘€ Lots of bug fixes. (see github)
  • v0.9.2 Changes

    ๐Ÿ”„ Changed

    • ๐Ÿš€ We released 0.9.1 with a bug for destroy (doh!). Specs added and bug fixed.
  • v0.9.1 Changes

    โšก๏ธ 0.9.1 Update Blog Post

    โž• Added

    ๐Ÿ”„ Changed

    • โœ… All code in app is now automatically reloaded when any files change. This is done through a "preforking" server. Before your apps code is loaded (and after Volt's is), the server forks a child process to handle the request (in dev and test mode).
    • Corrected the name of StringTemplateRender to StringTemplateRenderer
    • ๐ŸŽ Volt now uses faye-websocket for socket connections. This means we can run on any rack-hijack server supported by faye-websocket. Currently Volt is tested with thin and puma. (Note: Thin will probably have better performance since it is evented, which means it doesn't need a thread per connection) More servers coming soon.
    • ๐Ÿ‘€ originally everything in /config would be run when an app boots (similar to rails initializers folder). The issue we didn't see is things like capistrano that store other ruby files in config. To maintain conventions, Volt now loads config/app.rb first, then everything in config/initializers/*.rb
    • ๐Ÿ›  fixed issue with the unique validation.
    • made it so <:SectionName> can be accessed by <:section_name /> tag
    • ๐Ÿ›  fixed issue with if bindings not resolving some promises.
    • ๐Ÿ›  fixed issue with require's in controllers.
    • ๐Ÿ›  fix class formatting issue with Pry.
    • Bundler.require is now called for the correct env when 'volt/boot' is included. (We weren't planning to do this, but it does make life so much easier)
    • ๐Ÿšš opal-jquery was removed as a dependency. If you want to use it again, add gem 'opal-jquery' to your Gemfile and add ``require 'opal/jquery' to your MainController.
    • ๐Ÿ’Ž Volt and new gems now use the standard ruby version.rb file.
  • v0.9.0 Changes

    โž• Added

    • the permissions api has been added!
    • added has_many and belongs_to on models. See docs.
    • ๐Ÿ“„ you can now serve http/rest from Volt. Thanks to @jfahrer for his great work. More docs coming soon.
    • there is now a generator for controllers and HttpControllers.
    • ๐Ÿ›  fixed generated component code
    • โž• added .order for sorting on the data store (since .sort is a ruby Enum method)
    • calling .then on ArrayModels has been changed to calling .fetch and .fetch_first. These both return a promise, and take an optional block
    • โž• added .sync for synchronusly waiting on promises on the server only
    • โž• added the ability to pass content into tags: (https://github.com/voltrb/docs/blob/master/en/docs/yield_binding.md)
    • ๐Ÿ”„ Changed it so content bindings escape all html (for CSRF - thanks @ChaosData)
    • โž• Added formats, email, phone validators (thanks @lexun and @kxcrl)
    • each_with_index is now supported in views and the index value is no longer provided by default.
    • ๐Ÿ›  fixed bug with cookie parsing with equals in them
    • ๐Ÿ›  fixed bug appending existing models to a collection
    • ๐Ÿ”จ refactored TemplateBinding, moved code into ViewLookupForPath (SRP)
    • โš  reserved fields now get a warning in models
    • bindings will now resolve any values that are promises. (currently only content and attribute, if, each, and template coming soon)
    • store is now available inside of specs. If it is accessed in a spec, the database will be cleaned after the spec.
    • the_page is a shortcut to the page collection inside of specs. (Unfortunately, page is used by capybara, so for now we're using the_page, we'll find a better solution in the future.)
    • โž• Add filtering to logging on password, and option to configure filtered args. Also, improve the way errors are displayed.
    • You can now call raw in a content binding to render the raw html on the page. Use carefully, this can open you up to xss attacks. We reccomend never showing html from the user directly.
    • ๐Ÿ‘ before/after actions added to ModelController (HttpController support coming soon).
    • in the disabled attribute, you can now bind to a boolean or string.
    • โž• added a .fetch_each method that fetches all items, then yields each one.

    ๐Ÿ”„ Changed

    • template bindings have been renamed to view. {{ view "path/for/view" }} instead of {{ template "path/for/view" }}
    • view bindings (formerly template) wait until the template's #loaded? method returns true (by .watch! ing it for changes)
    • #loaded? on controllers now returns false if the model is set to a Promise, until the promise is resolved.
    • โœ‚ the {action}remove method had been changed to before{action}remove and after{action}_remove to provide more hooks and a clearer understanding of when it is happening.
    • the following were renamed to follow gem naming conventions:
      • volt-user-templates (now volt-user_templates)
      • volt-bootstrap-jumbotron-theme (now volt-bootstrap_jumbotron_theme)
    • all plural attributes now return an empty ArrayModel. This is to simplify implementation and to unify store's interface.
    • main_path in generated projects now includes the a component param that can be used to easily point at controllers/views in other components.
    • previously the main component's controllers were not namespaced. We changed it so all controllers (including those in main) are namespaced. This is makes things more consistent and keeps expectations when working with components.
    • model attributes no longer return NilModels. Instead they just return nil. You can however add an ! to the end to "expand" the model to an empty model.

      page._new_todo # => now returns nil

      page._new_todo! # => returns an empty model

    So if you wanted to use a property on _new_todo without initializing _new_todo, you could add the ! to the lookup.

    • Volt.user has been renamed to Volt.current_user so its clearer what it returns
    • _'s are no longer required for route constraints (so just use controller: 'main', action: 'index' now)
    • the underlying way queries are normalized and passed to the server has changed (no external api changes)
    • ๐Ÿ”„ changed .find to .where to not conflict with ruby Enum's .find
    • Volt::TaskHandler is now Volt::Task
    • ๐Ÿšš Move testing gems to the generated Gemfile for projects
    • โœ… if ENV['BROWSER'] is no longer required around integration tests. We now use rspec filtering on type: :feature if you aren't running with ENV['BROWSER']
    • ๐Ÿ’Ž go has been renamed to redirect_to to keep things consistent between ruby frameworks. (And to allow for go to be used elsewhere)

    โœ‚ Removed

    • ๐Ÿšš .false?, .true?, .or, and .and were removed since NilModels were removed. This means you get back a real nil value when accessing an undefined model attribute.
  • v0.8.24 Changes

    December 05, 2014

    โž• Added

    • ๐Ÿ›  Fix bug with validation inheritance
    • ๐Ÿ›  Fixed issue with controller loading.
  • v0.8.23 Changes

    November 30, 2014

    โž• Added

    • Added url_for and url_with to controllers. (See docs under Controllers)
  • v0.8.22 Changes

    November 16, 2014

    โž• Added

    • Volt.config is now accessable from the client.
    • โž• Added .try to Object
    • โž• Added Volt.login
    • successful asset loads are not logged in development
    • 0๏ธโƒฃ Basics of users is now place, along with including the default user templates gem
      • more user related helpers in the works
  • v0.8.21 Changes

    November 05, 2014

    ๐Ÿ”„ Changed

    • ๐Ÿ›  fix merge conflict