README.md in gon-1.1.3 vs README.md in gon-2.0.0

- old
+ new

@@ -1,9 +1,35 @@ # Gon gem — get your Rails variables in your js + If you need to send some data to your js files and you don't want to do this with long way through views and parsing - use this force! +Now with [Rabl](https://github.com/nesquena/rabl) support! + +## A example of typical use + +When you need to send some start data from your controller to your js +you probably doing something like this: + + 1. Write this data in controller(presenter/model) in some variable + 2. In view for this action you put this data in some objects by data + attributes, or write js right in view + 3. Then in js it depends - if you previously write data in data + attributes - you should parse this attributes and write data to some + js variable. If you write js right in view (many frontenders shame you for + that) - you just use data from this js - OK. + 4. You can use your data in your js + +And everytime when you need some data from action to js you do this. + +With gon you configure it firstly - just put in layout one tag, and add +gem line to your Gemfile and do two actions: + + 1. Write variables by gon.variable_name = variable_value + 2. In your js you get this by gon.variable_name + 3. profit? + ## Usage `app/views/layouts/application.html.erb` ``` erb @@ -77,21 +103,97 @@ alert(customNamespace.yourOtherInt) alert(customNamespace.yourArray) alert(customNamespace.yourHash) ``` +## Usage with Rabl + +Now you can write your variables assign logic in templates with [Rabl](https://github.com/nesquena/rabl). +How write templates very clearly described in their repo. + +Profit of using Rabl with gon: + + 1. You can clean your controllers now! + 2. Clear and easy work with database objects and collections + 3. All power of Rabl + 4. You still can be lazy and don't use common way to transfer data in js + 5. And so on + +For using gon with Rabl you need to create new Rabl template and map gon +to it. +For example you have model Post with attributes :title and :body. +You want to get all your posts in your js as an Array. +Thats what you need to do: + + 1. Create Rabl template. I preffer creating special directory for + templates which are not view templates. + + `app/goners/posts/index.rabl` + + ``` rabl + collection @posts => 'posts' + attributes :id, :title, :body + ``` + + 2. After that you need only map this template to gon. + + `app/controllers/post_controller.rb#index` + + ``` ruby + def index + # some controller logic + @posts = Post.all # Rabl works with instance variables of controller + + gon.rabl 'app/goners/posts/index.rabl' + end + ``` + + Thats it! In your js now you get gon.posts variable which is Array of + post objects with attributes :id, :title and :body. + + P.s. If you didn't put include_gon tag in your html head area - it + wouldn't work. You can read about this in common usage above. + +### Some tips of usage Rabl with gon: + +If you don't use alias in Rabl template: + +``` rabl +collection @posts +.... +``` + +instead of using that: + +``` rabl +collection @posts => 'alias' +.... +``` + +Rabl will return you array and gon by default put it to variable +gon.rabl + +Two way how you can change it - using aliases or you can add alias to +gon mapping method: + +``` ruby +# your controller stuff here + +gon.rabl 'path/to/rabl/file', :as => 'alias' +``` + ## Installation Puts this line into `Gemfile` then run `$ bundle`: ``` ruby -gem 'gon', '1.1.3' +gem 'gon', '2.0.0' ``` Or if you are old-school Rails 2 developer put this into `config/environment.rb` and run `$ rake gems:install`: ``` ruby -config.gem 'gon', :version => '1.1.3' +config.gem 'gon', :version => '2.0.0' ``` Or manually install gon gem: `$ gem install gon` ## Contributors