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.



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

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.



82
83
84
# File 'app/services/decidim/authorization_handler.rb', line 82

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.



34
35
36
# File 'app/services/decidim/authorization_handler.rb', line 34

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

#handler_nameObject

Same as the class method but accessible from the instance.

Returns a String.



89
90
91
# File 'app/services/decidim/authorization_handler.rb', line 89

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.



58
59
60
# File 'app/services/decidim/authorization_handler.rb', line 58

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.



48
49
50
# File 'app/services/decidim/authorization_handler.rb', line 48

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.



26
27
28
# File 'app/services/decidim/authorization_handler.rb', line 26

def unique_id
  nil
end

#verification_attachmentObject

An optional attachment to help out with verification.



75
76
77
# File 'app/services/decidim/authorization_handler.rb', line 75

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.



68
69
70
# File 'app/services/decidim/authorization_handler.rb', line 68

def 
  {}
end