Class: Decidim::AuthorizationHandler
- Inherits:
-
Form
- Object
- Form
- Decidim::AuthorizationHandler
- Defined in:
- app/services/decidim/authorization_handler.rb
Overview
This is the base class for authorization handlers, all implementations should inherit from it. Each AuthorizationHandler is a form that will be used to check if the authorization is valid or not. When it is valid a new authorization will be created for the user.
Feel free to use validations to assert fields against a remote API, local database, or whatever.
It also sets two default attributes, ‘user` and `handler_name`.
Direct Known Subclasses
Verifications::CsvCensus::CensusForm, Verifications::IdDocuments::InformationForm, Verifications::PostalLetter::AddressForm, Verifications::PostalLetter::ConfirmationForm, Verifications::PostalLetter::PostageForm, Verifications::Sms::ConfirmationForm, Verifications::Sms::MobilePhoneForm
Class Method Summary collapse
-
.handler_for(name, params = {}) ⇒ Object
Finds a handler class from a String.
-
.handler_name ⇒ Object
A serialized version of the handler’s name.
Instance Method Summary collapse
-
#form_attributes ⇒ Object
THe attributes of the handler that should be exposed as form input when rendering the handler in a form.
-
#handler_name ⇒ Object
Same as the class method but accessible from the instance.
-
#metadata ⇒ Object
Any data that the developer would like to inject to the ‘metadata` field of an authorization when it’s created.
-
#to_partial_path ⇒ Object
The String partial path so Rails can render the handler as a form.
-
#unique_id ⇒ Object
A unique ID to be implemented by the authorization handler that ensures no duplicates are created.
-
#verification_attachment ⇒ Object
An optional attachment to help out with verification.
-
#verification_metadata ⇒ Object
Any data to be injected in the ‘verification_metadata` field of an authorization when it’s created.
Class Method Details
.handler_for(name, params = {}) ⇒ Object
Finds a handler class from a String. This is necessary when processing the form data. It will only look for valid handlers that have also been configured in ‘Decidim.authorization_handlers`.
name - The String name of the class to find, usually in the same shape as the one returned by ‘handler_name`. params - An optional Hash with params to initialize the handler.
Returns an AuthorizationHandler descendant. Returns nil when no handlers could be found.
109 110 111 112 113 114 115 116 |
# File 'app/services/decidim/authorization_handler.rb', line 109 def self.handler_for(name, params = {}) return unless name manifest = Decidim..find { |m| m.name == name } return unless manifest manifest.form.constantize.from_params(params || {}) end |
.handler_name ⇒ Object
A serialized version of the handler’s name.
Returns a String.
88 89 90 |
# File 'app/services/decidim/authorization_handler.rb', line 88 def self.handler_name name.demodulize.underscore end |
Instance Method Details
#form_attributes ⇒ Object
THe attributes of the handler that should be exposed as form input when rendering the handler in a form.
Returns an Array of Strings.
36 37 38 |
# File 'app/services/decidim/authorization_handler.rb', line 36 def form_attributes attributes.except(:id, :user).keys end |
#handler_name ⇒ Object
Same as the class method but accessible from the instance.
Returns a String.
95 96 97 |
# File 'app/services/decidim/authorization_handler.rb', line 95 def handler_name self.class.handler_name end |
#metadata ⇒ Object
Any data that the developer would like to inject to the ‘metadata` field of an authorization when it’s created. Can be useful if some of the params the user sent with the authorization form want to be persisted for future use.
As a convention, an ‘extras’ key can be used to store information not directly related with authorization. Thus, when rendering previous verification data, on renewal, ‘extras’ is not rendered to the user.
Returns a Hash.
64 65 66 |
# File 'app/services/decidim/authorization_handler.rb', line 64 def {} end |
#to_partial_path ⇒ Object
The String partial path so Rails can render the handler as a form. This is useful if you want to have a custom view to render the form instead of the default view.
Example:
A handler named Decidim::CensusHandler would look for its partial in:
decidim/census/form
Returns a String.
50 51 52 |
# File 'app/services/decidim/authorization_handler.rb', line 50 def to_partial_path "#{handler_name.sub!(/_handler$/, "")}/form" end |
#unique_id ⇒ Object
A unique ID to be implemented by the authorization handler that ensures no duplicates are created. This uniqueness check will be skipped if unique_id returns nil.
28 29 30 |
# File 'app/services/decidim/authorization_handler.rb', line 28 def unique_id nil end |
#verification_attachment ⇒ Object
An optional attachment to help out with verification.
81 82 83 |
# File 'app/services/decidim/authorization_handler.rb', line 81 def nil end |
#verification_metadata ⇒ Object
Any data to be injected in the ‘verification_metadata` field of an authorization when it’s created. This data will be used for multi-step verificaton workflows in order to confirm the authorization.
Returns a Hash.
74 75 76 |
# File 'app/services/decidim/authorization_handler.rb', line 74 def {} end |