Sha256: 7641840eadad8ee25f0b63a583fba9b052de574e6e036dcc4c054e787a6a01f6

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true

require "active_model"
require "action_controller"

module HyperActiveForm
  class Base
    include ActiveModel::Model
    include ActiveModel::Attributes
    include ActiveModel::Validations

    def self.proxy_for(klass, object)
      delegate :new_record?, :persisted?, :id, to: object
      singleton_class.delegate :model_name, to: klass
    end

    def initialize(*, **)
      super()
      setup(*, **)
    end

    def setup; end

    def perform
      raise NotImplementedError
    end

    def assign_form_attributes(params)
      params = ActionController::Parameters.new(params) unless params.is_a?(ActionController::Parameters)
      attribute_names.each do |attribute|
        public_send(:"#{attribute}=", params&.dig(attribute)) if params&.key?(attribute)
      end
    end

    def submit(params)
      assign_form_attributes(params)
      !!(valid? && perform)
    rescue HyperActiveForm::CancelFormSubmit
      false
    end

    def submit!(params)
      submit(params) || raise(HyperActiveForm::FormDidNotSubmitError)
    end

    def add_errors_from(model)
      model.errors.each do |error|
        Array.wrap(error.message).each { |e| errors.add(error.attribute, e) }
      end

      false
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hyperactiveform-0.1.0 lib/hyper_active_form/base.rb