Class: Foobara::RemoteImports::ImportType
- Includes:
- ImportBase
- Defined in:
- foobara-remote-imports-1.2.0/src/foobara/remote_imports/import_type.rb
Constant Summary
Constants included from TruncatedInspect
Instance Attribute Summary
Attributes included from ImportBase
#manifest_data, #manifest_to_import, #manifests_to_import
Instance Method Summary collapse
- #deanonymize_models? ⇒ Boolean
- #find_manifests_to_import ⇒ Object
-
#import_object_from_manifest ⇒ Object
TODO: break this method up?.
Methods included from ImportBase
#already_exists?, #already_imported, #cache_file_path, #cache_key, #cache_manifest, #cached?, #determine_manifests_to_import, #execute, #filter_manifests_to_import, #import_objects_from_manifests, #imported_objects, included, #load_cached_manifest, #load_manifest, #load_manifest_from_url, #load_manifest_headers, #root_manifest, #should_cache?, #validate, #validate_manifest
Methods inherited from Command
Methods included from TruncatedInspect
Methods included from Concern
foobara_class_methods_module_for, foobara_concern?, included
Instance Method Details
#deanonymize_models? ⇒ Boolean
96 97 98 |
# File 'src/foobara/remote_imports/import_type.rb', line 96 def deanonymize_models? deanonymize_models end |
#find_manifests_to_import ⇒ Object
8 9 10 |
# File 'src/foobara/remote_imports/import_type.rb', line 8 def find_manifests_to_import root_manifest.types end |
#import_object_from_manifest ⇒ Object
TODO: break this method up?
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'src/foobara/remote_imports/import_type.rb', line 13 def import_object_from_manifest existing_type = Foobara..( manifest_to_import.reference, mode: Namespace::LookupMode::ABSOLUTE ) # TODO: might this be a sign of a name collision? Maybe better to give a meaningful error if the type isn't in # #already_imported ?? return if existing_type domain_manifest = manifest_to_import.domain run_subcommand!( ImportDomain, raw_manifest: manifest_data, to_import: domain_manifest.reference, already_imported: ) domain_manifest = manifest_to_import.domain domain = if domain_manifest.global? GlobalDomain else Foobara..( domain_manifest.reference, mode: Namespace::LookupMode::ABSOLUTE ) end manifest_to_import.types_depended_on.each do |depended_on_type| run_subcommand!( ImportType, raw_manifest: manifest_data, to_import: depended_on_type.reference, already_imported: ) end containing_module_name = manifest_to_import.scoped_full_path[0..-2].join("::") unless containing_module_name.empty? Util.make_module_p(containing_module_name, tag: true) end # Warning: cannot desugarize this because unfortunately desugarizing an entity declaration will actually # create the entity class, which should be considered a bug. declaration_data = manifest_to_import.declaration_data # TODO: how do we solve this for :active_record type?? if declaration_data["type"] == "entity" declaration_data = Util.deep_dup(declaration_data) declaration_data["type"] = "detached_entity" declaration_data["mutable"] = false primary_key_attribute = declaration_data["primary_key"] required = declaration_data["attributes_declaration"]["required"] required << primary_key_attribute unless required.include?(primary_key_attribute) model_base_class = declaration_data["model_base_class"] unless model_base_class == "Foobara::Entity" # :nocov: raise "Expected model base class to be Foobara::Entity, but was #{model_base_class}" # :nocov: end declaration_data["model_base_class"] = "Foobara::DetachedEntity" end type = domain.(declaration_data) if deanonymize_models? && type.extends_type?(BuiltinTypes[:model]) Foobara::Model.deanonymize_class(type.target_class) end unless domain.(type) domain.(manifest_to_import.scoped_path, type) end type end |