pagelet_rails 0.1.1 → 0.1.2

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: 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