Sha256: 054b70928f152df17f769a2011ded641d800f28a57269772b791b6a94c4c150f

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

# encoding: utf-8
require "active_model"

module ServiceObjects

  module Helpers

    # Features for service attributes validation
    #
    # @note
    #   A target class should **include** the module
    #
    # @see http://apidock.com/rails/v4.1.8/ActiveModel/Validations
    #   ActiveModel::Validations
    module Validations

      # @!method valid?
      # Runs validations and checks if the object is valid
      # @return [Boolean]

      # Raises <tt>ServiceObjects::Invalid</tt> when {#valid?} method fails
      #
      # Mutates the current object by populating its messages
      # with errors, added by {#valid?}
      #
      # @raise [ServiceObjects::Invalid]
      #   when a validation fails
      #
      # @return [self] (not changed)
      #   when a validation passes
      def validate!
        return self if valid?
        __errors__.each { |text| add_message text: text, type: "error" }
        fail Invalid.new(self)
      end

      private

      # @!parse include ServiceObjects::Helpers::Messages
      # @!parse include ActiveModel::Validations
      def self.included(klass)
        klass.include ActiveModel::Validations, Messages
        super
      end

      def __errors__
        errors.messages.values.flatten
      end

    end # module Validations

  end # module Helpers

end # module ServiceObjects

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
service_objects-0.1.0 lib/service_objects/helpers/validations.rb
service_objects-0.0.2 lib/service_objects/helpers/validations.rb
service_objects-0.0.1 lib/service_objects/helpers/validations.rb