This gem insert the method to_extjs into ActiveRecord and Array. Messages generated are valid to be used against Ext JS 4 (www.sencha.com/products/extjs/). Now it’s possible to generate Ext JS 3 JSON data although it’s in experimental state. It requires Rails 3.0 or latter to work properly.
To load a form, the data extjs expect to meet is like so:
{ "data": { "id": 1, "title": "First Post", "body": "This is my first post.", "published": true, ... }, "success": true }
If ActiveRecord::Base.wrap_with_brackets is true then, the model name wraps all attributes:
{ "data": { "post[id]": 1, "post[title]": "First Post", "post[body]": "This is my first post.", "post[published]": true, ... }, "success": true }
It allows to use this gem with Ext JS 3.
If ActiveRecord::Base.include_root_in_json is true then, the model name is used instead of data key:
{ "post": { "id": 1, "title": "First Post", "body": "This is my first post.", "published": true, ... }, "success": true }
So that it is as easy as do:
@post.to_extjs
In case the model has some failures, the sentence above will return:
{ "errors": { "title": ["Title can't be blank"] }, "success": false }
Parameters accepted are the same as as_json from ActiveModel.
When to_extjs is called from ActiveRecord (or hashes) collections, Ext JS expect to receive a structure like that:
{ 'total' : 2, 'data' : [ { 'id' : 1, :title : 'First Post' }, { 'id' : 2, :title : 'Second Post' } ] }
It is generated executing
Post.all.to_extjs
Parameters accepted are the same as as_json from Array, nesting into each record.
if Array.dasherize_keys is true, then nested Hashes are plained:
{ 'total' : 2, 'data' : [ { 'id' : 1, 'title' : 'First Post', 'owner' : { 'name' : 'John'} }, { 'id' : 2, 'title' : 'Second Post', 'owner' : { 'name' : 'Frank'} } ] } , becomes to { 'total' : 2, 'data' : [ { 'id' : 1, 'title' : 'First Post', 'owner_name' : 'John' }, { 'id' : 2, 'title' : 'Second Post', 'owner_name' : 'Frank' } ] }
For now, it works in belongs_to associations. has_many requires duplication of each line when a nested Array appears. I dont think you need that.
-
Tests, tests, tests.…