hirakiuc/tinybucket

View on GitHub
lib/tinybucket/model/concerns/acceptable_attributes.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
94%
# frozen_string_literal: true

module Tinybucket
  module Model
    module Concerns
      module AcceptableAttributes
        extend ActiveSupport::Concern

        included do
          def self.acceptable_attributes(*attrs)
            @_acceptable_attributes = attrs.map(&:intern)

            attr_accessor(*attrs)
          end

          def self.acceptable_attribute?(key)
            return false if @_acceptable_attributes.nil?

            @_acceptable_attributes.include?(key.intern)
          end

          protected

          def acceptable_attribute?(key)
            self.class.acceptable_attribute?(key)
          end

          def acceptable_attributes
            self.class.instance_variable_get(:@_acceptable_attributes) || []
          end
        end
      end
    end
  end
end