Class: Foobara::ActiveRecordType::ExtendActiveRecordTypeDeclaration::TypeDeclarationExtension::RegisteredTypeDeclaration::Desugarizers::UnregisteredActiveRecordBaseClassDesugarizer

Inherits:
TypeDeclarations::Desugarizer show all
Defined in:
foobara-active-record-type-0.1.0/src/extend_active_record_type_declaration/type_declaration_extension/registered_type_declaration/desugarizers/unregistered_active_record_base_class_desugarizer.rb

Instance Attribute Summary

Attributes inherited from Value::Processor

#created_in_namespace, #declaration_data, #parent_declaration_data

Instance Method Summary collapse

Methods inherited from TypeDeclarations::Desugarizer

foobara_manifest, requires_declaration_data?, #transform

Methods included from TypeDeclarations::WithRegistries

#handler_for_class, #lookup_absolute_type!, #lookup_type, #lookup_type!, #type_declaration_handler_for, #type_for_declaration, #type_registered?

Methods included from Concern

foobara_class_methods_module_for, foobara_concern?, included

Methods inherited from Value::Transformer

create, error_classes, foobara_manifest, #process_value, subclass, #transform

Methods inherited from Value::Processor

#always_applicable?, #attribute_name, #build_error, default_declaration_data, #dup_processor, error_class, #error_class, error_classes, #error_classes, #error_context, #error_message, #error_path, foobara_manifest, #foobara_manifest, #initialize, #inspect, instance, #method_missing, #name, new_with_agnostic_args, #possible_errors, #process_outcome, #process_outcome!, #process_value, #process_value!, processor_name, requires_declaration_data?, #requires_declaration_data?, requires_parent_declaration_data?, #requires_parent_declaration_data?, #respond_to_missing?, #runner, symbol, #symbol

Methods included from IsManifestable

#foobara_domain, #foobara_manifest, #foobara_organization, #scoped_clear_caches

Constructor Details

This class inherits a constructor from Foobara::Value::Processor

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Foobara::Value::Processor

Instance Method Details

#applicable?(sugary_type_declaration) ⇒ Boolean

Returns:

  • (Boolean)


8
9
10
11
12
13
# File 'src/extend_active_record_type_declaration/type_declaration_extension/registered_type_declaration/desugarizers/unregistered_active_record_base_class_desugarizer.rb', line 8

def applicable?(sugary_type_declaration)
  if sugary_type_declaration.class?
    klass = sugary_type_declaration.declaration_data
    klass < ActiveRecord::Base && !klass.foobara_type
  end
end

#desugarize(sugary_type_declaration) ⇒ Object

We will create the foobara type from the active record class and then the RegisteredActiveRecordBaseClassDesugarizer will handle it properly. This will keep declarations using just the active record class simple in the first place they are used by acting as if it were a registered type at the time even though it wasn't yet.



20
21
22
23
24
25
26
27
28
29
30
# File 'src/extend_active_record_type_declaration/type_declaration_extension/registered_type_declaration/desugarizers/unregistered_active_record_base_class_desugarizer.rb', line 20

def desugarize(sugary_type_declaration)
  klass = sugary_type_declaration.declaration_data

  handler = handler_for_class(Foobara::ActiveRecordType::ExtendActiveRecordTypeDeclaration)
  handler.process_value!(sugary_type_declaration)

  sugary_type_declaration.declaration_data = klass.foobara_type.foobara_manifest_reference.to_sym
  sugary_type_declaration.handle_symbolic_declaration

  sugary_type_declaration
end

#priority ⇒ Object



32
33
34
# File 'src/extend_active_record_type_declaration/type_declaration_extension/registered_type_declaration/desugarizers/unregistered_active_record_base_class_desugarizer.rb', line 32

def priority
  Priority::FIRST - 3
end