class ActiveDryForm::Form
Constants
- ResultError
Attributes
base_errors[R]
record[R]
Public Class Methods
action(method)
click to toggle source
# File lib/active_dry_form/form.rb, line 86 def self.action(method) alias_method :"__#{method}", method class_eval <<~RUBY, __FILE__, __LINE__ + 1 # def create(...) # if validator.failure? # @base_errors = validator.errors.filter(:base?).map(&:to_s).presence # return Failure(:validate_invalid) # end # # result = __create(...) # # unless result.is_a?(::Dry::Monads::Result) # raise ResultError, 'method `create` should be returning `monad`' # end # # case result # in Failure[:failure_service, base_errors] # @base_errors = base_errors # else # end # # result # end def #{method}(...) if validator.failure? @base_errors = validator.errors.filter(:base?).map(&:to_s).presence return Failure(:validate_invalid) end result = __#{method}(...) unless result.is_a?(::Dry::Monads::Result) raise ResultError, 'method `#{method}` should be returning `monad`' end case result in Failure[:failure_service, base_errors] @base_errors = base_errors else end result end RUBY end
default(method)
click to toggle source
# File lib/active_dry_form/form.rb, line 72 def self.default(method) alias_method :"__#{method}", method class_eval <<~RUBY, __FILE__, __LINE__ + 1 # def create_default(...) # @params.merge!(__create_default(...)) # end def #{method}(...) @params.merge!(__#{method}(...)) end RUBY end
fields(namespace, &block)
click to toggle source
# File lib/active_dry_form/form.rb, line 17 def self.fields(namespace, &block) const_set :NAMESPACE, ActiveModel::Name.new(nil, nil, namespace.to_s) const_set :CURRENT_CONTRACT, Class.new(ContractBase, &block).new const_set :FIELDS_INFO, self::CURRENT_CONTRACT.schema.info[:keys] self::FIELDS_INFO.each do |key, value| if value[:keys] sub_klass = Class.new do const_set :NAMESPACE, ActiveModel::Name.new(nil, nil, key.to_s) const_set :FIELDS_INFO, value[:keys] def initialize(params, record, errors) @params = params || {} @record = record @errors = errors || {} end self::FIELDS_INFO.each_key do |sub_key| define_method sub_key do @params[sub_key] || @record.try(sub_key) end def model_name self.class::NAMESPACE end def info(sub_key) self.class::FIELDS_INFO[sub_key] end # ActionView::Helpers::Tags::Translator#human_attribute_name def to_model self end def self.human_attribute_name(field) I18n.t(field, scope: :"activerecord.attributes.#{self::NAMESPACE.i18n_key}") end def errors @errors end end end define_method key do sub_klass.new(@params[key], @record.try(key), errors[key]) end else define_method key do @params[key] || @record.try(key) end end end end
human_attribute_name(field)
click to toggle source
# File lib/active_dry_form/form.rb, line 52 def self.human_attribute_name(field) I18n.t(field, scope: :"activerecord.attributes.#{self::NAMESPACE.i18n_key}") end
new(params, record, errors)
click to toggle source
# File lib/active_dry_form/form.rb, line 28 def initialize(params, record, errors) @params = params || {} @record = record @errors = errors || {} end
Public Instance Methods
errors()
click to toggle source
# File lib/active_dry_form/form.rb, line 56 def errors @errors end
info(sub_key)
click to toggle source
# File lib/active_dry_form/form.rb, line 43 def info(sub_key) self.class::FIELDS_INFO[sub_key] end
model_name()
click to toggle source
# File lib/active_dry_form/form.rb, line 39 def model_name self.class::NAMESPACE end
persisted?()
click to toggle source
# File lib/active_dry_form/form.rb, line 169 def persisted? @record&.persisted? end
to_key()
click to toggle source
# File lib/active_dry_form/form.rb, line 173 def to_key key = @record&.id [key] if key end
to_model()
click to toggle source
ActionView::Helpers::Tags::Translator#human_attribute_name
# File lib/active_dry_form/form.rb, line 48 def to_model self end
to_param()
click to toggle source
используется при генерации URL, когда record.persisted?
# File lib/active_dry_form/form.rb, line 179 def to_param @record.id.to_s end
validator()
click to toggle source
# File lib/active_dry_form/form.rb, line 183 def validator @validator ||= self.class::CURRENT_CONTRACT.call(@params, { form: self }) end
view_component()
click to toggle source
# File lib/active_dry_form/form.rb, line 191 def view_component self.class.module_parent::Component.new(self) end
Private Instance Methods
_deep_transform_values_in_params!(object)
click to toggle source
# File lib/active_dry_form/form.rb, line 195 def _deep_transform_values_in_params!(object) case object when String object.strip.presence when Hash object.transform_values! { |value| _deep_transform_values_in_params!(value) } when Array object.map! { |e| _deep_transform_values_in_params!(e) } object.compact! object else object end end