+ All Categories
Home > Technology > Gon gem. For RDRC 2013, June 7

Gon gem. For RDRC 2013, June 7

Date post: 01-Nov-2014
Category:
Upload: alexey-gaziev
View: 1,360 times
Download: 0 times
Share this document with a friend
Description:
It's all about gon. gongongon
Popular Tags:
34
Alex Gaziev’s GEM GON @gazay (github, twitter) Saturday, June 8, 13
Transcript
Page 1: Gon gem. For RDRC 2013, June 7

Alex Gaziev’sGEM GON

@gazay (github, twitter)Saturday, June 8, 13

Page 2: Gon gem. For RDRC 2013, June 7

Saturday, June 8, 13

Page 3: Gon gem. For RDRC 2013, June 7

SURFING

JAZZ

OSS

:russia => ‘BALI’

Saturday, June 8, 13

Page 4: Gon gem. For RDRC 2013, June 7

Some of my works

gon

talks

gon-sinatra

tonik

is

hockeypuck

...

Saturday, June 8, 13

Page 5: Gon gem. For RDRC 2013, June 7

A little about GON

Send data from action to JS

Started 2 years ago

~800 stars

50+ forks and PRs

Saturday, June 8, 13

Page 6: Gon gem. For RDRC 2013, June 7

Data to JS: data-attribute

Instance variable in controller

Data-attribute in view

Find tag and parse data attribute

Saturday, June 8, 13

Page 7: Gon gem. For RDRC 2013, June 7

Data to JS:data-attr example

controller# home_controller.rb def index # some logic @products = counted_products_collection end

Saturday, June 8, 13

Page 8: Gon gem. For RDRC 2013, June 7

Data to JS:data-attr example

view# views/home/index.html.erb ... some content <%= contant_tag “div”, id: “products”, data: { products: @products } do %> Loading products... <% end %>

Saturday, June 8, 13

Page 9: Gon gem. For RDRC 2013, June 7

Data to JS:data-attr example

JS# assets/javascripts/pages/home.js.coffee jQuery -> doSomething $(‘#products’).data(‘products’)

Saturday, June 8, 13

Page 10: Gon gem. For RDRC 2013, June 7

Data to JS:javascript_tag

Excess lines inside your views

You should think what you write

Saturday, June 8, 13

Page 11: Gon gem. For RDRC 2013, June 7

Data to JS:javascript_tag

view# views/home/index.html.erb ... some content <%= javascript_tag do %> window.prodsURL = “<%=j products_url %>” window.prods = <%=raw @prods.to_json %> <% end %>

Saturday, June 8, 13

Page 12: Gon gem. For RDRC 2013, June 7

Data to JS:javascript_tag

JS# assets/javascripts/pages/home.js.coffee jQuery -> doSomething prods

Saturday, June 8, 13

Page 13: Gon gem. For RDRC 2013, June 7

Saturday, June 8, 13

Page 14: Gon gem. For RDRC 2013, June 7

Data to JSGON

Views step - once (perfect - in layout)

Don’t have to think about escaping

Stored uniq data per request

Saturday, June 8, 13

Page 15: Gon gem. For RDRC 2013, June 7

Data to JS:GON example

controller# home_controller.rb def index # some logic gon.products = counted_collection gon.products_url = products_url end

Saturday, June 8, 13

Page 16: Gon gem. For RDRC 2013, June 7

Data to JS:GON example

view# views/layouts/layout.html.erb <head> <%= include_gon(options) %> ... your js, css etc

Saturday, June 8, 13

Page 17: Gon gem. For RDRC 2013, June 7

Data to JS:GON example

JS

# assets/javascripts/pages/home.js.coffee jQuery -> doSomething gon.products

Saturday, June 8, 13

Page 18: Gon gem. For RDRC 2013, June 7

Usual ways: cons

Escaping ( “</script><script>evil()</script>”)

Excess lines in your views

Search for tag and parse attributes

Views step

Saturday, June 8, 13

Page 19: Gon gem. For RDRC 2013, June 7

GON: pros

Automatically escape and transform to_json all data

What you write in action – you’ll get in JS

Should modify views once

Saturday, June 8, 13

Page 20: Gon gem. For RDRC 2013, June 7

GON. Next versions

Generate json with template engines

Share data between requests

Renew data in JS gon easy way

Saturday, June 8, 13

Page 21: Gon gem. For RDRC 2013, June 7

GONRABL and jBuilderSuccess!

Screencast

Ruby Weekly

More users => more PRs

Saturday, June 8, 13

Page 22: Gon gem. For RDRC 2013, June 7

GON, RABL and jBuilder

why so cool?All power of RABL and jBuilder

Clean your controller new way

Render multiple templates with GON

Saturday, June 8, 13

Page 23: Gon gem. For RDRC 2013, June 7

GON and RABLmulti templates

# home_controller.rb def index gon.rabl ‘path_to_temlpate1’, as: ‘posts’ gon.rabl ‘path_to_template2’, as: ‘users’ gon.rabl ‘path_to_template3’, as: ‘admins’ gon.rabl # app/views/home/index.rabl end

Saturday, June 8, 13

Page 24: Gon gem. For RDRC 2013, June 7

GON and jBuilder problems

jBuilder rendering flow

Metaprogramming

Whole environment for eval

Saturday, June 8, 13

Page 25: Gon gem. For RDRC 2013, June 7

Saturday, June 8, 13

Page 26: Gon gem. For RDRC 2013, June 7

GON Global

Share data application-wide

Initial data

Change settings everywhere by event

Saturday, June 8, 13

Page 27: Gon gem. For RDRC 2013, June 7

GON Globalinit data example

# config/initializers/gon.rb Gon.global.pictures_per_user = 4

# app/assets/javascripts/imageboard.js.coffee setLimitToUser = gon.global.pictures_per_request

Saturday, June 8, 13

Page 28: Gon gem. For RDRC 2013, June 7

GON Globalchange data example

# app/model/user.rb after_save :change_users_limit

def change_users_limit if User.count > 1000 Gon.global.pictures_per_request = 3 end end

Saturday, June 8, 13

Page 29: Gon gem. For RDRC 2013, June 7

GON watch

Renew data for variable

No excess LOC

Use current state of action

Saturday, June 8, 13

Page 30: Gon gem. For RDRC 2013, June 7

GON watch:how it works

# home_controller.rb def index num = User.count * factor + params[:some].to_i gon.watch.pictures_per_request = num gon.watch.other_num = num * factor2 end

Saturday, June 8, 13

Page 31: Gon gem. For RDRC 2013, June 7

GON watch:how it works

# layout.html.erb <head> <%= include_gon(watch: true) %> ...

Saturday, June 8, 13

Page 32: Gon gem. For RDRC 2013, June 7

GON watch:how it works

# home_index.js.coffeerenewLimit = (count) -> $(‘#limit-counter’).text(count)

gon.watch(‘pictures_per_request’, interval: 1000, renewLimit)

Saturday, June 8, 13

Page 33: Gon gem. For RDRC 2013, June 7

GON watchexample

Saturday, June 8, 13

Page 34: Gon gem. For RDRC 2013, June 7

Thank you!Any questions?

http://github.com/gazay/gon

Saturday, June 8, 13


Recommended