Module: Fend::Plugins::Dependencies
- Defined in:
- lib/fend/plugins/dependencies.rb
Overview
‘dependencies` plugin enables you to register validation dependencies and later resolve them so they would be available in validation block
plugin :dependencies
## Registering dependencies
Dependencies can be registered when plugin is loaded:
plugin :dependencies, user_class: User
**Global dependencies** can be registered by loading the plugin directly in ‘Fend` class:
require "address_checker"
Fend.plugin :dependencies, address_checker: AddressChecker.new
Now, all ‘Fend` subclasses will be able to resolve `address_checker`
## Resolving dependencies
To resolve dependencies, ‘:inject` option needs to be provided to the `validate` method, with a list of keys representing dependency names:
class UserValidation < Fend
plugin :dependencies, user_model: User
validate(inject: [:user_model]) do |i, user_model|
user_model #=> User
address_checker #=> #<AddressChecker ...>
end
def initialize(address_checker)
@address_checker = address_checker
end
def address_checker
@address_checker
end
end
## Overriding dependencies
To override global dependency, just load the plugin again in a subclass and specify new dependecy value.
plugin :dependencies, user_model: SpecialUser
## Example usage
Here’s an example of email uniqueness validation:
validate(inject: [:user_model]) do |i, user_model|
i.params(:email) do |email|
email.add_error("must be unique") if user_model.exists?(email: email.value)
end
end
Defined Under Namespace
Modules: ClassMethods, InstanceMethods
Class Method Summary collapse
Class Method Details
.configure(validation, opts = {}) ⇒ Object
64 65 66 |
# File 'lib/fend/plugins/dependencies.rb', line 64 def self.configure(validation, opts = {}) validation.opts[:dependencies] = (validation.opts[:dependencies] || {}).merge(opts) end |