Class: ActiveInteraction::Base Abstract
- Inherits:
-
Object
- Object
- ActiveInteraction::Base
- Includes:
- ActiveModelable, Runnable
- Defined in:
- lib/active_interaction/base.rb,
lib/active_interaction/filters/date_filter.rb,
lib/active_interaction/filters/file_filter.rb,
lib/active_interaction/filters/hash_filter.rb,
lib/active_interaction/filters/time_filter.rb,
lib/active_interaction/filters/array_filter.rb,
lib/active_interaction/filters/float_filter.rb,
lib/active_interaction/filters/model_filter.rb,
lib/active_interaction/filters/string_filter.rb,
lib/active_interaction/filters/symbol_filter.rb,
lib/active_interaction/filters/boolean_filter.rb,
lib/active_interaction/filters/decimal_filter.rb,
lib/active_interaction/filters/integer_filter.rb,
lib/active_interaction/filters/date_time_filter.rb,
lib/active_interaction/filters/interface_filter.rb
Overview
Subclass and override #execute to implement a custom ActiveInteraction::Base class.
Provides interaction functionality. Subclass this to create an interaction.
Class Method Summary collapse
-
.desc(desc = nil) ⇒ String?
Get or set the description.
-
.filters ⇒ Hash{Symbol => Filter}
Get all the filters defined on this interaction.
-
.import_filters(klass, options = {}) ⇒ Hash{Symbol => Filter}
Import filters from another interaction.
- .method_missing(*args, &block) ⇒ Object
-
.run(inputs = {}) ⇒ Base
Runs validations and if there are no errors it will call #execute.
- .run!(inputs = {}) ⇒ Object
-
.transaction(enable, options = {}) ⇒ nil
Configure transactions by enabling or disabling them and setting their options.
Instance Method Summary collapse
-
#column_for_attribute(name) ⇒ FilterColumn?
Returns the column object for the named filter.
-
#compose(other, inputs = {}) ⇒ Object
Run another interaction and return its result.
-
#execute ⇒ Object
abstract
Runs the business logic associated with the interaction.
-
#initialize(inputs = {}) ⇒ Base
constructor
A new instance of Base.
- #inputs ⇒ Hash{Symbol => Object}
Methods included from Missable
Methods included from Hashable
Methods included from Runnable
#errors, #result, #result=, #valid?
Methods included from Transactable
Methods included from ActiveModelable
#i18n_scope, #new_record?, #persisted?
Constructor Details
Class Method Details
.desc(desc = nil) ⇒ String?
Get or set the description.
95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/active_interaction/base.rb', line 95 def desc(desc = nil) if desc.nil? unless instance_variable_defined?(:@_interaction_desc) @_interaction_desc = nil end else @_interaction_desc = desc end @_interaction_desc end |
.filters ⇒ Hash{Symbol => Filter}
Get all the filters defined on this interaction.
110 111 112 |
# File 'lib/active_interaction/base.rb', line 110 def filters @_interaction_filters ||= {} end |
.import_filters(klass, options = {}) ⇒ Hash{Symbol => Filter}
Import filters from another interaction.
146 147 148 149 150 151 152 153 154 155 |
# File 'lib/active_interaction/base.rb', line 146 def import_filters(klass, = {}) only = [:only] except = [:except] other_filters = klass.filters.dup other_filters.select! { |k, _| [*only].include?(k) } if only other_filters.reject! { |k, _| [*except].include?(k) } if except other_filters.values.each { |filter| initialize_filter(filter) } end |
.method_missing(*args, &block) ⇒ Object
115 116 117 118 119 120 121 |
# File 'lib/active_interaction/base.rb', line 115 def method_missing(*args, &block) super do |klass, names, | fail InvalidFilterError, 'missing attribute name' if names.empty? names.each { |name| add_filter(klass, name, , &block) } end end |
.run(inputs = {}) ⇒ Base
If the interaction inputs are valid and there are no runtime errors and execution completed successfully, Runnable#valid? will always return true.
Runs validations and if there are no errors it will call #execute.
|
|
# File 'lib/active_interaction/base.rb', line 40
|
.run!(inputs = {}) ⇒ Object
|
|
# File 'lib/active_interaction/base.rb', line 51
|
.transaction(enable, options = {}) ⇒ nil
Configure transactions by enabling or disabling them and setting their options.
|
|
# File 'lib/active_interaction/base.rb', line 61
|
Instance Method Details
#column_for_attribute(name) ⇒ FilterColumn?
Returns the column object for the named filter.
204 205 206 207 |
# File 'lib/active_interaction/base.rb', line 204 def column_for_attribute(name) filter = self.class.filters[name] FilterColumn.intern(filter.database_column_type) if filter end |
#compose(other, inputs = {}) ⇒ Object
Run another interaction and return its result. If the other interaction
fails, halt execution.
|
|
# File 'lib/active_interaction/base.rb', line 209
|
#execute ⇒ Object
Runs the business logic associated with the interaction. This method is only run when there are no validation errors. The return value is placed into Runnable#result. By default, this method is run in a transaction if ActiveRecord is available (see transaction).
|
|
# File 'lib/active_interaction/base.rb', line 218
|
#inputs ⇒ Hash{Symbol => Object}
232 233 234 235 236 |
# File 'lib/active_interaction/base.rb', line 232 def inputs self.class.filters.keys.each_with_object({}) do |name, h| h[name] = public_send(name) end end |