progressive_render 0.1.2 → 0.2.0

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: 7b67772885c5165b7865be20cd468a5bedeafab7
4
- data.tar.gz: 4384f6793c5575487e3a5f3ae4df14a22671bdb3
3
+ metadata.gz: 60821fb1d80513e33681bf81535eecd989d3e277
4
+ data.tar.gz: 959768dd21086bbe441208b4faacf177d0e6b409
5
5
  SHA512:
6
- metadata.gz: 29360ee21b141fbba94f6b34cb1812e976591c7b21c11a073de6cb1d5560685b21b59e1bfaa19accf7a09fdd64eaf785ea69fd613c2b2a1a41e3c31ce00ba6c2
7
- data.tar.gz: a70b560a4042972046118f92d68b275979ebda77073a295313a4b7c1a5cb205c0d6adfd22739158452540a830801ed931d12c1a3bf79261b790bcaa332bb303e
6
+ metadata.gz: d53dafd14fdc97a859910bad012ef715edc8aa8e8aee345c8f5c05e5e99bd61b523ab42f714da287d6fd6f7e8d74343ef246601bf6c28b038f33dbb682b92d8b
7
+ data.tar.gz: 9a7db74a8a439b4268c333113f1d2cd9ddc5996ec12ac442a8fca827c2af86b5f04ad743abe2b87c2c4b00e84921c0f96a54bc7a7321a9da2c9279fd2357a377
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ *.DS_Store
data/.travis.yml CHANGED
@@ -11,5 +11,6 @@ gemfile:
11
11
  - gemfiles/rails_4_1.gemfile
12
12
 
13
13
  matrix:
14
+ fast_finish: true
14
15
  allow_failures:
15
16
  - rvm: ruby-head
data/DESIGN.md CHANGED
@@ -31,16 +31,19 @@ dtp.path_for('bar') == foo/bar
31
31
  ```
32
32
 
33
33
  # ViewRenderer (Rails Specific) #
34
- Status: TODO
34
+ Status: Implemented
35
35
 
36
- Renders a partial to a string? Maybe. Controller vs. View may need seperate view renderers because controller needs to output the stream. Is there a difference between ActionController.render and ActionView.render?
36
+ Interfaces between the rails renderer and rest of code.
37
37
 
38
38
  ## Basic Syntax ##
39
39
  ```ruby
40
- rt = ViewRenderer.new
41
- rt.render(full_path) # normal render
42
- rt.render_text(content) # render plain text (or safe HTML)
43
- rt.render_inline(content) # is this needed?
40
+ vr = ViewRenderer.new
41
+ # Render a specific partial (just placeholder likely)
42
+ vr.render_partial(full_partial_path)
43
+ # Render a full view
44
+ vr.render_view(full_view_path)
45
+ # Render a full view and extract a single fragment
46
+ vr.render_fragment(full_view_path, fragment_name)
44
47
  ```
45
48
 
46
49
  # RequestHandler (Rack Specific) #
data/README.md CHANGED
@@ -1,20 +1,20 @@
1
- # ProgressiveRender
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/s4EYYte2sC.gif)
3
+ ![ProgressiveRender Demo](http://g.recordit.co/NsoKrtutzi.gif)
4
4
 
5
- Slow content got you down? Load it later! Use this gem to defer loading of specific page sections till after page load. They will be fetched via AJAX and placed on the page when ready.
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
- ## State of Project
8
- [![Build Status](https://travis-ci.org/johnsonj/progressive_load.svg?branch=master)](https://travis-ci.org/johnsonj/progressive_load) [![Code Climate](https://codeclimate.com/github/johnsonj/progressive_load/badges/gpa.svg)](https://codeclimate.com/github/johnsonj/progressive_load) [![Test Coverage](https://codeclimate.com/github/johnsonj/progressive_load/badges/coverage.svg)](https://codeclimate.com/github/johnsonj/progressive_load/coverage)
7
+ ## State of Project ##
8
+ [![Build Status](https://travis-ci.org/johnsonj/progressive_render.svg?branch=master)](https://travis-ci.org/johnsonj/progressive_render) [![Code Climate](https://codeclimate.com/github/johnsonj/progressive_load/badges/gpa.svg)](https://codeclimate.com/github/johnsonj/progressive_load) [![Test Coverage](https://codeclimate.com/github/johnsonj/progressive_load/badges/coverage.svg)](https://codeclimate.com/github/johnsonj/progressive_load/coverage)
9
9
 
10
- This gem is tracking a 1.0.0 release but should not be considered stable until then. [See open issues](https://github.com/johnsonj/progressive_render/milestones/1.0.0).
10
+ This gem is young, please use released versions via RubyGems as master is not guarenteed to be stable until 1.0.0 is released. [See open issues](https://github.com/johnsonj/progressive_render/issues). Report any issues you have!
11
11
 
12
- ## Installation
12
+ ## Installation ##
13
13
 
14
- Add this line to your application's Gemfile and run bundle
14
+ Add this line to your application's Gemfile and run `bundle install`
15
15
 
16
16
  ```ruby
17
- gem 'progressive_render', github: 'johnsonj/progressive_render'
17
+ gem 'progressive_render'
18
18
  ```
19
19
 
20
20
  Then add the following to your application.js:
@@ -23,14 +23,14 @@ Then add the following to your application.js:
23
23
  //=progressive_render
24
24
  ```
25
25
 
26
- ## Usage
26
+ ## Basic Usage ##
27
27
 
28
- Wrap slow content in your view with a call to `progressive_render 'friendly_name'` where `friendly_name` is an identifier unique to that view:
28
+ Wrap slow content in your view with a call to `progressive_render`:
29
29
 
30
30
  ```erb
31
- <%=progressive_render 'my_slow_block' do %>
31
+ <%=progressive_render do %>
32
32
  <h1>Content!</h1>
33
- <% sleep 5 >
33
+ <% sleep 5 %>
34
34
  <% end %>
35
35
  ```
36
36
 
@@ -43,16 +43,33 @@ def action
43
43
  end
44
44
  ```
45
45
 
46
- ## Development
46
+ ## Example Application ##
47
47
 
48
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. There is a dummy application located in spec/dummy/ that demonstrates a sample integration and can be used for interactive testing.
48
+ For a more indepth example, see the test application located within this repository in `spec/dummy`
49
49
 
50
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
50
+ ## Customizing the Placeholder ##
51
51
 
52
- ## Contributing
52
+ Each `progressive_render` call in the view can specify its own placeholder by providing a path to the partial you'd like to initially display to the user:
53
53
 
54
- Bug reports and pull requests are welcome on GitHub at https://github.com/johnsonj/progressive_render. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
54
+ ```ruby
55
+ <%=progressive_render placeholder: 'shared/loading' do %>
56
+ <h1>Content!</h1>
57
+ <% sleep 5 %>
58
+ <% end %>
59
+ ```
60
+
61
+ The placeholder defaults to rendering the partial `progressive_render/placeholder` so if you'd like to override it globally create the file `app/views/progressive_render/_placeholder.html.erb`. It will also work at the controller level, eg, `app/views/users/progresive_render/_placeholder.html.erb`
62
+
63
+ ## Development ##
64
+
65
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rspec` to run the tests. There is a dummy application located in `spec/dummy/` that demonstrates a sample integration and can be used for interactive testing.
66
+
67
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org/gems/progressive_render).
68
+
69
+ ## Contributing ##
70
+
71
+ Bug reports and pull requests are welcome on [GitHub](https://github.com/johnsonj/progressive_render).
55
72
 
56
- ## License
73
+ ## License ##
57
74
 
58
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
75
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- progressive_render (0.1.1)
4
+ progressive_render (0.1.2)
5
5
  coffee-rails
6
6
  jquery-rails
7
7
  nokogiri
8
8
  rails (>= 4.1)
9
9
  railties
10
+ sass
10
11
  sass-rails
11
12
  uglifier
12
13
 
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: ../
3
3
  specs:
4
- progressive_render (0.1.1)
4
+ progressive_render (0.1.2)
5
5
  coffee-rails
6
6
  jquery-rails
7
7
  nokogiri
8
8
  rails (>= 4.1)
9
9
  railties
10
+ sass
10
11
  sass-rails
11
12
  uglifier
12
13
 
@@ -5,6 +5,8 @@ require 'progressive_render/view'
5
5
  require 'progressive_render/rack'
6
6
  require 'progressive_render/rails'
7
7
 
8
+ require 'progressive_render/fragment_name_iterator'
9
+
8
10
  module ProgressiveRender
9
11
  if defined?(::Rails) and Gem::Requirement.new('>= 3.1').satisfied_by?(Gem::Version.new ::Rails.version)
10
12
  module Rails
@@ -5,22 +5,22 @@ module ProgressiveRender
5
5
  include Helpers
6
6
 
7
7
  def progressive_render(template=nil)
8
- rh = ProgressiveRender::Rack::RequestHandler.new(request)
9
-
10
- tc = ProgressiveRender::Rails::PathResolver::TemplateContext.new
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
11
14
 
15
+ def resolve_path(template)
16
+ tc = Rails::PathResolver::TemplateContext.new
12
17
  tc.type = :controller
13
18
  tc.controller = request.params["controller"]
14
19
  tc.action = request.params["action"]
15
- pr = ProgressiveRender::Rails::PathResolver.new(tc)
16
20
 
17
- if rh.is_main_load?
18
- render pr.path_for(template)
19
- else
20
- content = render_to_string template: pr.path_for(template), layout: false
21
- stripped = Nokogiri::HTML(content).at_css("div##{rh.fragment_name}_progressive_render")
22
- render text: stripped
23
- end
21
+ pr = Rails::PathResolver.new(tc)
22
+
23
+ pr.path_for(template)
24
24
  end
25
25
  end
26
26
  end
@@ -0,0 +1,15 @@
1
+ module ProgressiveRender
2
+
3
+ class FragmentNameIterator
4
+ def initialize
5
+ @current = 0
6
+ end
7
+
8
+ def next!
9
+ @current += 1
10
+
11
+ "#{@current}"
12
+ end
13
+ end
14
+
15
+ end
@@ -1,14 +1,10 @@
1
1
  module ProgressiveRender
2
2
  module Helpers
3
- def progressive_render_content(name, placeholder=true)
4
- content_tag(:div, id: "#{name}_progressive_render", data: {progressive_render_placeholder: placeholder, progressive_render_path: progressive_render_path(request, name)}) do
5
- yield
6
- end
3
+ def progressive_request
4
+ @rh ||= Rack::RequestHandler.new(request)
7
5
  end
8
-
9
- def progressive_render_path(req, fragment_name)
10
- rh = ProgressiveRender::Rack::RequestHandler.new(req)
11
- rh.load_path(fragment_name)
6
+ def progressive_renderer
7
+ Rails::ViewRenderer.new(self)
12
8
  end
13
9
  end
14
10
  end
@@ -1,4 +1,5 @@
1
1
  require 'progressive_render/rails/path_resolver'
2
+ require 'progressive_render/rails/view_renderer'
2
3
 
3
4
  module ProgressiveRender
4
5
  module Rails
@@ -0,0 +1,23 @@
1
+ require 'nokogiri'
2
+
3
+ module ProgressiveRender
4
+ module Rails
5
+ class ViewRenderer
6
+ attr_accessor :context
7
+ def initialize(_view_context)
8
+ self.context = _view_context
9
+ end
10
+ def render_partial(path)
11
+ context.render partial: path
12
+ end
13
+ def render_view(path)
14
+ context.render path
15
+ end
16
+ def render_fragment(path, fragment_name)
17
+ content = context.render_to_string template: path, layout: false
18
+ stripped = Nokogiri::HTML(content).at_css("div##{fragment_name}_progressive_render")
19
+ context.render text: stripped.to_html
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module ProgressiveRender
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -3,20 +3,33 @@ require 'progressive_render'
3
3
  module ProgressiveRender
4
4
  module View
5
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!
6
9
 
7
- def progressive_render(fragment_name, &content)
8
- rh = ProgressiveRender::Rack::RequestHandler.new(request)
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
9
13
 
10
- progressive_render_content(fragment_name, rh.is_main_load?) do
11
- if rh.is_main_load?
12
- render partial: 'progressive_render/placeholder'
13
- elsif rh.should_render_fragment?(fragment_name)
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)
14
18
  content.call
15
- else
16
- # Another progressive partial on this page but not the one we've been asked to render
17
- render text: ""
18
19
  end
19
20
  end
20
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
21
34
  end
22
35
  end
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "sqlite3"
28
28
  spec.add_development_dependency "pry-byebug"
29
29
 
30
+ spec.add_dependency "sass"
30
31
  spec.add_dependency "sass-rails"
31
32
  spec.add_dependency "uglifier"
32
33
  spec.add_dependency "coffee-rails"
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.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Johnson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-03 00:00:00.000000000 Z
11
+ date: 2015-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sass
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: sass-rails
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -220,7 +234,6 @@ files:
220
234
  - ".rspec"
221
235
  - ".travis.yml"
222
236
  - Appraisals
223
- - CODE_OF_CONDUCT.md
224
237
  - DESIGN.md
225
238
  - Gemfile
226
239
  - LICENSE.txt
@@ -235,11 +248,13 @@ files:
235
248
  - gemfiles/rails_4_2.gemfile.lock
236
249
  - lib/progressive_render.rb
237
250
  - lib/progressive_render/controller.rb
251
+ - lib/progressive_render/fragment_name_iterator.rb
238
252
  - lib/progressive_render/helpers.rb
239
253
  - lib/progressive_render/rack.rb
240
254
  - lib/progressive_render/rack/request_handler.rb
241
255
  - lib/progressive_render/rails.rb
242
256
  - lib/progressive_render/rails/path_resolver.rb
257
+ - lib/progressive_render/rails/view_renderer.rb
243
258
  - lib/progressive_render/version.rb
244
259
  - lib/progressive_render/view.rb
245
260
  - progressive_load.gemspec
@@ -266,7 +281,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
281
  version: '0'
267
282
  requirements: []
268
283
  rubyforge_project:
269
- rubygems_version: 2.4.6
284
+ rubygems_version: 2.2.0
270
285
  signing_key:
271
286
  specification_version: 4
272
287
  summary: Progressively load static or dynamic content on page load
data/CODE_OF_CONDUCT.md DELETED
@@ -1,13 +0,0 @@
1
- # Contributor Code of Conduct
2
-
3
- As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
-
5
- We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.
6
-
7
- Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
-
9
- Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
-
11
- Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
-
13
- This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)