lib/vedeu/repositories/repository.rb in vedeu-0.7.2 vs lib/vedeu/repositories/repository.rb in vedeu-0.7.3
- old
+ new
@@ -154,24 +154,26 @@
alias_method :delete, :remove
# Stores the model instance by name in the repository of the
# model.
#
+ # @note If a block is given, store the model, return the model
+ # after yielding.
# @param model [void] A model instance.
# @raise [Vedeu::Error::MissingRequired] When the name attribute
# is not defined.
# @return [void] The model instance which was stored.
- def store(model)
- unless present?(model.name)
- fail Vedeu::Error::MissingRequired,
- "Cannot store model '#{model.class}' " \
- 'without a name attribute.'.freeze
- end
+ def store(model, &block)
+ valid_model?(model)
log_store(model)
storage[model.name] = model
+
+ yield if block_given?
+
+ model
end
alias_method :register, :store
alias_method :add, :store
private
@@ -181,9 +183,18 @@
def log_store(model)
type = registered?(model.name) ? :update : :create
Vedeu.log(type: type,
message: "#{model.class.name}: '#{model.name}'".freeze)
+ end
+
+ #
+ # @param model [void] A model instance.
+ # @return [Boolean]
+ def valid_model?(model)
+ fail Vedeu::Error::MissingRequired,
+ "Cannot store model '#{model.class}' without a name " \
+ 'attribute.'.freeze unless present?(model.name)
end
end # Repository
end # Repositories