module Conjoin::ActiveRecord::Form

Attributes

req_params[RW]

Public Instance Methods

add_creator_and_updater_for(model, current_user = nil, current_params) click to toggle source
# File lib/conjoin/active_record.rb, line 115
def add_creator_and_updater_for(model, current_user = nil, current_params)
  # set the creator and updater
  id = current_user.try(:id) || ENV["SYSTEM_USER_ID"]

  # Save creator
  if model.respond_to? :creator_id and model.new_record?
    model.set_unrestricted_attribute 'creator_id', id
  end

  # Save updater
  if model.respond_to? :updater_id
    model.set_unrestricted_attribute 'updater_id', id
  end

  return unless current_params
  # loop through associated records
  current_params.each do |name, value|
    name = name.to_s
    if name.end_with?("_attributes")
      associated_name  = name.gsub(/_attributes$/, '')
      associated_model = model.try associated_name

      if associated_model.kind_of? ::ActiveRecord::Base
        new_current_params = (current_params[name.to_sym] || current_params[name])
        if new_current_params.kind_of? Hash
          add_creator_and_updater_for associated_model, current_user, new_current_params
        end
      elsif associated_model.kind_of? ActiveRecord::Associations::CollectionProxy
        new_current_params = (current_params[name.to_sym] || current_params[name])
        associated_model.each_with_index do |current_model, i|
          new_current_params ||= []
          add_creator_and_updater_for current_model, current_user, new_current_params[i]
        end
      end
    end
  end
end
is_form?() click to toggle source
# File lib/conjoin/active_record.rb, line 68
def is_form?
  self.class.model_name.to_s[/Form$/]
end
remove_error!(attribute, message = :invalid, options = {}) click to toggle source
# File lib/conjoin/active_record.rb, line 153
def remove_error!(attribute, message = :invalid, options = {})
  # -- Same code as private method ActiveModel::Errors.normalize_message(attribute, message, options).
  callbacks_options = [:if, :unless, :on, :allow_nil, :allow_blank, :strict]
  case message
  when Symbol
    message = self.errors.generate_message(attribute, message, options.except(*callbacks_options))
  when Proc
    message = message.call
  else
    message = message
  end
  # -- end block

  # -- Delete message - based on ActiveModel::Errors.added?(attribute, message = :invalid, options = {}).
  message = self.errors[attribute].delete(message) rescue nil
  # -- Delete attribute from errors if message array is empty.
  self.errors.messages.delete(attribute) if !self.errors.messages[attribute].present?
  return message
end
save_as(current_user) click to toggle source
# File lib/conjoin/active_record.rb, line 89
def save_as current_user
  run_callbacks :save_as do
    add_creator_and_updater_for self, current_user, req_params
    save!
  end
end
save_unrestricted_attributes() click to toggle source
# File lib/conjoin/active_record.rb, line 96
def save_unrestricted_attributes
  if @unrestricted_attributes and @unrestricted_attributes.any?
    @unrestricted_attributes.each do |field, value|
      self.send "#{field}=", value
    end
  end
end
set_unrestricted_attribute(field, value) click to toggle source
# File lib/conjoin/active_record.rb, line 104
def set_unrestricted_attribute field, value
  @unrestricted_attributes ||= {}
  @unrestricted_attributes[field] = value
end
set_unrestricted_attributes(*fields) click to toggle source
# File lib/conjoin/active_record.rb, line 109
def set_unrestricted_attributes *fields
  fields.extract_options!.each do |field, value|
    set_unrestricted_attribute field, value
  end
end
valid_except?(except={}) click to toggle source
# File lib/conjoin/active_record.rb, line 173
def valid_except?(except={})
  self.valid?
  # -- Use this to call valid? for superclass if self.valid? is overridden.
  # self.class.superclass.instance_method(:valid?).bind(self).call
  except.each do |attribute, message|
    if message.present?
      remove_error!(attribute, message)
    else
      self.errors.delete(attribute)
    end
  end
  !self.errors.present?
end
valid_only?(*columns) click to toggle source
# File lib/conjoin/active_record.rb, line 187
def valid_only? *columns
  self.valid?
  self.errors.messages.each do |field, message|
    self.errors.delete(field) unless columns.include? field
  end
  !self.errors.present?
end
validate() click to toggle source
# File lib/conjoin/active_record.rb, line 72
def validate
end
validates(req_params, opts = {}) click to toggle source
# File lib/conjoin/active_record.rb, line 75
def validates req_params, opts = {}
  req_params  = req_params.to_h
  @req_params = req_params

  if as = opts.delete(:as)
    add_creator_and_updater_for self, as, req_params
  end

  run_callbacks :validates do
    self.attributes = req_params
    valid?
  end
end