Sha256: 5e50b596cc063006a91d437f3eeaa6407bb9ef03b18406c9d8169ad9f2d929c5

Contents?: true

Size: 1.32 KB

Versions: 20

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

module Vedeu

  module Repositories

    # Some classes expect a certain set of attributes when
    # initialized, this module uses the #defaults method of the class
    # to provide missing attribute keys (and values).
    #
    # @api private
    #
    module Defaults

      include Vedeu::Common

      # Returns a new instance of the class including this module.
      #
      # @note
      #   If a particular key is missing from the attributes
      #   parameter, then it is added with the respective value from
      #   #defaults.
      #
      # @param attributes [Hash]
      # @return [void] A new instance of the class including this
      #   module.
      def initialize(attributes = {})
        defaults.merge!(validate(attributes)).each do |key, value|
          instance_variable_set("@#{key}", value || defaults.fetch(key))
        end
      end

      private

      # @macro defaults_method
      def defaults
        {}
      end

      # @param attributes [Hash]
      # @macro raise_invalid_syntax
      # @return [Hash]
      def validate(attributes)
        raise Vedeu::Error::InvalidSyntax,
              'Argument :attributes is not a Hash.' unless hash?(attributes)

        attributes.keep_if { |key, _| defaults.key?(key) }
      end

    end # Defaults

  end # Repositories

end # Vedeu

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
vedeu-0.8.32 lib/vedeu/repositories/defaults.rb
vedeu-0.8.31 lib/vedeu/repositories/defaults.rb
vedeu-0.8.30 lib/vedeu/repositories/defaults.rb
vedeu-0.8.29 lib/vedeu/repositories/defaults.rb
vedeu-0.8.28 lib/vedeu/repositories/defaults.rb
vedeu-0.8.27 lib/vedeu/repositories/defaults.rb
vedeu-0.8.26 lib/vedeu/repositories/defaults.rb
vedeu-0.8.25 lib/vedeu/repositories/defaults.rb
vedeu-0.8.24 lib/vedeu/repositories/defaults.rb
vedeu-0.8.23 lib/vedeu/repositories/defaults.rb
vedeu-0.8.22 lib/vedeu/repositories/defaults.rb
vedeu-0.8.21 lib/vedeu/repositories/defaults.rb
vedeu-0.8.20 lib/vedeu/repositories/defaults.rb
vedeu-0.8.19 lib/vedeu/repositories/defaults.rb
vedeu-0.8.18 lib/vedeu/repositories/defaults.rb
vedeu-0.8.17 lib/vedeu/repositories/defaults.rb
vedeu-0.8.16 lib/vedeu/repositories/defaults.rb
vedeu-0.8.15 lib/vedeu/repositories/defaults.rb
vedeu-0.8.14 lib/vedeu/repositories/defaults.rb
vedeu-0.8.13 lib/vedeu/repositories/defaults.rb