README.md in metaractor-0.5.0 vs README.md in metaractor-1.1.0
- old
+ new
@@ -36,22 +36,79 @@
end
# private
# delegate :user, to: context
end
+
+result = HighFiveUser.call # not passing user or user_id
+result.failure?
+# => true
+result.valid?
+# => false
+result.errors
+# => ["Required parameters: (user_id or user)"]
```
See Interactor's [README](https://github.com/collectiveidea/interactor/blob/master/README.md) for more information.
+### Configuration
+Metaractor is meant to be extensible (hence the 'meta'). You can add additional modules in the following way:
+
+```ruby
+# This is an example from Outstand's production app to add some sidekiq magic.
+# Feel free to place this in start up code or a Rails initializer.
+Metaractor.configure do |config|
+ config.prepend_module Metaractor::SidekiqCallbacks
+ config.include_module Metaractor::SidekiqBatch
+end
+```
+
+### Required Parameters
+Metaractor supports complex required parameter statements and you can chain these together in any manner using `and`, `or`, and `xor`.
+```ruby
+required and: [:token, or: [:recipient_id, :recipient] ]
+```
+
+### Optional Parameters
+As optional parameters have no enforcement, they are merely advisory.
+```ruby
+optional :enable_logging
+```
+
+### Custom Validation
+Metaractor supports doing custom validation before any user supplied before_hooks run.
+```ruby
+validate_parameters do
+ if context.foo == :bar
+ require_parameter :bar, message: 'optional missing parameter message'
+ end
+
+ unless context.user.admin?
+ add_parameter_error param: :user, message: 'User must be an admin'
+ end
+end
+```
+
+If you need to require a parameter from a `before_hook` for any reason, use the bang version of the method:
+```ruby
+before do
+ # Be careful with this approach as some user code may run before the parameter validation
+ require_parameter! :awesome if context.mode == :awesome
+end
+```
+
+### Further Reading
+For more examples of all of the above approaches, please see the specs.
+
## Development
- `docker build -t outstand/metaractor .`
- `docker run -it --rm -v $(pwd):/metaractor outstand/metaractor` to run specs
To release a new version:
- Update the version number in `version.rb` and commit the result.
- `docker build -t outstand/metaractor .`
-- `docker run -it --rm -v ~/.gitconfig:/root/.gitconfig -v ~/.gitconfig.user:/root/.gitconfig.user -v ~/.ssh/id_rsa:/root/.ssh/id_rsa -v ~/.gem:/root/.gem outstand/metaractor rake release`
+- `docker run -it --rm -v ~/.gitconfig:/home/metaractor/.gitconfig -v ~/.gitconfig.user:/home/metaractor/.gitconfig.user -v ~/.ssh/id_rsa:/home/metaractor/.ssh/id_rsa -v ~/.gem:/home/metaractor/.gem outstand/metaractor rake release`
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/outstand/metaractor.