Class: Unpoly::Rails::Inspector
- Inherits:
-
Object
- Object
- Unpoly::Rails::Inspector
- Defined in:
- lib/unpoly/rails/inspector.rb
Overview
This object allows the server to inspect the current request for Unpoly-related concerns such as "is this a page fragment update?".
Available through the #up method in all controllers, helpers and views.
Instance Method Summary collapse
-
#initialize(controller) ⇒ Inspector
constructor
A new instance of Inspector.
-
#target ⇒ Object
If the current request is a fragment update, this returns the CSS selector of the page fragment that should be updated.
-
#target?(tested_target) ⇒ Boolean
Tests whether the given CSS selector is targeted by the current fragment update.
-
#title=(new_title) ⇒ Object
Forces Unpoly to use the given string as the document title when processing this response.
-
#up? ⇒ Boolean
(also: #unpoly?)
Returns whether the current request is an page fragment update triggered by an Unpoly frontend.
-
#validate? ⇒ Boolean
Returns whether the current form submission should be validated (and not be saved to the database).
-
#validate_name ⇒ Object
If the current form submission is a validation, this returns the name attribute of the form field that has triggered the validation.
Constructor Details
#initialize(controller) ⇒ Inspector
Returns a new instance of Inspector.
10 11 12 |
# File 'lib/unpoly/rails/inspector.rb', line 10 def initialize(controller) @controller = controller end |
Instance Method Details
#target ⇒ Object
If the current request is a fragment update, this returns the CSS selector of the page fragment that should be updated.
The Unpoly frontend will expect an HTML response containing an element that matches this selector. If no such element is found, an error is shown to the user.
Server-side code is free to optimize its response by only returning HTML that matches this selector.
34 35 36 |
# File 'lib/unpoly/rails/inspector.rb', line 34 def target request.headers['X-Up-Target'] end |
#target?(tested_target) ⇒ Boolean
Tests whether the given CSS selector is targeted by the current fragment update.
Note that the matching logic is very simplistic and does not actually know
how your page layout is structured. It will return true if
the tested selector and the requested CSS selector matches exactly, or if the
requested selector is body or html.
Always returns true if the current request is not an Unpoly fragment update.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/unpoly/rails/inspector.rb', line 47 def target?(tested_target) if up? actual_target = target if actual_target == tested_target true elsif actual_target == 'html' true elsif actual_target == 'body' not ['head', 'title', 'meta'].include?(tested_target) else false end else true end end |
#title=(new_title) ⇒ Object
Forces Unpoly to use the given string as the document title when processing this response.
This is useful when you skip rendering the <head> in an Unpoly request.
84 85 86 |
# File 'lib/unpoly/rails/inspector.rb', line 84 def title=(new_title) response.headers['X-Up-Title'] = new_title end |
#up? ⇒ Boolean Also known as: unpoly?
Returns whether the current request is an page fragment update triggered by an Unpoly frontend.
18 19 20 |
# File 'lib/unpoly/rails/inspector.rb', line 18 def up? target.present? end |
#validate? ⇒ Boolean
Returns whether the current form submission should be validated (and not be saved to the database).
67 68 69 |
# File 'lib/unpoly/rails/inspector.rb', line 67 def validate? validate_name.present? end |
#validate_name ⇒ Object
If the current form submission is a validation, this returns the name attribute of the form field that has triggered the validation.
75 76 77 |
# File 'lib/unpoly/rails/inspector.rb', line 75 def validate_name request.headers['X-Up-Validate'] end |