openstreetmap-actionpack-page_caching 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e69b08cb6ea991488bfaa2cc9da8e8b622b8274ea783dd2691dba7c6095ec98b
4
+ data.tar.gz: b0a314a0c11879641dc509c2bf14b619a61a35e7b2981035e382f3af102fe882
5
+ SHA512:
6
+ metadata.gz: e612b361bcdd0dc7581ae85a9a98b8258cc1716d5a6925a0260657c80b2def7f49fe22420914c38fb3a4b8d6d9eb6cb294f43a417ffa9395e64b20e7e396da6d
7
+ data.tar.gz: 2e0ad0654a516f12652870838e75c11d7d84d129def2ea94c3f1e8a7a38b53d7a87fe3589ef9ac81c56a7b3f1ada2762cb689163aa0d5840ef42576a0f0f18ac
data/.codeclimate.yml ADDED
@@ -0,0 +1,7 @@
1
+ engines:
2
+ rubocop:
3
+ enabled: true
4
+
5
+ ratings:
6
+ paths:
7
+ - "**.rb"
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ .ruby-version
2
+ Gemfile.lock
3
+ gemfiles/*.lock
4
+ pkg/*
5
+ test/tmp
data/.rubocop.yml ADDED
@@ -0,0 +1,116 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.2
3
+ # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
4
+ # to ignore them, so only the ones explicitly set in this file are enabled.
5
+ DisabledByDefault: true
6
+
7
+ # Prefer &&/|| over and/or.
8
+ Style/AndOr:
9
+ Enabled: true
10
+
11
+ # Do not use braces for hash literals when they are the last argument of a
12
+ # method call.
13
+ Style/BracesAroundHashParameters:
14
+ Enabled: true
15
+
16
+ # Align `when` with `case`.
17
+ Style/CaseIndentation:
18
+ Enabled: true
19
+
20
+ # Align comments with method definitions.
21
+ Style/CommentIndentation:
22
+ Enabled: true
23
+
24
+ # No extra empty lines.
25
+ Style/EmptyLines:
26
+ Enabled: true
27
+
28
+ # In a regular class definition, no empty lines around the body.
29
+ Style/EmptyLinesAroundClassBody:
30
+ Enabled: true
31
+
32
+ # In a regular module definition, no empty lines around the body.
33
+ Style/EmptyLinesAroundModuleBody:
34
+ Enabled: true
35
+
36
+ # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
37
+ Style/HashSyntax:
38
+ Enabled: true
39
+
40
+ # Method definitions after `private` or `protected` isolated calls need one
41
+ # extra level of indentation.
42
+ Style/IndentationConsistency:
43
+ Enabled: true
44
+ EnforcedStyle: rails
45
+
46
+ # Two spaces, no tabs (for indentation).
47
+ Style/IndentationWidth:
48
+ Enabled: true
49
+
50
+ Style/SpaceAfterColon:
51
+ Enabled: true
52
+
53
+ Style/SpaceAfterComma:
54
+ Enabled: true
55
+
56
+ Style/SpaceAroundEqualsInParameterDefault:
57
+ Enabled: true
58
+
59
+ Style/SpaceAroundKeyword:
60
+ Enabled: true
61
+
62
+ Style/SpaceAroundOperators:
63
+ Enabled: true
64
+
65
+ Style/SpaceBeforeFirstArg:
66
+ Enabled: true
67
+
68
+ # Defining a method with parameters needs parentheses.
69
+ Style/MethodDefParentheses:
70
+ Enabled: true
71
+
72
+ # Use `foo {}` not `foo{}`.
73
+ Style/SpaceBeforeBlockBraces:
74
+ Enabled: true
75
+
76
+ # Use `foo { bar }` not `foo {bar}`.
77
+ Style/SpaceInsideBlockBraces:
78
+ Enabled: true
79
+
80
+ # Use `{ a: 1 }` not `{a:1}`.
81
+ Style/SpaceInsideHashLiteralBraces:
82
+ Enabled: true
83
+
84
+ Style/SpaceInsideParens:
85
+ Enabled: true
86
+
87
+ # Check quotes usage according to lint rule below.
88
+ Style/StringLiterals:
89
+ Enabled: true
90
+ EnforcedStyle: double_quotes
91
+
92
+ # Detect hard tabs, no hard tabs.
93
+ Style/Tab:
94
+ Enabled: true
95
+
96
+ # Blank lines should not have any spaces.
97
+ Style/TrailingBlankLines:
98
+ Enabled: true
99
+
100
+ # No trailing whitespace.
101
+ Style/TrailingWhitespace:
102
+ Enabled: true
103
+
104
+ # Use quotes for string literals when they are enough.
105
+ Style/UnneededPercentQ:
106
+ Enabled: true
107
+
108
+ # Align `end` with the matching keyword or starting expression except for
109
+ # assignments, where it should be aligned with the LHS.
110
+ Lint/EndAlignment:
111
+ Enabled: true
112
+ AlignWith: variable
113
+
114
+ # Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
115
+ Lint/RequireParentheses:
116
+ Enabled: true
data/.travis.yml ADDED
@@ -0,0 +1,43 @@
1
+ language: ruby
2
+ sudo: false
3
+
4
+ cache:
5
+ bundler: true
6
+
7
+ before_install:
8
+ - gem install bundler
9
+
10
+ rvm:
11
+ - 2.4.6
12
+ - 2.5.5
13
+ - 2.6.3
14
+
15
+ gemfile:
16
+ - Gemfile
17
+ - gemfiles/Gemfile-5-0-stable
18
+ - gemfiles/Gemfile-5-1-stable
19
+ - gemfiles/Gemfile-5-2-stable
20
+ - gemfiles/Gemfile-6-0-stable
21
+ - gemfiles/Gemfile-edge
22
+
23
+ matrix:
24
+ allow_failures:
25
+ - gemfile: gemfiles/Gemfile-edge
26
+ exclude:
27
+ - rvm: 2.4.6
28
+ gemfile: gemfiles/Gemfile-6-0-stable
29
+ - rvm: 2.4.6
30
+ gemfile: gemfiles/Gemfile-edge
31
+
32
+ notifications:
33
+ email: false
34
+ irc:
35
+ on_success: change
36
+ on_failure: always
37
+ channels:
38
+ - "irc.freenode.org#rails-contrib"
39
+ campfire:
40
+ on_success: change
41
+ on_failure: always
42
+ rooms:
43
+ - secure: "eRCx+FMvH50pmLu0GZTF7NN+2X+CesgodYUlHvCr5EXQ0ZO/YUmeW8vAh/N8\njSrLWYpk/4P/JA63JGWsvFor/zpkTnfwzX3LWgw04GV0V3T9jsn9CD2Coiu6\nFll5u4fUCUwpfbB4RlCkjvFdQmW+F9mmbRGMCDO5CmuPHOyyPH0="
data/CHANGELOG.md ADDED
@@ -0,0 +1,47 @@
1
+ ## 1.1.1 (September 25, 2018)
2
+
3
+ * Fixes handling of several forward slashes as root path.
4
+
5
+ *Xavier Noria*
6
+
7
+ * Documentation overhaul.
8
+
9
+ *Xavier Noria*
10
+
11
+
12
+ ## 1.1.0 (January 23, 2017)
13
+
14
+ * Support dynamic `page_cache_directory` using a Proc, Symbol or callable
15
+
16
+ *Andrew White*
17
+
18
+ * Support instance level setting of `page_cache_directory`
19
+
20
+ *Andrew White*
21
+
22
+ * Add support for Rails 5.0 and master
23
+
24
+ *Andrew White*
25
+
26
+
27
+ ## 1.0.2 (November 15, 2013)
28
+
29
+ * Fix load order problem with other gems.
30
+
31
+ *Rafael Mendonça França*
32
+
33
+
34
+ ## 1.0.1 (October 24, 2013)
35
+
36
+ * Add Railtie to set `page_cache_directory` by default to `public` folder.
37
+
38
+ Fixes #5.
39
+
40
+ *Žiga Vidic*
41
+
42
+
43
+ ## 1.0.0 (February 27, 2013)
44
+
45
+ * Extract Action Pack - Action Caching from Rails core.
46
+
47
+ *Francesco Rodriguez*, *Rafael Mendonça França*, *Michiel Sikkes*
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "rails"
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 David Heinemeier Hansson
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,215 @@
1
+ # actionpack-page_caching
2
+
3
+ Static page caching for Action Pack (removed from core in Rails 4.0).
4
+
5
+ ## Introduction
6
+
7
+ Page caching is an approach to caching in which response bodies are stored in
8
+ files that the web server can serve directly:
9
+
10
+ 1. A request to endpoint _E_ arrives.
11
+ 2. Its response is calculated and stored in a file _F_.
12
+ 3. Next time _E_ is requested, the web server sends _F_ directly.
13
+
14
+ That applies only to GET or HEAD requests whose response code is 200, the rest
15
+ are ignored.
16
+
17
+ Unlike caching proxies or other more sophisticated setups, page caching results
18
+ in a dramatic speed up while being dead simple at the same time. Awesome
19
+ cost/benefit.
20
+
21
+ The reason for such performance boost is that cached endpoints are
22
+ short-circuited by the web server, which is very efficient at serving static
23
+ files. Requests to cached endpoints do not even reach your Rails application.
24
+
25
+ This technique, however, is only suitable for pages that do not need to go
26
+ through your Rails stack, precisely. For example, content management systems
27
+ like wikis have typically many pages that are a great fit for this approach, but
28
+ account-based systems where people log in and manipulate their own data are
29
+ often less likely candidates. As a use case you can check, [Rails
30
+ Contributors](https://contributors.rubyonrails.org/) makes heavy use of page
31
+ caching. Its source code is [here](https://github.com/rails/rails-contributors).
32
+
33
+ It is not all or nothing, though, in HTML cached pages JavaScript can still
34
+ tweak details here and there dynamically as a trade-off.
35
+
36
+ ## Installation
37
+
38
+ Add this line to your application's `Gemfile`:
39
+
40
+ ``` ruby
41
+ gem "actionpack-page_caching"
42
+ ```
43
+
44
+ And then execute:
45
+
46
+ ```
47
+ $ bundle
48
+ ```
49
+
50
+ ## Usage
51
+
52
+ ### Enable Caching
53
+
54
+ Page caching needs caching enabled:
55
+
56
+ ```ruby
57
+ config.action_controller.perform_caching = true
58
+ ```
59
+
60
+ That goes typically in `config/environments/production.rb`, but you can activate
61
+ that flag in any mode.
62
+
63
+ Since Rails 5 there is a special toggler to easily enable/disable caching in
64
+ `development` mode without editing its configuration file. Just execute
65
+
66
+ ```
67
+ $ bin/rails dev:cache
68
+ ```
69
+
70
+ to enable/disable caching in `development` mode.
71
+
72
+ ### Configure the Cache Directory
73
+
74
+ #### Default Cache Directory
75
+
76
+ By default, files are stored below the `public` directory of your Rails
77
+ application, with a path that matches the one in the URL.
78
+
79
+ For example, a page-cached request to `/posts/what-is-new-in-rails-6` would be
80
+ stored by default in the file `public/posts/what-is-new-in-rails-6.html`, and
81
+ the web server would be configured to check that path in the file system before
82
+ falling back to Rails. More on this later.
83
+
84
+ #### Custom Cache Directory
85
+
86
+ The default page caching directory can be overridden:
87
+
88
+ ``` ruby
89
+ config.action_controller.page_cache_directory = Rails.root.join("public", "cached_pages")
90
+ ```
91
+
92
+ There is no need to ensure the directory exists when the application boots,
93
+ whenever a page has to be cached, the page cache directory is created if needed.
94
+
95
+ #### Custom Cache Directory per Controller
96
+
97
+ The globally configured cache directory, default or custom, can be overridden in
98
+ each controller. There are three ways of doing this.
99
+
100
+ With a lambda:
101
+
102
+ ``` ruby
103
+ class WeblogController < ApplicationController
104
+ self.page_cache_directory = -> {
105
+ Rails.root.join("public", request.domain)
106
+ }
107
+ end
108
+ ```
109
+
110
+ a symbol:
111
+
112
+ ``` ruby
113
+ class WeblogController < ApplicationController
114
+ self.page_cache_directory = :domain_cache_directory
115
+
116
+ private
117
+ def domain_cache_directory
118
+ Rails.root.join("public", request.domain)
119
+ end
120
+ end
121
+ ```
122
+
123
+ or a callable object:
124
+
125
+ ``` ruby
126
+ class DomainCacheDirectory
127
+ def self.call(request)
128
+ Rails.root.join("public", request.domain)
129
+ end
130
+ end
131
+
132
+ class WeblogController < ApplicationController
133
+ self.page_cache_directory = DomainCacheDirectory
134
+ end
135
+ ```
136
+
137
+ Intermediate directories are created as needed also in this case.
138
+
139
+ ### Specify Actions to be Cached
140
+
141
+ Specifying which actions have to be cached is done through the `caches_page` class method:
142
+
143
+ ``` ruby
144
+ class WeblogController < ActionController::Base
145
+ caches_page :show, :new
146
+ end
147
+ ```
148
+
149
+ ### Configure The Web Server
150
+
151
+ The [wiki](https://github.com/rails/actionpack-page_caching/wiki) of the project
152
+ has some examples of web server configuration.
153
+
154
+ ### Cache Expiration
155
+
156
+ Expiration of the cache is handled by deleting the cached files, which results
157
+ in a lazy regeneration approach in which the content is stored again as cached
158
+ endpoints are hit.
159
+
160
+ #### Full Cache Expiration
161
+
162
+ If the cache is stored in a separate directory like `public/cached_pages`, you
163
+ can easily expire the whole thing by removing said directory.
164
+
165
+ Removing a directory recursively with something like `rm -rf` is unreliable
166
+ because that operation is not atomic and can mess up with concurrent page cache
167
+ generation.
168
+
169
+ In POSIX systems moving a file is atomic, so the recommended approach would be
170
+ to move the directory first out of the way, and then recursively delete that
171
+ one. Something like
172
+
173
+ ```bash
174
+ #!/bin/bash
175
+
176
+ tmp=public/cached_pages-$(date +%s)
177
+ mv public/cached_pages $tmp
178
+ rm -rf $tmp
179
+ ```
180
+
181
+ As noted before, the page cache directory is created if it does not exist, so
182
+ moving the directory is enough to have a clean cache, no need to recreate.
183
+
184
+ #### Fine-grained Cache Expiration
185
+
186
+ The API for doing so mimics the options from `url_for` and friends:
187
+
188
+ ``` ruby
189
+ class WeblogController < ActionController::Base
190
+ def update
191
+ List.update(params[:list][:id], params[:list])
192
+ expire_page action: "show", id: params[:list][:id]
193
+ redirect_to action: "show", id: params[:list][:id]
194
+ end
195
+ end
196
+ ```
197
+
198
+ Additionally, you can expire caches using
199
+ [Sweepers](https://github.com/rails/rails-observers#action-controller-sweeper)
200
+ that act on changes in the model to determine when a cache is supposed to be
201
+ expired.
202
+
203
+ Contributing
204
+ ------------
205
+
206
+ 1. Fork it.
207
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
208
+ 3. Commit your changes (`git commit -am 'Add some feature'`).
209
+ 4. Push to the branch (`git push origin my-new-feature`).
210
+ 5. Create a new Pull Request.
211
+
212
+ Code Status
213
+ -----------
214
+
215
+ * [![Build Status](https://travis-ci.org/rails/actionpack-page_caching.svg?branch=master)](https://travis-ci.org/rails/actionpack-page_caching)