progressive_render 0.3.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b9a3f8c18f83d1552eb57f92fe03559ff4cb928
4
- data.tar.gz: 840b52a7d149e70d980bc1fde05e0f9513b2ab28
3
+ metadata.gz: 66c3ea0521fead6a74bac5c2684adb2594f37fc8
4
+ data.tar.gz: f7f2afaba6f1545d4b6510e29cb2829c62df2da6
5
5
  SHA512:
6
- metadata.gz: f86a82ec6cd7096af2a4eb5f2cae30335c427ebb3e03741c97b31f870df0fa4a3f2c1f7ec02fe3588477cec863e310bb4bd77f548567e2ecac7ce0f8cd0937fb
7
- data.tar.gz: 909bc7ba4ae306a1c5e257425c4b3123826b280b03ec2586f17b4c5e7514745f562375ab08e3d9b6507f98e0edc4015734f9dd7b8db5e8c7f4ef77ef825160c5
6
+ metadata.gz: 1d7b7b5b01e702bdc67e0dd3f6fd6fe5da9078ad3373dfd1efb7ceea7a830f811fd97a675f953aef62b71462f01889fdbceccd96b2d16dd9688cb976ec0cf2f6
7
+ data.tar.gz: 414339daf49bb4677914d3e3b625e0e6eb0d838c974969ab9d28b8fe4e07794952ac1e3528f1037b43ff4237a42ff0a6f4b0e47d2ce135780b11afb177e81f6a
data/DESIGN.md CHANGED
@@ -60,53 +60,28 @@ rh.load_path(fragment_name)
60
60
  rh.should_render_partial?(fragment_name)
61
61
  ```
62
62
 
63
- # RailsBuilder #
64
- Status: TODO
65
-
66
- Takes all necessary context and gives access to the ProgressiveRenderer
67
-
68
- ## Basic Syntax ##
69
- ```ruby
70
- rb = RailsBuilder.new(request)
71
- rb.view_renderer => ProgressiveRenderer
72
- rb.controller_renderer => ProgressiveRenderer
73
- ```
74
-
75
- # ProgresiveRenderer #
76
- Status: TODO. Currently handled by ProgressiveRender::Controller/View/Helpers
77
-
78
- Applies all policies to provide a simple render interface.
79
-
80
- Can we get around the partial_renderer field? It determines if it should render placeholders in place of the view passed into it.
81
-
82
- ## Basic Syntax ##
83
- ```ruby
84
- pr = ProgressiveRenderer.new(request_handler, view_renderer, path_resolver, partial_renderer:bool)
85
- pr.render(partial_name, &block=nil)
86
- ```
87
-
88
- # RailsInstaller #
89
- Status: TODO. Currently handled by ProgressiveRender
63
+ # Rails Engine #
64
+ Status: Implemented
90
65
 
91
66
  Installs the view/controller renderer into ActionView/ActionController
92
67
 
93
68
  ## Basic Syntax ##
94
69
  ```ruby
95
- RailsInstaller.mount_initializer
96
- # Or?
97
- RailsInstaller.mount_initializer(app)
70
+ class Engine < ::Rails::Engine
71
+ # .. installation code ..
72
+ end
98
73
  ```
99
74
 
100
-
101
75
  # Structure #
76
+ ```
102
77
  lib/
103
- progressive_render.rb (version)
78
+ progressive_render.rb
104
79
  rails/
105
80
  rails.rb
106
- installer.rb
81
+ engine.rb
107
82
  builder.rb
108
83
  view_renderer.rb
109
84
  path_resolver.rb
110
85
  rack/
111
86
  request_handler.rb
112
- progressive_renderer.rb
87
+ ```
data/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # ProgressiveRender [![Gem Version](https://badge.fury.io/rb/progressive_render.svg)](http://badge.fury.io/rb/progressive_render) #
2
2
 
3
- ![ProgressiveRender Demo](http://g.recordit.co/NsoKrtutzi.gif)
3
+ ![ProgressiveRender Demo](http://g.recordit.co/WgVCYoUWuh.gif)
4
4
 
5
5
  Slow content got you down? Load it later! Use this gem to defer loading of portions of your page until after load. They will be fetched via AJAX and placed on the page when ready.
6
6
 
7
+ For a quick start, see [Drifting Ruby #033 - Progressive Render](https://www.driftingruby.com/episodes/progressive-render) based on version 0.3.0. Note the controller changes are no longer required in 0.4.0.
8
+
7
9
  ## Why? ##
8
10
  You wrote all your code and it got a bit slow with all that production data. Or perhaps you have less important content that you want on the view, but it's not worth blocking the entire page for. With this gem there's almost no developer work to make this happen. All requests go through your controller and your normal filters so you're permissions are respected. The only added overhead is an additional round-trip for each partial and duplicated rendering of the main view.
9
11
 
@@ -44,18 +46,9 @@ Wrap slow content in your view with a call to `progressive_render`:
44
46
  <% end %>
45
47
  ```
46
48
 
47
- In the controller action, end it with:
48
-
49
- ```ruby
50
- def action
51
- # your code here
52
- progressive_render
53
- end
54
- ```
55
-
56
49
  ## Example Application ##
57
50
 
58
- For a more indepth example, see the test application located within this repository in `spec/dummy`
51
+ For a more in-depth example, see the test application located within this repository in `spec/dummy`
59
52
 
60
53
  ## Customizing the Placeholder ##
61
54
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- progressive_render (0.3.0)
4
+ progressive_render (0.4.1)
5
5
  coffee-rails
6
6
  jquery-rails
7
7
  nokogiri
@@ -51,9 +51,9 @@ GEM
51
51
  codeclimate-test-reporter (0.4.8)
52
52
  simplecov (>= 0.7.1, < 1.0.0)
53
53
  coderay (1.1.0)
54
- coffee-rails (4.1.1)
54
+ coffee-rails (4.2.1)
55
55
  coffee-script (>= 2.2.0)
56
- railties (>= 4.0.0, < 5.1.x)
56
+ railties (>= 4.0.0, < 5.2.x)
57
57
  coffee-script (2.4.1)
58
58
  coffee-script-source
59
59
  execjs
@@ -124,8 +124,8 @@ GEM
124
124
  rspec-support (~> 3.3.0)
125
125
  rspec-support (3.3.0)
126
126
  sass (3.4.22)
127
- sass-rails (5.0.4)
128
- railties (>= 4.0.0, < 5.0)
127
+ sass-rails (5.0.5)
128
+ railties (>= 4.0.0, < 6)
129
129
  sass (~> 3.1)
130
130
  sprockets (>= 2.8, < 4.0)
131
131
  sprockets-rails (>= 2.0, < 4.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- progressive_render (0.3.0)
4
+ progressive_render (0.4.1)
5
5
  coffee-rails
6
6
  jquery-rails
7
7
  nokogiri
@@ -60,9 +60,9 @@ GEM
60
60
  codeclimate-test-reporter (0.4.8)
61
61
  simplecov (>= 0.7.1, < 1.0.0)
62
62
  coderay (1.1.0)
63
- coffee-rails (4.1.1)
63
+ coffee-rails (4.2.1)
64
64
  coffee-script (>= 2.2.0)
65
- railties (>= 4.0.0, < 5.1.x)
65
+ railties (>= 4.0.0, < 5.2.x)
66
66
  coffee-script (2.4.1)
67
67
  coffee-script-source
68
68
  execjs
@@ -147,8 +147,8 @@ GEM
147
147
  rspec-support (~> 3.3.0)
148
148
  rspec-support (3.3.0)
149
149
  sass (3.4.22)
150
- sass-rails (5.0.4)
151
- railties (>= 4.0.0, < 5.0)
150
+ sass-rails (5.0.5)
151
+ railties (>= 4.0.0, < 6)
152
152
  sass (~> 3.1)
153
153
  sprockets (>= 2.8, < 4.0)
154
154
  sprockets-rails (>= 2.0, < 4.0)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- progressive_render (0.3.0)
4
+ progressive_render (0.4.1)
5
5
  coffee-rails
6
6
  jquery-rails
7
7
  nokogiri
@@ -61,9 +61,9 @@ GEM
61
61
  codeclimate-test-reporter (0.5.1)
62
62
  simplecov (>= 0.7.1, < 1.0.0)
63
63
  coderay (1.1.1)
64
- coffee-rails (4.1.1)
64
+ coffee-rails (4.2.1)
65
65
  coffee-script (>= 2.2.0)
66
- railties (>= 4.0.0, < 5.1.x)
66
+ railties (>= 4.0.0, < 5.2.x)
67
67
  coffee-script (2.4.1)
68
68
  coffee-script-source
69
69
  execjs
@@ -155,8 +155,8 @@ GEM
155
155
  rspec-support (~> 3.1.0)
156
156
  rspec-support (3.1.2)
157
157
  sass (3.4.22)
158
- sass-rails (5.0.4)
159
- railties (>= 4.0.0, < 5.0)
158
+ sass-rails (5.0.5)
159
+ railties (>= 4.0.0, < 6)
160
160
  sass (~> 3.1)
161
161
  sprockets (>= 2.8, < 4.0)
162
162
  sprockets-rails (>= 2.0, < 4.0)
@@ -0,0 +1,54 @@
1
+ require 'progressive_render/rails/helpers'
2
+
3
+ module ProgressiveRender
4
+ module Rails
5
+
6
+ module Controller
7
+ include Helpers
8
+
9
+ def progressive_render(template=nil)
10
+ logger.warn "DEPRECATED: calling 'progressive_render' directly in the controller is deprecated and will be removed in future versions. It is no longer necessary to explicitly call the render method."
11
+ render template
12
+ end
13
+
14
+ def resolve_path(template)
15
+ tc = Rails::PathResolver::TemplateContext.new
16
+ tc.type = :controller
17
+ tc.controller = request.params["controller"]
18
+ tc.action = request.params["action"]
19
+
20
+ pr = Rails::PathResolver.new(tc)
21
+
22
+ pr.path_for(template)
23
+ end
24
+
25
+ def render(options = nil, extra_options = {}, &block)
26
+ # Fall back to the ActionView renderer if we're on the main page load
27
+ # OR we are being called from inside our own code (in_progressive_render?)
28
+ if progressive_request.is_main_load? || in_progressive_render?
29
+ super
30
+ else
31
+ in_progressive_render do
32
+ # To preserve legacy behavior pass options through to resolve_path if it's a string
33
+ # ActiveRecord more properly handles the path so use that when possible.
34
+ template = options if options.is_a? String
35
+ progressive_renderer.render_fragment resolve_path(template), progressive_request.fragment_name
36
+ end
37
+ end
38
+ end
39
+
40
+ def in_progressive_render?
41
+ @in_progressive_render
42
+ end
43
+
44
+ # To prevent the render call from reentrancy we need to remember if we're in our own render path.
45
+ # Our rendering code calls 'render' to access the real view renderer so we need a way to fall back to it.
46
+ def in_progressive_render(&block)
47
+ @in_progressive_render = true
48
+ block.call
49
+ @in_progressive_render = false
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,21 @@
1
+ module ProgressiveRender
2
+ module Rails
3
+
4
+ class Engine < ::Rails::Engine
5
+ initializer "progressive_render.assets.precompile" do |app|
6
+ app.config.assets.precompile += %w( progressive_render.gif progressive_render.js.coffee progressive_render.css.scss )
7
+ end
8
+
9
+ initializer "progressive_render.install" do
10
+ ActionController::Base.class_eval do
11
+ prepend ProgressiveRender::Rails::Controller
12
+ end
13
+
14
+ ActionView::Base.class_eval do
15
+ prepend ProgressiveRender::Rails::View
16
+ end
17
+ end
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ module ProgressiveRender
2
+ module Rails
3
+
4
+ module Helpers
5
+ def progressive_request
6
+ @rh ||= Rack::RequestHandler.new(request)
7
+ end
8
+ def progressive_renderer
9
+ Rails::ViewRenderer.new(self)
10
+ end
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ require 'progressive_render/rails/helpers'
2
+
3
+ module ProgressiveRender
4
+ module Rails
5
+
6
+ module View
7
+ include Helpers
8
+
9
+ def progressive_render(deprecated_fragment_name = nil, placeholder: 'progressive_render/placeholder', cache_keys: nil, &content)
10
+ fragment_name = fragment_name_iterator.next!
11
+
12
+ if deprecated_fragment_name
13
+ logger.warn "DEPRECATED (progressive_render gem): Literal fragment names are deprecated and will be removed in v1.0. The fragment name (#{deprecated_fragment_name}) will be ignored."
14
+ end
15
+
16
+ progressive_render_content(fragment_name, progressive_request.is_main_load?) do
17
+ if progressive_request.is_main_load?
18
+ progressive_renderer.render_partial placeholder
19
+ elsif progressive_request.should_render_fragment?(fragment_name)
20
+ content.call
21
+ end
22
+ end
23
+ end
24
+
25
+ def progressive_render_content(fragment_name, placeholder=true)
26
+ content_tag(:div, id: "#{fragment_name}_progressive_render",
27
+ data: {progressive_render_placeholder: placeholder,
28
+ progressive_render_path: progressive_request.load_path(fragment_name)}.select {|k,v| !v.nil? }) do
29
+ yield
30
+ end
31
+ end
32
+
33
+ def fragment_name_iterator
34
+ @fni ||= FragmentNameIterator.new
35
+ end
36
+ end
37
+
38
+ end
39
+ end
@@ -1,5 +1,10 @@
1
1
  require 'progressive_render/rails/path_resolver'
2
2
  require 'progressive_render/rails/view_renderer'
3
+ require 'progressive_render/rails/engine'
4
+
5
+ require 'progressive_render/rails/helpers'
6
+ require 'progressive_render/rails/view'
7
+ require 'progressive_render/rails/controller'
3
8
 
4
9
  module ProgressiveRender
5
10
  module Rails
@@ -1,3 +1,3 @@
1
1
  module ProgressiveRender
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.1"
3
3
  end
@@ -1,32 +1,11 @@
1
- require 'progressive_render/version'
2
- require 'progressive_render/controller'
3
- require 'progressive_render/view'
4
-
5
1
  require 'progressive_render/rack'
6
- require 'progressive_render/rails'
7
2
 
8
3
  require 'progressive_render/fragment_name_iterator'
9
4
 
10
5
  module ProgressiveRender
11
- if defined?(::Rails) and Gem::Requirement.new('>= 3.1').satisfied_by?(Gem::Version.new ::Rails.version)
12
- module Rails
13
- class Engine < ::Rails::Engine
14
- initializer "progressive_render.assets.precompile" do |app|
15
- app.config.assets.precompile += %w( progressive_render.gif progressive_render.js.coffee progressive_render.css.scss )
16
- end
17
-
18
- initializer "progressive_render.install" do
19
- ActionController::Base.class_eval do
20
- include ProgressiveRender::Controller
21
- end
22
-
23
- ActionView::Base.class_eval do
24
- include ProgressiveRender::View
25
- end
26
- end
27
- end
28
- end
29
- else
30
- puts "WARNING: ProgressiveRender has not been installed due to missing dependencies"
31
- end
32
- end
6
+ if defined?(::Rails) and Gem::Requirement.new('>= 3.1').satisfied_by?(Gem::Version.new ::Rails.version)
7
+ require 'progressive_render/rails'
8
+ else
9
+ logger.warn "WARNING: ProgressiveRender has not been installed due to missing dependencies"
10
+ end
11
+ end
@@ -11,9 +11,8 @@ setup_listener = ->
11
11
  load_missing_content = ->
12
12
  $('[data-progressive-render-placeholder=true]').each ->
13
13
  $this = $(this)
14
- # Don't re-process div's we've already seen
15
- return if $this.data('progressive-render-setup')
16
- $this.data('progressive-render-setup', true)
14
+ # Remove the designation on this partial from the DOM so we don't attempt to re-load it later.
15
+ $this.attr('data-progressive-render-placeholder', false)
17
16
 
18
17
  # Start the load
19
18
  $.ajax url: $this.data('progressive-render-path'), cache: false, success: (response) ->
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: progressive_render
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Johnson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-13 00:00:00.000000000 Z
11
+ date: 2016-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -249,16 +249,17 @@ files:
249
249
  - gemfiles/rails_5_0_0_beta4.gemfile
250
250
  - gemfiles/rails_5_0_0_beta4.gemfile.lock
251
251
  - lib/progressive_render.rb
252
- - lib/progressive_render/controller.rb
253
252
  - lib/progressive_render/fragment_name_iterator.rb
254
- - lib/progressive_render/helpers.rb
255
253
  - lib/progressive_render/rack.rb
256
254
  - lib/progressive_render/rack/request_handler.rb
257
255
  - lib/progressive_render/rails.rb
256
+ - lib/progressive_render/rails/controller.rb
257
+ - lib/progressive_render/rails/engine.rb
258
+ - lib/progressive_render/rails/helpers.rb
258
259
  - lib/progressive_render/rails/path_resolver.rb
260
+ - lib/progressive_render/rails/view.rb
259
261
  - lib/progressive_render/rails/view_renderer.rb
260
262
  - lib/progressive_render/version.rb
261
- - lib/progressive_render/view.rb
262
263
  - progressive_load.gemspec
263
264
  - vendor/assets/images/progressive_render.gif
264
265
  - vendor/assets/javascripts/progressive_render.js.coffee
@@ -283,7 +284,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
283
284
  version: '0'
284
285
  requirements: []
285
286
  rubyforge_project:
286
- rubygems_version: 2.4.8
287
+ rubygems_version: 2.5.1
287
288
  signing_key:
288
289
  specification_version: 4
289
290
  summary: Progressively load static or dynamic content on page load
@@ -1,26 +0,0 @@
1
- require 'progressive_render/helpers'
2
-
3
- module ProgressiveRender
4
- module Controller
5
- include Helpers
6
-
7
- def progressive_render(template=nil)
8
- if progressive_request.is_main_load?
9
- progressive_renderer.render_view resolve_path(template)
10
- else
11
- progressive_renderer.render_fragment resolve_path(template), progressive_request.fragment_name
12
- end
13
- end
14
-
15
- def resolve_path(template)
16
- tc = Rails::PathResolver::TemplateContext.new
17
- tc.type = :controller
18
- tc.controller = request.params["controller"]
19
- tc.action = request.params["action"]
20
-
21
- pr = Rails::PathResolver.new(tc)
22
-
23
- pr.path_for(template)
24
- end
25
- end
26
- end
@@ -1,10 +0,0 @@
1
- module ProgressiveRender
2
- module Helpers
3
- def progressive_request
4
- @rh ||= Rack::RequestHandler.new(request)
5
- end
6
- def progressive_renderer
7
- Rails::ViewRenderer.new(self)
8
- end
9
- end
10
- end
@@ -1,35 +0,0 @@
1
- require 'progressive_render'
2
-
3
- module ProgressiveRender
4
- module View
5
- include Helpers
6
-
7
- def progressive_render(deprecated_fragment_name = nil, placeholder: 'progressive_render/placeholder', cache_keys: nil, &content)
8
- fragment_name = fragment_name_iterator.next!
9
-
10
- if deprecated_fragment_name
11
- logger.warn "DEPRECATED (progressive_render gem): Literal fragment names are dperecated and will be removed in v1.0. The fragment name (#{deprecated_fragment_name}) will be ignored."
12
- end
13
-
14
- progressive_render_content(fragment_name, progressive_request.is_main_load?) do
15
- if progressive_request.is_main_load?
16
- progressive_renderer.render_partial placeholder
17
- elsif progressive_request.should_render_fragment?(fragment_name)
18
- content.call
19
- end
20
- end
21
- end
22
-
23
- def progressive_render_content(fragment_name, placeholder=true)
24
- content_tag(:div, id: "#{fragment_name}_progressive_render",
25
- data: {progressive_render_placeholder: placeholder,
26
- progressive_render_path: progressive_request.load_path(fragment_name)}) do
27
- yield
28
- end
29
- end
30
-
31
- def fragment_name_iterator
32
- @fni ||= FragmentNameIterator.new
33
- end
34
- end
35
- end