Module: Hoardable::Model

Extended by:
ActiveSupport::Concern
Included in:
EncryptedRichText, RichText
Defined in:
lib/hoardable/model.rb

Overview

This concern is the main entrypoint for using Hoardable. When included into an ActiveRecord class, it dynamically generates the Version variant of that class (with VersionModel) and includes the Hoardable API methods and relationships on the source model class (through SourceModel).

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/hoardable/model.rb', line 58

def self.included(base)
  TracePoint
    .new(:end) do |trace|
      next unless base == trace.self

      full_version_class_name = "#{base.name}#{VERSION_CLASS_SUFFIX}"
      if (namespace_match = full_version_class_name.match(/(.*)::(.*)/))
        object_namespace = namespace_match[1].constantize
        version_class_name = namespace_match[2]
      else
        object_namespace = Object
        version_class_name = full_version_class_name
      end
      unless Object.const_defined?(full_version_class_name)
        object_namespace.const_set(version_class_name, Class.new(base) { include VersionModel })
      end
      base.class_eval { include SourceModel }
      REGISTRY.add(base)

      trace.disable
    end
    .enable
end