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