Generates hashes to be used with extjs applications easily.
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
spec
.document
.gitignore
Gemfile
Gemfile.lock
LICENSE.txt
README.rdoc
Rakefile
VERSION
extjsizable.gemspec

README.rdoc

extjsizable

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.

ActiveRecord

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.

Array

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.

TODO

  • Tests, tests, tests.…