Sha256: 99e14f2855134307c63aca006609b53958433de1117a2307874ce7e9362d74dc

Contents?: true

Size: 696 Bytes

Versions: 4

Compression:

Stored size: 696 Bytes

Contents

require "inflecto"

module Formalist
  class Element
    # Class-level API for form elements.
    module ClassInterface
      def type
        Inflecto.underscore(Inflecto.demodulize(name)).to_sym
      end

      def attribute(name, default: nil)
        attributes(name => {default: default})
      end

      def attributes_schema
        super_schema = superclass.respond_to?(:attributes_schema) ? superclass.attributes_schema : {}
        super_schema.merge(@attributes_schema || {})
      end

      private

      def attributes(new_schema)
        prev_schema = @attributes_schema || {}
        @attributes_schema = prev_schema.merge(new_schema)

        self
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
formalist-0.9.0 lib/formalist/element/class_interface.rb
formalist-0.8.0 lib/formalist/element/class_interface.rb
formalist-0.7.0 lib/formalist/element/class_interface.rb
formalist-0.6.0 lib/formalist/element/class_interface.rb