Sha256: 96a9c4492a2dd5e55e52b7d9b0806dc455906718b4c0583e4f671d3e0b4c4053

Contents?: true

Size: 1.87 KB

Versions: 13

Compression:

Stored size: 1.87 KB

Contents

# frozen_string_literal: true

module LunaPark
  module Extensions
    # @example
    #   class MyForm
    #     include LunaPark::Extensions::Validatable
    #
    #     validator MyValidator # must respond_to #errors, #success?, #valid_params, .validate
    #
    #     def initialize(params)
    #       @params = params
    #     end
    #
    #     def data
    #       OpenStruct.new(valid_params) if valid?
    #     end
    #
    #     private
    #
    #     attr_reader :params # define abstract method
    #   end
    #
    #   form = MyForm.new(foo: 'Foo')
    #   form.valid?            # => false
    #   form.validation_errors # => { bar: ['is missing'] }
    #   form.data              # => nil
    #
    #   form = MyForm.new(foo: 'Foo', bar: 'Bar')
    #   form.valid?            # => true
    #   form.data              # => #<OpenStruct foo="Foo" bar="Bar" }
    module Validatable
      def self.included(klass)
        klass.include InstanceMethods
        klass.extend  ClassMethods
        super
      end

      module InstanceMethods
        def validation_errors_array
          validation ? validation.errors_array : {}
        end

        def validation_errors_tree
          validation ? validation.errors_tree : []
        end

        def validation_errors
          validation ? validation.errors : {}
        end

        def valid?
          validation ? validation.success? : true
        end

        private

        def valid_params
          validation ? validation.valid_params : params
        end

        def validation
          @validation ||= self.class.validator.validate(params)
        end

        # :nocov:
        def params
          raise Errors::AbstractMethod
        end
        # :nocov:
      end

      module ClassMethods
        def validator(klass = nil)
          klass.nil? ? @validator : @validator = klass
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
luna_park-0.13.2 lib/luna_park/extensions/validatable.rb
luna_park-0.13.1 lib/luna_park/extensions/validatable.rb
luna_park-0.13.0 lib/luna_park/extensions/validatable.rb
luna_park-0.12.1 lib/luna_park/extensions/validatable.rb
luna_park-0.12.0 lib/luna_park/extensions/validatable.rb
luna_park-0.11.7 lib/luna_park/extensions/validatable.rb
luna_park-0.11.6 lib/luna_park/extensions/validatable.rb
luna_park-0.11.5 lib/luna_park/extensions/validatable.rb
luna_park-0.11.4 lib/luna_park/extensions/validatable.rb
luna_park-0.11.3 lib/luna_park/extensions/validatable.rb
luna_park-0.11.2 lib/luna_park/extensions/validatable.rb
luna_park-0.11.1 lib/luna_park/extensions/validatable.rb
luna_park-0.11.0 lib/luna_park/extensions/validatable.rb