Class: Decidim::AuthorizationHandler

Inherits:
Form
  • Object
show all
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`.

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.



105
106
107
108
109
110
111
112
# File 'app/services/decidim/authorization_handler.rb', line 105

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.



84
85
86
# File 'app/services/decidim/authorization_handler.rb', line 84

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 '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.



91
92
93
# File 'app/services/decidim/authorization_handler.rb', line 91

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.

Returns a Hash.



60
61
62
# File 'app/services/decidim/authorization_handler.rb', line 60

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

def unique_id
  nil
end

#verification_attachmentObject

An optional attachment to help out with verification.



77
78
79
# File 'app/services/decidim/authorization_handler.rb', line 77

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.



70
71
72
# File 'app/services/decidim/authorization_handler.rb', line 70

def 
  {}
end