Class: Decidim::AuthorizationHandler

Inherits:
Form
  • Object
show all
Defined in:
decidim-verifications/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`.

Class Method Summary collapse

Instance Method Summary collapse

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 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 109

def self.handler_for(name, params = {})
  return unless name

  manifest = Decidim.authorization_handlers.find { |m| m.name == name }
  return unless manifest

  manifest.form.constantize.from_params(params || {})
end

.handler_nameObject

A serialized version of the handler's name.

Returns a String.


88
89
90
# File 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 88

def self.handler_name
  name.demodulize.underscore
end

Instance Method Details

#form_attributesObject

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 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 36

def form_attributes
  attributes.except(:id, :user).keys
end

#handler_nameObject

Same as the class method but accessible from the instance.

Returns a String.


95
96
97
# File 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 95

def handler_name
  self.class.handler_name
end

#metadataObject

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 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 64

def 
  {}
end

#to_partial_pathObject

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 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 50

def to_partial_path
  "#{handler_name.sub!(/_handler$/, "")}/form"
end

#unique_idObject

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 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 28

def unique_id
  nil
end

#verification_attachmentObject

An optional attachment to help out with verification.


81
82
83
# File 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 81

def verification_attachment
  nil
end

#verification_metadataObject

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 'decidim-verifications/app/services/decidim/authorization_handler.rb', line 74

def 
  {}
end