Module: Foobara::ActiveRecordType

Defined in:
lib/foobara/active_record_type.rb

Overview

TODO: I think we should have a configuration that indicates if created records can have primary keys past to them or not. That is, do primary keys get issued by the database upon insertion? Or are they generated externally and passed in? Would be nice to have programmatic clarification via explicit configuration.

Class Method Summary collapse

Class Method Details

.install!Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/foobara/active_record_type.rb', line 9

def install!
  TypeDeclarations.register_type_declaration(ExtendActiveRecordTypeDeclaration.new)

  detached_entity = Namespace.global.foobara_lookup_type!(:detached_entity)
  type = BuiltinTypes.build_and_register!(
    :active_record,
    detached_entity,
    nil,
    type_module: Foobara::ActiveRecordType
  )
  type.remove_processor_by_symbol(:attributes_declaration)
  type.remove_processor_by_symbol(:model_instance_is_valid)

  BuiltinTypes.install_type_declaration_extensions_for(ExtendActiveRecordTypeDeclaration)

  ActiveRecord::Base.include ModelAttributeHelpers::Concerns::AttributeHelpers
  ActiveRecord::Base.include ActiveRecordFoobaraMethods
  ActiveRecord::Base.include Foobara::Model::Concerns::Reflection
  ActiveRecord::Base.include Foobara::DetachedEntity::Concerns::Reflection
  # ActiveRecord::Base.include Foobara::Model::Concerns::Errors

  if defined?(Foobara::CommandConnectors::RailsCommandConnector)
    Foobara::CommandConnectors::RailsCommandConnector.default_serializers = [
      Foobara::CommandConnectors::Serializers::ErrorsSerializer,
      Foobara::CommandConnectors::Serializers::ActiveRecordAtomicSerializer,
      Foobara::CommandConnectors::Serializers::JsonSerializer
    ]
  end

  DetachedEntityType.types_requiring_conversion << :active_record
  DetachedEntityType.model_base_classes_requiring_conversion << "ActiveRecord::Base"
end

.reset_allObject



42
43
44
45
46
# File 'lib/foobara/active_record_type.rb', line 42

def reset_all
  Entity::Concerns::Callbacks.reset_all

  install!
end