class AutoSet::SetColumn
Public Class Methods
new(column, parents, options = {})
click to toggle source
# File lib/auto_set/set_column.rb, line 3 def initialize(column, parents, options = {}) @column = column if parents.is_a? Hash @options = parents.reverse_merge from: :code else @options = options || {} @parents = parents @parents = @parents.is_a?(Array) ? @parents : [ @parents ] end end
Public Instance Methods
before_create(record)
click to toggle source
# File lib/auto_set/set_column.rb, line 24 def before_create(record) before_save record end
before_save(record)
click to toggle source
# File lib/auto_set/set_column.rb, line 15 def before_save(record) @record = record if @parents.present? direct else from_column end end
before_validation(record)
click to toggle source
# File lib/auto_set/set_column.rb, line 28 def before_validation(record) before_save record end
Private Instance Methods
direct()
click to toggle source
# File lib/auto_set/set_column.rb, line 34 def direct if @record.send(@column).blank? @record.send "#{@column}=", parent_object.send(@column) end end
from_column()
click to toggle source
# File lib/auto_set/set_column.rb, line 40 def from_column if @record.send("#{@column}_#{@options[:from]}_changed?") from_column_changed elsif @record.send("#{@column}_id_changed?") from_column_id_changed end end
from_column_changed()
click to toggle source
# File lib/auto_set/set_column.rb, line 64 def from_column_changed @record.send "#{@column}=", parent_from_column(@column, @options[:from]) end
from_column_id_changed()
click to toggle source
# File lib/auto_set/set_column.rb, line 68 def from_column_id_changed value = @record.send(@column).code if @record.send(@column).present? @record.send "#{@column}_#{@options[:from]}=", value end
parent_from_column(column, from)
click to toggle source
# File lib/auto_set/set_column.rb, line 57 def parent_from_column(column, from) if @record.send("#{column}_#{from}").present? reflection = @record.class.reflections.with_indifferent_access[column] reflection.klass.where(from => @record.send("#{column}_#{from}")).first if reflection.present? end end
parent_object()
click to toggle source
# File lib/auto_set/set_column.rb, line 48 def parent_object parent = @record @parents.each do |parent_name| parent = parent.send(parent_name) if parent.respond_to? parent_name end parent end