pagelet_rails 0.1.1 → 0.1.2

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: 3aa99a010f992678e4b22a55fefd07737f61f5f2
4
- data.tar.gz: a39f2946ef9ebb00c36f0d10621df7ddfc806eb3
3
+ metadata.gz: 4e50eed9cbc5cc8321966e7f7ffe1ec0aac7f74e
4
+ data.tar.gz: 7a0462d6c842b876a84711e06c3c0e214c95d111
5
5
  SHA512:
6
- metadata.gz: 09169c64e88710b63b47adee7ede33b2bf24cb79291bb8d25e4f6c74b2de3486526d63a63a58425f7a6cef4ee73f23be16d7e01f2b0136cc9c51daa407228ac0
7
- data.tar.gz: 395a4647fef22cc347fd0ae0808522b3205e172e41e7f0378b7cc239189d513863a84c8c47aa8339a3a97ee9fdcc4928dc6e260815a3148227d40a2f5d0224e3
6
+ metadata.gz: 1d13544c9d7c095b7493f6873de350a548f85089626473865c22b917a9cad4772404ada34f19b3639785085265404614c4b1cf96abe1fa820971410df9aa8ac3
7
+ data.tar.gz: 7f226cf84f54bca6949d85d32f2a962917ad2d3774b3f4e1a7b602a7c20b85a478f0674c646235e8f87e3e4d7dcc6824f51b4993eb47c96fc7f49db2204e1167
data/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  Don't make your users wait for page to load.
13
13
 
14
- [View Demo Project](https://polar-river-18908.herokuapp.com)
14
+ [View Demo Project](http://polar-river-18908.herokuapp.com)
15
15
 
16
16
  ## Example
17
17
 
@@ -405,13 +405,28 @@ Only relevant for `remote: true` and `remote: :turbolinks` when request is loade
405
405
 
406
406
  There will be one request per group. Missing value is considered a separate group as well.
407
407
 
408
-
408
+ ## All possible advantages of this gem's approach
409
+
410
+ This is a list of all advantages that would be made possible by using this gem's approach of abstraction and decomposition. Note: not all features are implemented yet.
411
+
412
+ - Ability to use HTTP public cache for fragment caching
413
+ - Easier fragment caching on the server
414
+ - Batch Ajax requests
415
+ - Custom loading placeholders
416
+ - Progressive rendering of the page
417
+ - Partial page updates
418
+ - "Super smart caching"
419
+ - Delay render below the fold
420
+ - Simplified development and testing
421
+ - Minimum DSL or new syntax
422
+ - Asset dependencies
423
+ - Parallel rendering
424
+ - Take advantage of HTTP2 features
425
+
409
426
  ## Todo
410
427
 
411
428
  * delay load of not visible pagelets (aka. below the fold)
412
429
  * do not load pagelets which are not visible to the user until user scrolls down. For example like Youtube comments.
413
- * fix streaming with nested layouts (rails bug?)
414
- * add rails 4 support
415
430
  * high test coverage
416
431
  * update actionpack-action_caching gem to support rails 5
417
432
 
@@ -1,5 +1,25 @@
1
1
  module PageletsHelper
2
2
 
3
+ def html_container_attributes
4
+ html_opts = pagelet_options.html || {}
5
+ classes = html_opts.fetch(:class, '').split(' ')
6
+ classes << "pagelet-#{controller_name}"
7
+ classes << "pagelet-#{controller_name}-#{action_name}"
8
+
9
+ html_opts[:id] ||= pagelet_default_id
10
+ html_opts[:class] = classes.join(' ')
11
+
12
+ html_opts['data-pagelet-container'] = true
13
+
14
+ encode_data = pagelet_options.original_options.to_h.except('remote')
15
+ html_opts['data-pagelet-options'] = PageletRails::Encryptor.encode(encode_data)
16
+
17
+ if pagelet_options.ajax_group
18
+ html_opts['data-pagelet-group'] = pagelet_options.ajax_group
19
+ end
20
+ html_opts
21
+ end
22
+
3
23
  def pagelet_stream
4
24
  return nil if pagelet_stream_objects.empty?
5
25
  pagelet_stream_objects.each do |key, block|
@@ -24,7 +44,7 @@ module PageletsHelper
24
44
  end
25
45
 
26
46
  def pagelet path, p_options = {}
27
- puts "Rendering pagelet #{path}".blue
47
+ Rails.logger.info "Rendering pagelet #{path}"
28
48
 
29
49
  p_params = p_options.delete(:params) { {} }.with_indifferent_access
30
50
 
@@ -72,8 +92,12 @@ module PageletsHelper
72
92
  p_request.parameters.clear
73
93
  p_request.parameters.merge! p_params
74
94
 
75
- p_response = controller_class.make_response! p_request
76
- c.dispatch(action, p_request, p_response)
95
+ if c.method(:dispatch).arity == 3
96
+ p_response = controller_class.make_response! p_request
97
+ c.dispatch(action, p_request, p_response)
98
+ else
99
+ c.dispatch(action, p_request)
100
+ end
77
101
 
78
102
  body = c.response.body
79
103
  body.html_safe
@@ -0,0 +1,8 @@
1
+ <% if pagelet_request? || pagelet_options.skip_container %>
2
+ <%= content_for?(:content) ? yield(:content) : yield %>
3
+
4
+ <% else %>
5
+ <%= content_tag :div, html_container_attributes do %>
6
+ <%= content_for?(:content) ? yield(:content) : yield %>
7
+ <% end %>
8
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= content_for?(:content) ? yield(:content) : yield %>
@@ -1,9 +1,8 @@
1
- ruby:
2
- height = pagelet_options.placeholder.try(:[], :height)
3
- text = pagelet_options.placeholder.try(:[], :text) || 'Loading ...'
4
- height = height.is_a?(Numeric) ? "#{height}px" : 'auto'
1
+ <% height = pagelet_options.placeholder.try(:[], :height) %>
2
+ <% height = height.is_a?(Numeric) ? "#{height}px" : 'auto' %>
3
+ <% text = pagelet_options.placeholder.try(:[], :text) || 'Loading ...' %>
5
4
 
6
- css:
5
+ <style type="text/css">
7
6
  /* Three Bounce */
8
7
  .spinner.spinner-three-bounce {
9
8
  width: 70px;
@@ -53,14 +52,20 @@ css:
53
52
  -webkit-transform: scale(1.0);
54
53
  }
55
54
  }
55
+ </style>
56
56
 
57
-
58
- div style="display: table; height: #{height}; overflow: hidden; width: 100%;"
59
- div style="display: table-cell; vertical-align: middle;"
60
- div.text-center
61
- span.spinner.spinner-three-bounce
62
- .bounce1
63
- .bounce2
64
- .bounce3
65
- br
66
- span = text
57
+ <div style="display: table; height: <%= height %>; overflow: hidden; width: 100%;">
58
+ <div style="display: table-cell; vertical-align: middle;">
59
+ <div class="text-center">
60
+ <div class="spinner spinner-three-bounce">
61
+ <div class="bounce1"></div>
62
+ <div class="bounce2"></div>
63
+ <div class="bounce3"></div>
64
+ </div>
65
+ <br>
66
+ <span>
67
+ <%= text %>
68
+ </span>
69
+ </div>
70
+ </div>
71
+ </div>
@@ -16,13 +16,13 @@ module PageletRails::Concerns::Controller
16
16
 
17
17
  helper_method :pagelet_request?
18
18
 
19
- pagelet_options layout: 'panel'
19
+ pagelet_options layout: 'container'
20
20
  end
21
21
 
22
22
  def layout_name
23
23
  layout = params[:layout] || pagelet_options.layout
24
24
 
25
- "pagelets/#{layout}"
25
+ "pagelet_rails/#{layout}"
26
26
  end
27
27
 
28
28
  def pagelet_request?
@@ -33,6 +33,7 @@ module PageletRails::Concerns::Controller
33
33
 
34
34
  def append_pagelet_view_paths
35
35
  self.view_paths.unshift 'app/pagelets/'
36
+ self.view_paths.unshift 'test/dummy/app/pagelets/' if Rails.env.test?
36
37
 
37
38
  # lookup_context.prefixes.clear
38
39
  view = "#{controller_name}/views"
@@ -8,7 +8,7 @@ module PageletRails::Concerns::Options
8
8
  end
9
9
 
10
10
  def pagelet_options *args
11
- set_pagelet_options *args
11
+ set_pagelet_options(*args)
12
12
 
13
13
  opts = self.class.pagelet_options
14
14
  class_default_opts = opts.fetch('default', {})
@@ -47,7 +47,7 @@ module PageletRails::Concerns::Options
47
47
  include Shared
48
48
 
49
49
  def pagelet_options *args
50
- set_pagelet_options *args
50
+ set_pagelet_options(*args)
51
51
 
52
52
  if superclass && superclass.instance_variable_defined?(:@pagelet_options)
53
53
  parent = superclass.instance_variable_get :@pagelet_options
@@ -14,7 +14,7 @@ module PageletRails::Concerns::ResponseWrapper
14
14
  memo
15
15
  }
16
16
 
17
- if html.match /^\s*</
17
+ if html.match(/^\s*</)
18
18
  # the body could be javascript, make sure it's html before wrapping
19
19
 
20
20
  id = ActionController::Base.helpers.escape_javascript params[:target_container]
@@ -29,52 +29,14 @@ module PageletRails::Concerns::Routes
29
29
  end
30
30
  end
31
31
 
32
- # Define inline single route for the following method.
33
- # It automatically adds :controller and :action names to the route
34
- #
35
- # class PageletRails::Examples::ExamplesController
36
- # pageletlet_route :get, ''
37
- # def bingo
38
- # end
39
- # end
40
- #
41
- # will generate routes
42
- # Helper: pagelets_examples_path
43
- # HTTP Verb: GET
44
- # Path: /pagelets/examples(.:format)
45
- # Controller#Action: pagelets/examples/examples#bingo
46
- #
47
- def pagelet_route *args
48
- @pagelet_route << args
49
- end
50
-
51
- def method_added method_name
52
- return unless @pagelet_route
53
- @pagelet_route.each do |args|
54
- options = args.extract_options!
55
- options[:controller] ||= self.controller_name
56
- options[:action] ||= method_name
57
-
58
- @pagelet_routes << Proc.new do
59
- scope path: options[:controller], as: options[:controller] do
60
- self.send *args, options
61
- end
62
- end
63
- end
64
-
65
- @pagelet_route = []
66
- super
67
- end
68
-
69
32
  def load_pagelet_routes! context
70
33
  @pagelet_routes.each do |proc|
71
- context.instance_eval &proc
34
+ context.instance_eval(&proc)
72
35
  end
73
36
  end
74
37
 
75
38
  def inherited subklass
76
39
  subklass.instance_variable_set(:@pagelet_routes, [])
77
- subklass.instance_variable_set(:@pagelet_route, [])
78
40
  super
79
41
  end
80
42
  end
@@ -1,3 +1,3 @@
1
1
  module PageletRails
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pagelet_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Katunin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-19 00:00:00.000000000 Z
11
+ date: 2016-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.0.0
19
+ version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: ejs
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
25
32
  - !ruby/object:Gem::Version
26
- version: 5.0.0
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: sqlite3
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -59,9 +73,9 @@ files:
59
73
  - app/controllers/pagelet_controller.rb
60
74
  - app/controllers/pagelet_proxy_controller.rb
61
75
  - app/helpers/pagelets_helper.rb
62
- - app/views/layouts/pagelet_rails/container.html.slim
63
- - app/views/layouts/pagelet_rails/inner.slim
64
- - app/views/layouts/pagelet_rails/loading_placeholder.slim
76
+ - app/views/layouts/pagelet_rails/container.html.erb
77
+ - app/views/layouts/pagelet_rails/inner.html.erb
78
+ - app/views/layouts/pagelet_rails/loading_placeholder.html.erb
65
79
  - config/routes.rb
66
80
  - lib/action_controller/action_caching.rb
67
81
  - lib/action_controller/caching/actions.rb
@@ -1,24 +0,0 @@
1
- - if pagelet_request? || pagelet_options.skip_container
2
- = content_for?(:content) ? yield(:content) : yield
3
-
4
- - else
5
- ruby:
6
- html_opts = pagelet_options.html || {}
7
- classes = html_opts.fetch(:class, '').split(' ')
8
- classes << "pagelet-#{controller_name}"
9
- classes << "pagelet-#{controller_name}-#{action_name}"
10
-
11
- html_opts[:id] ||= pagelet_default_id
12
- html_opts[:class] = classes.join(' ')
13
-
14
- html_opts['data-pagelet-container'] = true
15
-
16
- encode_data = pagelet_options.original_options.to_h.except('remote')
17
- html_opts['data-pagelet-options'] = PageletRails::Encryptor.encode(encode_data)
18
-
19
- if pagelet_options.ajax_group
20
- html_opts['data-pagelet-group'] = pagelet_options.ajax_group
21
- end
22
-
23
- div *html_opts
24
- = content_for?(:content) ? yield(:content) : yield
@@ -1 +0,0 @@
1
- = content_for?(:content) ? yield(:content) : yield