Sha256: 06f259d60bc31c22e917821ace6951592383df1daec2abdfc3436338865a9368

Contents?: true

Size: 929 Bytes

Versions: 1

Compression:

Stored size: 929 Bytes

Contents

require 'dry-struct'
require 'dry-types'

module Nova
  module API
    module Utils
      class BaseStruct < Dry::Struct
        DATE_REGEX = /\A\d{4}-\d{2}-\d{2}\z/

        transform_keys(&:to_sym)

        def allowed_attributes
          return attributes unless self.class.const_defined?('ALLOWED_ATTRIBUTES')

          data = {}

          self.class.const_get('ALLOWED_ATTRIBUTES').each do |key|
            next unless attributes.keys.include? key

            value = attributes[key]

            if value.is_a? Array
              data[key.to_sym] = value.map { |attribute| permit_value(key, attribute) }
            else
              data[key.to_sym] = permit_value(key, value)
            end
          end

          data
        end

        private

        def permit_value(key, value)
          value.respond_to?(:allowed_attributes) ?  value.allowed_attributes : value
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
nova-api-0.5.0 lib/nova/api/utils/base_struct.rb