Class: RailsBase::AdminUpdateAttribute
Instance Method Summary
collapse
Methods inherited from ServiceBase
inherited, #internal_validate, #service_base_logging
#aletered_message, #class_name, #log, #log_prefix, #logger, #service_id
Instance Method Details
#call ⇒ Object
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 7
def call
validate_model!
validate_model_row!
attribute = validate_attribute!
validate_permission!(attribute: attribute)
fail_attribute!(attribute: attribute)
original_value = model_row.public_send(attribute)
begin
model_row.update!(attribute => sanitized_value)
rescue ActiveRecord::RecordInvalid => e
context.fail!(message: "Failed to update [#{attribute}] with #{sanitized_value} on #{model}##{model_row.id}. #{e.message}")
rescue StandardError
context.fail!(message: "Failed to update [#{attribute}] with #{sanitized_value} on #{model}##{model_row.id}")
end
context.attribute = sanitized_value
context.original_attribute = original_value
context.model = model_row
context.message = "#{model}##{params[:id]} has changed attribute [#{attribute}] from [#{original_value}]=>#{sanitized_value}"
end
|
#fail_attribute!(attribute:) ⇒ Object
29
30
31
32
33
34
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 29
def fail_attribute!(attribute:)
if params[:_fail_].present?
log(level: :warn, msg: "FAIL param passed in. Automagic failure for admin update")
context.fail!(message: "Failed to update [#{attribute}] with #{sanitized_value} on #{model}##{model_row.id}")
end
end
|
#model ⇒ Object
62
63
64
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 62
def model
@model ||= klass_string ? klass_string.constantize : User
end
|
#model_row ⇒ Object
66
67
68
69
70
71
72
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 66
def model_row
@model_row ||= begin
model.find(params[:id])
rescue ActiveRecord::RecordNotFound
nil
end
end
|
#sanitized_value ⇒ Object
51
52
53
54
55
56
57
58
59
60
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 51
def sanitized_value
case params[:value]
when 'true'
true
when 'false'
false
else
params[:value]
end
end
|
#validate! ⇒ Object
94
95
96
97
98
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 94
def validate!
raise "Expected params to be a Hash. Received #{params.class}" unless [ActionController::Parameters, Hash].include?(params.class)
raise "Expected params to have a id. Received #{params[:id]}" if params[:id].nil?
raise "Expected admin_user." if admin_user.nil?
end
|
#validate_attribute! ⇒ Object
43
44
45
46
47
48
49
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 43
def validate_attribute!
attribute = params[:attribute].to_sym
unless model::SAFE_AUTOMAGIC_UPGRADE_COLS.keys.include?(attribute)
context.fail!(message: "#{attribute} is not part of allowed updatable columns")
end
attribute
end
|
#validate_model! ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 80
def validate_model!
begin
model
rescue StandardError
context.fail!(message: "Failed to find model")
end
begin
model::SAFE_AUTOMAGIC_UPGRADE_COLS
rescue StandardError
context.fail!(message: "#{model}::SAFE_AUTOMAGIC_UPGRADE_COLS array does not exist")
end
end
|
#validate_model_row! ⇒ Object
74
75
76
77
78
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 74
def validate_model_row!
return if model_row
context.fail!(message: "Failed to find id:#{params[:id]} on model: #{model}")
end
|
#validate_permission!(attribute:) ⇒ Object
36
37
38
39
40
41
|
# File 'app/services/rails_base/admin_update_attribute.rb', line 36
def validate_permission!(attribute:)
proc = model::SAFE_AUTOMAGIC_UPGRADE_COLS[attribute]
return if proc.call(admin_user)
context.fail!(message: "User does not have permissions to update #{attribute}")
end
|