Sha256: 79900513f0d41816cb16786b0e681aecb6db9e39da50b58eaade72d9924ae881

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

module Ciesta
  module ClassMethods
    extend self

    def form_from(**hash)
      form = new
      hash.each do |(k, v)|
        form.public_send("#{k}=", v) if form.respond_to?("#{k}=")
      end
      form
    end

    # Declare new form field
    #
    # @param [Symbol] name Field name
    # @param [Hash] options Options
    # @option (see Ciesta::Field)
    def field(name, **options)
      name = name.to_sym
      fields << Ciesta::Field.new(name, options)
      proxy.instance_eval do
        define_method(name) { self.class.fields[name] }
        define_method("#{name}=") { |value| self.class.fields[name] = value }
      end
    end

    # Declare rules for valudation
    #
    # @param [Block] block Block with validation rules
    # @see http://dry-rb.org/gems/dry-validation
    def validate(&block)
      validator.use(&block)
    end

    # Returns field list
    #
    # @api private
    # @return [Ciesta::FieldList]
    def fields
      @fields ||= Ciesta::FieldList.new
    end

    # Returns form validator
    #
    # @api private
    # @return [Ciesta::Validator]
    def validator
      @validator ||= Ciesta::Validator.new
    end

    def proxy
      @proxy ||= begin
        m = Module.new
        include m
        m
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ciesta-0.3.2 lib/ciesta/class_methods.rb