render_async 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c603221d8623559e475f5dd31847ca30d86c3a6a
4
- data.tar.gz: 54c76dde479ea0cfc2c500126f419752e50749a6
3
+ metadata.gz: f1e55f1d2d9bd896fcb28007fb3bfe42752d4d90
4
+ data.tar.gz: ac66f3e90a93a3952b0b5f690ab1d79e85b2284c
5
5
  SHA512:
6
- metadata.gz: b111b20c0440b3933b687469f851521b17163b31b5b312b180d1c7393b5b1222f96704832b52ca61d8e6dbb013ece9bf45ee2625a977b2f8083aa1bb1ac16461
7
- data.tar.gz: c5853c4de18b1c7af54980e5656a1badcb3d9e39c9005eb133a5f3ce1b93bafadd795b1a5e8b8fa6523a1c23f0925a15e806d37a4ba3782fc5f943972e70e368
6
+ metadata.gz: 43ffe5cf4db879ec44baf27f68435ef275206ce725085ae6c6f1f139c44fcafd215e41b79ce0b44c471698a4b2cf21353e6ae9f07bd95620321f121551d0c49b
7
+ data.tar.gz: 089b856889e18dd218372284ee4cfe86dd8aa08260ad55b58e39334a694e981de7c407a237a3686bbe69c71109bbc36c29bfb90163404b0d7efeaefa1db34389
@@ -28,7 +28,8 @@
28
28
  "profile": "http://www.colinxfleming.com",
29
29
  "contributions": [
30
30
  "code",
31
- "doc"
31
+ "doc",
32
+ "example"
32
33
  ]
33
34
  },
34
35
  {
@@ -65,7 +66,8 @@
65
66
  "avatar_url": "https://avatars3.githubusercontent.com/u/107798?v=4",
66
67
  "profile": "https://eladshahar.com",
67
68
  "contributions": [
68
- "code"
69
+ "code",
70
+ "example"
69
71
  ]
70
72
  },
71
73
  {
@@ -86,6 +88,24 @@
86
88
  "contributions": [
87
89
  "code"
88
90
  ]
91
+ },
92
+ {
93
+ "login": "krainboltgreene",
94
+ "name": "Kurtis Rainbolt-Greene",
95
+ "avatar_url": "https://avatars1.githubusercontent.com/u/334809?v=4",
96
+ "profile": "https://kurtis.rainbolt-greene.online",
97
+ "contributions": [
98
+ "code"
99
+ ]
100
+ },
101
+ {
102
+ "login": "schneems",
103
+ "name": "Richard Schneeman",
104
+ "avatar_url": "https://avatars2.githubusercontent.com/u/59744?v=4",
105
+ "profile": "https://www.schneems.com",
106
+ "contributions": [
107
+ "doc"
108
+ ]
89
109
  }
90
110
  ]
91
111
  }
@@ -0,0 +1,4 @@
1
+ [submodule "spec/fixtures/rails-5-base-app"]
2
+ path = spec/fixtures/rails-5-base-app
3
+ url = git@github.com:nikolalsvk/rails-5-base-app.git
4
+ branch = render-async
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  [![Build Status](https://semaphoreci.com/api/v1/renderedtext/render_async/branches/master/shields_badge.svg)](https://semaphoreci.com/renderedtext/render_async)
2
- [![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors)
2
+ [![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors)
3
3
  [![Gem Version](https://badge.fury.io/rb/render_async.svg)](https://badge.fury.io/rb/render_async)
4
4
  [![Code Climate](https://codeclimate.com/github/renderedtext/render_async/badges/gpa.svg)](https://codeclimate.com/github/renderedtext/render_async)
5
5
  [![Test Coverage](https://codeclimate.com/github/renderedtext/render_async/badges/coverage.svg)](https://codeclimate.com/github/renderedtext/render_async/coverage)
6
+ [![Help Contribute to Open Source](https://www.codetriage.com/renderedtext/render_async/badges/users.svg)](https://www.codetriage.com/renderedtext/render_async)
6
7
 
7
8
  ![render_async](https://semaphoreci.com/blog/assets/images/2017-06-08/speed-up-rendering-rails-pages-with-render-async-6c40eb39.png)
8
9
 
@@ -71,6 +72,16 @@ And then execute:
71
72
 
72
73
  ## Advanced usage
73
74
 
75
+ Advanced usage includes information on different options, such as:
76
+
77
+ - [Passing in HTML options](#passing-in-html-options)
78
+ - [Passing in an HTML element name](#passing-in-an-html-element-name)
79
+ - [Passing in a placeholder](#passing-in-a-placeholder)
80
+ - [Passing in an event name](#passing-in-an-event-name)
81
+ - [Caching](#caching)
82
+ - [Using with Turbolinks](#using-with-turbolinks)
83
+ - [Nested Async Renders](#nested-async-renders)
84
+
74
85
  ### Passing in HTML options
75
86
 
76
87
  `render_async` takes two arguments, `path` and `html_options`.
@@ -97,6 +108,26 @@ Rendered code in the view:
97
108
  </script>
98
109
  ```
99
110
 
111
+ ### Passing in an HTML element name
112
+
113
+ `render_async` can take in an HTML element name, allowing you to control
114
+ what type of container gets rendered. This can be useful when you're using
115
+ [`render_async` inside a table](https://github.com/renderedtext/render_async/issues/12)
116
+ and you need it to render a `tr` element before your request gets loaded, so
117
+ your content doesn't get pushed out of the table.
118
+
119
+ Example of using HTML element name:
120
+ ```erb
121
+ <%= render_async users_path, html_element_name: 'tr' %>
122
+ ```
123
+
124
+ Rendered code in the view:
125
+ ```html
126
+ <tr id="render_async_04229e7abe1507987376">
127
+ </tr>
128
+ ...
129
+ ```
130
+
100
131
  ### Passing in a placeholder
101
132
 
102
133
  `render_async` can be called with a block that will act as a placeholder before
@@ -160,7 +191,7 @@ document.addEventListener("users-loaded", function() {
160
191
  });
161
192
  ```
162
193
 
163
- ## Caching
194
+ ### Caching
164
195
 
165
196
  `render_async` can utilize view fragment caching to avoid extra AJAX calls.
166
197
 
@@ -185,7 +216,7 @@ Then, in the partial (e.g. `app/views/comments/_comment_stats.html.erb`):
185
216
  * You can expire cache simply by passing `:expires_in` in your view where
186
217
  you cache the partial
187
218
 
188
- ## Using with Turbolinks
219
+ ### Using with Turbolinks
189
220
 
190
221
  On Turbolinks applications, you may experience caching issues when navigating
191
222
  away from, and then back to, a page with a `render_async` call on it. This will
@@ -197,6 +228,33 @@ To resolve, tell turbolinks to reload your `render_async` call as follows:
197
228
  <%= render_async events_path, 'data-turbolinks-track': 'reload' %>
198
229
  ```
199
230
 
231
+ ### Nested Async Renders
232
+
233
+ It is possible to nest async templates within other async templates. When doing
234
+ so, another `content_for` is required to ensure the JavaScript needed to load
235
+ nested templates is included.
236
+
237
+ For example:
238
+ ```erb
239
+ <%# app/views/comments/show.html.erb %>
240
+
241
+ <%= render_async comment_stats_path %>
242
+ ```
243
+
244
+ ```erb
245
+ <%# app/views/comments/_comment_stats.html.erb %>
246
+
247
+ <div class="col-md-6">
248
+ <%= @stats %>
249
+ </div>
250
+
251
+ <div class="col-md-6">
252
+ <%= render_async comment_advanced_stats_path %>
253
+ </div>
254
+
255
+ <%= content_for :render_async %>
256
+ ```
257
+
200
258
  ## Development
201
259
 
202
260
  After checking out the repo, run `bin/setup` to install dependencies. Then, run
@@ -216,9 +274,9 @@ The gem is available as open source under the terms of the [MIT License](http://
216
274
  Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
217
275
 
218
276
  <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
219
- | [<img src="https://avatars2.githubusercontent.com/u/3028124?v=4" width="100px;"/><br /><sub>Nikola Đuza</sub>](http://nikoladjuza.me/)<br />[💬](#question-nikolalsvk "Answering Questions") [🐛](https://github.com/renderedtext/render_async/issues?q=author%3Anikolalsvk "Bug reports") [💻](https://github.com/renderedtext/render_async/commits?author=nikolalsvk "Code") [📖](https://github.com/renderedtext/render_async/commits?author=nikolalsvk "Documentation") [💡](#example-nikolalsvk "Examples") [👀](#review-nikolalsvk "Reviewed Pull Requests") | [<img src="https://avatars0.githubusercontent.com/u/3866868?v=4" width="100px;"/><br /><sub>Colin</sub>](http://www.colinxfleming.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=colinxfleming "Code") [📖](https://github.com/renderedtext/render_async/commits?author=colinxfleming "Documentation") | [<img src="https://avatars2.githubusercontent.com/u/334273?v=4" width="100px;"/><br /><sub>Kasper Grubbe</sub>](http://kaspergrubbe.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=kaspergrubbe "Code") | [<img src="https://avatars2.githubusercontent.com/u/163584?v=4" width="100px;"/><br /><sub>Sai Ram Kunala</sub>](https://sairam.xyz/)<br />[📖](https://github.com/renderedtext/render_async/commits?author=sairam "Documentation") | [<img src="https://avatars2.githubusercontent.com/u/3065882?v=4" width="100px;"/><br /><sub>Josh Arnold</sub>](https://github.com/nightsurge)<br />[💻](https://github.com/renderedtext/render_async/commits?author=nightsurge "Code") [📖](https://github.com/renderedtext/render_async/commits?author=nightsurge "Documentation") | [<img src="https://avatars3.githubusercontent.com/u/107798?v=4" width="100px;"/><br /><sub>Elad Shahar</sub>](https://eladshahar.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=SaladFork "Code") | [<img src="https://avatars3.githubusercontent.com/u/232392?v=4" width="100px;"/><br /><sub>Sasha</sub>](http://www.revzin.co.il)<br />[💻](https://github.com/renderedtext/render_async/commits?author=sasharevzin "Code") [📖](https://github.com/renderedtext/render_async/commits?author=sasharevzin "Documentation") |
277
+ | [<img src="https://avatars2.githubusercontent.com/u/3028124?v=4" width="100px;"/><br /><sub>Nikola Đuza</sub>](http://nikoladjuza.me/)<br />[💬](#question-nikolalsvk "Answering Questions") [🐛](https://github.com/renderedtext/render_async/issues?q=author%3Anikolalsvk "Bug reports") [💻](https://github.com/renderedtext/render_async/commits?author=nikolalsvk "Code") [📖](https://github.com/renderedtext/render_async/commits?author=nikolalsvk "Documentation") [💡](#example-nikolalsvk "Examples") [👀](#review-nikolalsvk "Reviewed Pull Requests") | [<img src="https://avatars0.githubusercontent.com/u/3866868?v=4" width="100px;"/><br /><sub>Colin</sub>](http://www.colinxfleming.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=colinxfleming "Code") [📖](https://github.com/renderedtext/render_async/commits?author=colinxfleming "Documentation") [💡](#example-colinxfleming "Examples") | [<img src="https://avatars2.githubusercontent.com/u/334273?v=4" width="100px;"/><br /><sub>Kasper Grubbe</sub>](http://kaspergrubbe.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=kaspergrubbe "Code") | [<img src="https://avatars2.githubusercontent.com/u/163584?v=4" width="100px;"/><br /><sub>Sai Ram Kunala</sub>](https://sairam.xyz/)<br />[📖](https://github.com/renderedtext/render_async/commits?author=sairam "Documentation") | [<img src="https://avatars2.githubusercontent.com/u/3065882?v=4" width="100px;"/><br /><sub>Josh Arnold</sub>](https://github.com/nightsurge)<br />[💻](https://github.com/renderedtext/render_async/commits?author=nightsurge "Code") [📖](https://github.com/renderedtext/render_async/commits?author=nightsurge "Documentation") | [<img src="https://avatars3.githubusercontent.com/u/107798?v=4" width="100px;"/><br /><sub>Elad Shahar</sub>](https://eladshahar.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=SaladFork "Code") [💡](#example-SaladFork "Examples") | [<img src="https://avatars3.githubusercontent.com/u/232392?v=4" width="100px;"/><br /><sub>Sasha</sub>](http://www.revzin.co.il)<br />[💻](https://github.com/renderedtext/render_async/commits?author=sasharevzin "Code") [📖](https://github.com/renderedtext/render_async/commits?author=sasharevzin "Documentation") |
220
278
  | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
221
- | [<img src="https://avatars3.githubusercontent.com/u/50223?v=4" width="100px;"/><br /><sub>Ernest Surudo</sub>](http://elsurudo.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=elsurudo "Code") |
279
+ | [<img src="https://avatars3.githubusercontent.com/u/50223?v=4" width="100px;"/><br /><sub>Ernest Surudo</sub>](http://elsurudo.com)<br />[💻](https://github.com/renderedtext/render_async/commits?author=elsurudo "Code") | [<img src="https://avatars1.githubusercontent.com/u/334809?v=4" width="100px;"/><br /><sub>Kurtis Rainbolt-Greene</sub>](https://kurtis.rainbolt-greene.online)<br />[💻](https://github.com/renderedtext/render_async/commits?author=krainboltgreene "Code") | [<img src="https://avatars2.githubusercontent.com/u/59744?v=4" width="100px;"/><br /><sub>Richard Schneeman</sub>](https://www.schneems.com)<br />[📖](https://github.com/renderedtext/render_async/commits?author=schneems "Documentation") |
222
280
  <!-- ALL-CONTRIBUTORS-LIST:END -->
223
281
 
224
282
  This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
@@ -1,41 +1,13 @@
1
- <div id="<%= container_id %>">
1
+ <<%= html_element_name %> id="<%= container_id %>">
2
2
  <%= placeholder %>
3
- </div>
3
+ </<%= html_element_name %>>
4
4
 
5
5
  <% content_for :render_async do %>
6
6
  <%= javascript_tag html_options do %>
7
- if (window.jQuery) {
8
- (function($){
9
- $.ajax({ url: "<%= path.html_safe %>" }).always(function(response) {
10
- $("#<%= container_id %>").replaceWith(response);
11
-
12
- <% if event_name.present? %>
13
- document.dispatchEvent(new Event("<%= event_name %>"));
14
- <% end %>
15
- });
16
- }(jQuery));
17
- } else {
18
- (function() {
19
- var request = new XMLHttpRequest();
20
- var asyncRequest = true;
21
- var SUCCESS = 200;
22
- var ERROR = 400;
23
-
24
- request.open("GET", "<%= path.html_safe %>", asyncRequest);
25
-
26
- request.onload = function() {
27
- if (request.status >= SUCCESS && request.status < ERROR) {
28
- var container = document.getElementById("<%= container_id %>");
29
- container.outerHTML = request.response;
30
-
31
- <% if event_name.present? %>
32
- document.dispatchEvent(new Event("<%= event_name %>"));
33
- <% end %>
34
- }
35
- };
36
-
37
- request.send();
38
- })();
39
- }
7
+ <%= render partial: 'render_async/request',
8
+ formats: [:js],
9
+ locals: { container_id: container_id,
10
+ path: path,
11
+ event_name: event_name } %>
40
12
  <% end %>
41
13
  <% end %>
@@ -0,0 +1,37 @@
1
+ if (window.jQuery) {
2
+ (function($) {
3
+ $(document).ready(function() {
4
+ $.ajax({ url: "<%= path.html_safe %>" }).always(function(response) {
5
+ $("#<%= container_id %>").replaceWith(response);
6
+
7
+ <% if event_name.present? %>
8
+ document.dispatchEvent(new Event("<%= event_name %>"));
9
+ <% end %>
10
+ });
11
+ });
12
+ }(jQuery));
13
+ } else {
14
+ (function() {
15
+ document.addEventListener("DOMContentLoaded", function() {
16
+ var request = new XMLHttpRequest();
17
+ var asyncRequest = true;
18
+ var SUCCESS = 200;
19
+ var ERROR = 400;
20
+
21
+ request.open("GET", "<%= path.html_safe %>", asyncRequest);
22
+
23
+ request.onload = function() {
24
+ if (request.status >= SUCCESS && request.status < ERROR) {
25
+ var container = document.getElementById("<%= container_id %>");
26
+ container.outerHTML = request.response;
27
+
28
+ <% if event_name.present? %>
29
+ document.dispatchEvent(new Event("<%= event_name %>"));
30
+ <% end %>
31
+ }
32
+ };
33
+
34
+ request.send();
35
+ });
36
+ })();
37
+ }
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ git submodule init
5
+ git submodule update
6
+
7
+ gem build render_async.gemspec
8
+ gem install render_async*.gem
9
+
10
+ cd spec/fixtures/rails-5-base-app
11
+ ls
12
+ bundle install
13
+ bundle exec cucumber
@@ -1,3 +1,3 @@
1
1
  module RenderAsync
2
- VERSION = "1.1.3"
2
+ VERSION = "1.2.0".freeze
3
3
  end
@@ -18,11 +18,13 @@ module RenderAsync
18
18
  end
19
19
 
20
20
  def render_async(path, options = {}, &placeholder)
21
+ html_element_name = options.delete(:html_element_name) || "div"
21
22
  container_id = "render_async_#{SecureRandom.hex(5)}#{Time.now.to_i}"
22
23
  event_name = options.delete(:event_name)
23
24
  placeholder = capture(&placeholder) if block_given?
24
25
 
25
- render 'render_async/render_async', container_id: container_id,
26
+ render 'render_async/render_async', html_element_name: html_element_name,
27
+ container_id: container_id,
26
28
  path: path,
27
29
  html_options: options,
28
30
  event_name: event_name,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: render_async
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kasper Grubbe
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2017-11-22 00:00:00.000000000 Z
12
+ date: 2018-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -76,13 +76,16 @@ extra_rdoc_files: []
76
76
  files:
77
77
  - ".all-contributorsrc"
78
78
  - ".gitignore"
79
+ - ".gitmodules"
79
80
  - ".rspec"
80
81
  - Gemfile
81
82
  - LICENSE
82
83
  - README.md
83
84
  - Rakefile
84
85
  - app/views/render_async/_render_async.html.erb
86
+ - app/views/render_async/_request.js.erb
85
87
  - bin/console
88
+ - bin/integration-tests
86
89
  - bin/setup
87
90
  - lib/render_async.rb
88
91
  - lib/render_async/engine.rb