module Defaults
Public Class Methods
default_value(model, record, attribute)
click to toggle source
# File lib/defaults.rb, line 14 def self.default_value(model, record, attribute) value = model.default_values[attribute] value = Defaults.execute_callable(value, record) if value.respond_to?(:call) value end
default_value_for_column(model, attribute)
click to toggle source
# File lib/defaults.rb, line 9 def self.default_value_for_column(model, attribute) column_info = model.columns_hash[attribute.to_s] ActiveRecord::Type.lookup(column_info.type).cast(column_info.default) if column_info end
execute_callable(value, record)
click to toggle source
# File lib/defaults.rb, line 4 def self.execute_callable(value, record) callable = value.is_a?(Proc) ? value : value.method(:call) callable.arity == 1 ? value.call(record) : value.call end
included(base)
click to toggle source
# File lib/defaults.rb, line 33 def self.included(base) base.extend ClassMethods class << base attr_accessor :default_values end end
resolve_default_value(model, record, attribute)
click to toggle source
# File lib/defaults.rb, line 20 def self.resolve_default_value(model, record, attribute) attribute = attribute.to_sym # Check if value has been defined by `defaults`. # If it is, try to resolve by checking if value is callable. # Otherwise returns the default value of that column. if model.default_values.key?(attribute) Defaults.default_value(model, record, attribute) else Defaults.default_value_for_column(model, attribute) end end