All Versions
30
Latest Version
Avg Release Cycle
6 days
Latest Release
2752 days ago
Changelog History
Page 2
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
- ๐ฑ 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
-
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 returnstore
)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 withVolt.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
andpage
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
andserver
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
- ๐ Mailer! - volt now includes the volt-mailer gem out of the box. (you can remove it if you don't need/want it). See https://github.com/voltrb/volt-mailer for more info.
๐ 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 usingthe_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 ontype: :feature
if you aren't running with ENV['BROWSER'] - ๐
go
has been renamed toredirect_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