module Formalism::ModelForms::Base

Base form for models

Attributes

instance[W]

Public Class Methods

new(*) click to toggle source
Calls superclass method
# File lib/formalism/model_forms/_base.rb, line 85
def initialize(*)
        @cached =
                Sequel::Plugins.const_defined?(:StaticCache) &&
                model.plugins.include?(Sequel::Plugins::StaticCache)

        super
end

Public Instance Methods

before_retry() click to toggle source
Calls superclass method
# File lib/formalism/model_forms/_base.rb, line 93
def before_retry
        if instance_variable_defined?(instance_variable_name)
                remove_instance_variable instance_variable_name
        end

        super
end
instance() click to toggle source
# File lib/formalism/model_forms/_base.rb, line 101
def instance
        return @instance if defined?(@instance)

        @instance = find_instance
end

Private Instance Methods

compare_value(instance_value, value) click to toggle source
# File lib/formalism/model_forms/_base.rb, line 152
def compare_value(instance_value, value)
        ## It can be Number, nil, etc., but logic for Regexp is below
        instance_value = instance_value.to_s if value.is_a?(String) && !instance_value.is_a?(Regexp)

        ## Match instead of equal if any side is Regexp
        if instance_value.is_a?(Regexp) || value.is_a?(Regexp)
                instance_value.match? value
        ## And just equal if not
        else
                instance_value == value
        end
end
conditions_for_dataset(except: []) click to toggle source
# File lib/formalism/model_forms/_base.rb, line 141
def conditions_for_dataset(except: [])
        conditions = fields_and_nested_forms.map do |name, value|
                next Sequel[true] if Array(except).include?(name)

                field_condition(name, value)
        end

        ## `[].reduce(:&)` returns `nil`
        conditions.any? ? conditions.reduce(:&) : conditions
end
execute() click to toggle source
# File lib/formalism/model_forms/_base.rb, line 109
def execute
        # TODO: Check
        Actions::Application::Restart.run if @cached && ENV['RACK_ENV'] != 'test'

        instance
end
field_condition(name, value) click to toggle source
# File lib/formalism/model_forms/_base.rb, line 124
def field_condition(name, value)
        options = self.class.fields_and_nested_forms[name]

        return instance_exec(name, value, &options[:condition]) if options.key?(:condition)

        field_condition_class(options[:type]).new(name, value).result
end
field_condition_class(type) click to toggle source
# File lib/formalism/model_forms/_base.rb, line 134
def field_condition_class(type)
        const_name = type.to_s.camelize
        const_name = 'Base' if const_name.empty? || !Conditions.const_defined?(const_name, false)

        Conditions.const_get(const_name, false)
end
find_instance() click to toggle source
# File lib/formalism/model_forms/_base.rb, line 118
def find_instance
        model
                .first(primary_field_name => public_send(primary_field_name))
                .public_send(@cached ? :dup : :itself)
end
select_cached() click to toggle source
# File lib/formalism/model_forms/_base.rb, line 165
def select_cached
        model.all.select do |instance|
                fields_and_nested_forms.all? do |key, values|
                        key =
                                self.class.fields_and_nested_forms[key].fetch(:compare_key, key)

                        Array(values).any? do |value|
                                compare_value instance.public_send(key), value
                        end
                end
        end
end