Module: StandardModel::ClassMethods

Defined in:
lib/app/models/concerns/standard_model.rb

Overview

Mixin to add methods to the classes themselves Used by calling model.method_name

Instance Method Summary collapse

Instance Method Details

#allowed_param_names(filter_names = []) ⇒ Object

Return the complete list of key names that would appear in the form.



60
61
62
63
64
65
66
# File 'lib/app/models/concerns/standard_model.rb', line 60

def allowed_param_names(filter_names = [])
  # Always filter out the mongoid reserved items
  filter_names += %w[created_at updated_at _type _id]
  field_names(filter_names)
rescue StandardError
  attribute_names.delete_if { |name| filter_names.include?(name) }
end

#create_and_log(user, attributes) ⇒ Object

Record the creation with this user



100
101
102
103
104
105
106
107
# File 'lib/app/models/concerns/standard_model.rb', line 100

def create_and_log(user, attributes)
  model = create(attributes)
  model.last_modified_by = user
  model.created_by = user
  model.save
  log_change(user, model, attributes) if model.valid?
  model
end

#create_and_log!(user, attributes) ⇒ Object

Record the creation with this user



112
113
114
115
116
117
118
119
# File 'lib/app/models/concerns/standard_model.rb', line 112

def create_and_log!(user, attributes)
  model = create!(attributes)
  model.last_modified_by = user
  model.created_by = user
  model.save!
  log_change(user, model, attributes)
  model
end

#field_names(filter_names) ⇒ Object

allow the model to filter out a name if they want to, meaning the model can return a subset of attribute names



72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/app/models/concerns/standard_model.rb', line 72

def field_names(filter_names)
  fields.collect do |field|
    next if filter_names.include?(field[0])

    case field[1].options[:type].to_s
    when 'Hash'
      { field[0] => {} }
    when 'Array'
      { field[0] => [] }
    else
      field[0]
    end
  end.compact
end

#find_or_create_by_and_log!(user, attributes) ⇒ Object

Find or create by filter, the log the action



90
91
92
93
94
95
# File 'lib/app/models/concerns/standard_model.rb', line 90

def find_or_create_by_and_log!(user, attributes)
  model = find_or_initialize_by(attributes)
  log_change(user, model, attributes) if model.new_record? && model.valid?
  model.save!
  model
end

#log_change(user, model, changes) ⇒ Object

Log the audit record



124
125
126
127
128
129
# File 'lib/app/models/concerns/standard_model.rb', line 124

def log_change(user, model, changes)
  Web47core::Config.audit_model_log_class.create!(Web47core::Config.audit_model => user,
                                                  model: model,
                                                  action: model.audit_action,
                                                  changed_values: App47Logger.clean_params(changes).to_json)
end

#make_options(options) ⇒ Object

Turn the array into a list of options



53
54
55
# File 'lib/app/models/concerns/standard_model.rb', line 53

def make_options(options)
  options.collect { |t| [t, t.humanize] }
end

#without_callback(*args, &_block) ⇒ Object

Used by calling ‘model.without_callback(*.args, &block) do’



43
44
45
46
47
48
# File 'lib/app/models/concerns/standard_model.rb', line 43

def without_callback(*args, &_block)
  skip_callback(*args)
  yield
ensure
  set_callback(*args)
end