Sha256: b5b83eb391d04d5261c9c49ec813c7d5c79f9cdf9481e2c467f2278784042ac2
Contents?: true
Size: 1.79 KB
Versions: 6
Compression:
Stored size: 1.79 KB
Contents
module FlattenRecord module Meta class Node attr_reader :parent, :children, :target_model, :model def initialize(parent, target_model, model) @parent = parent @target_model = target_model.to_s.underscore @model = model.to_s.underscore end def target_model @target_model.camelize.constantize end def model @model.camelize.constantize end def traverse_by(attr, value) attr_value = send("#{attr}") if !value.respond_to?(:to_s) || !attr_value.respond_to?(:to_s) raise "traverse error: to_s method required for comparison" end if value.to_s == attr_value.to_s return self else return nil end end def prefix return custom_prefix unless custom_prefix.nil? return "" if is_parent_root? "#{target_model_name}_" end protected def build(definition) definition.validates_with(target_model, model) @_key = definition[:_key] @custom_prefix = definition[:definition][:prefix] @custom_prefix = @custom_prefix.to_s unless @custom_prefix.nil? raise definition.error_message unless definition.valid? self end def custom_prefix @custom_prefix end def _key @_key end # target helpers def target_model_name @target_model end def target_columns target_model.columns end def inspect # this prevents irb/console to inspect # circular references on big tree caused problem on #inspect end private def is_parent_root? parent.present? && parent.instance_of?(RootNode) end end end end
Version data entries
6 entries across 6 versions & 1 rubygems