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 +4 -4
- data/DESIGN.md +9 -34
- data/README.md +4 -11
- data/gemfiles/rails_4_1.gemfile.lock +5 -5
- data/gemfiles/rails_4_2.gemfile.lock +5 -5
- data/gemfiles/rails_5_0_0_beta4.gemfile.lock +5 -5
- data/lib/progressive_render/rails/controller.rb +54 -0
- data/lib/progressive_render/rails/engine.rb +21 -0
- data/lib/progressive_render/rails/helpers.rb +14 -0
- data/lib/progressive_render/rails/view.rb +39 -0
- data/lib/progressive_render/rails.rb +5 -0
- data/lib/progressive_render/version.rb +1 -1
- data/lib/progressive_render.rb +6 -27
- data/vendor/assets/javascripts/progressive_render.js.coffee +2 -3
- metadata +7 -6
- data/lib/progressive_render/controller.rb +0 -26
- data/lib/progressive_render/helpers.rb +0 -10
- data/lib/progressive_render/view.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66c3ea0521fead6a74bac5c2684adb2594f37fc8
|
4
|
+
data.tar.gz: f7f2afaba6f1545d4b6510e29cb2829c62df2da6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
#
|
64
|
-
Status:
|
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
|
-
|
96
|
-
#
|
97
|
-
|
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
|
78
|
+
progressive_render.rb
|
104
79
|
rails/
|
105
80
|
rails.rb
|
106
|
-
|
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
|
-
|
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/
|
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
|
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.
|
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.
|
54
|
+
coffee-rails (4.2.1)
|
55
55
|
coffee-script (>= 2.2.0)
|
56
|
-
railties (>= 4.0.0, < 5.
|
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.
|
128
|
-
railties (>= 4.0.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.
|
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.
|
63
|
+
coffee-rails (4.2.1)
|
64
64
|
coffee-script (>= 2.2.0)
|
65
|
-
railties (>= 4.0.0, < 5.
|
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.
|
151
|
-
railties (>= 4.0.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.
|
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.
|
64
|
+
coffee-rails (4.2.1)
|
65
65
|
coffee-script (>= 2.2.0)
|
66
|
-
railties (>= 4.0.0, < 5.
|
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.
|
159
|
-
railties (>= 4.0.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,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
|
data/lib/progressive_render.rb
CHANGED
@@ -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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
#
|
15
|
-
|
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.
|
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-
|
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.
|
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,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
|