Class: BulkImports::FileTransfer::BaseConfig

Inherits:
Object
  • Object
show all
Includes:
Gitlab::Utils::StrongMemoize
Defined in:
app/models/bulk_imports/file_transfer/base_config.rb

Direct Known Subclasses

GroupConfig, ProjectConfig

Constant Summary collapse

UPLOADS_RELATION =
'uploads'
SELF_RELATION =
'self'

Instance Method Summary collapse

Constructor Details

#initialize(portable) ⇒ BaseConfig

Returns a new instance of BaseConfig.



11
12
13
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 11

def initialize(portable)
  @portable = portable
end

Instance Method Details

#batchable_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 40

def batchable_relation?(relation)
  batchable_relations.include?(relation)
end

#batchable_relationsObject



35
36
37
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 35

def batchable_relations
  portable_relations.select { |relation| portable_class.reflect_on_association(relation)&.collection? }
end

#export_pathObject



27
28
29
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 27

def export_path
  @export_path ||= Dir.mktmpdir('bulk_imports')
end

#export_service_for(relation) ⇒ Object

Returns an export service class for the given relation.

Returns:

  • TreeExportService if a relation is serializable and is listed in import_export.yml

  • FileExportService if a relation is a file (uploads, lfs objects, git repository, etc.)



70
71
72
73
74
75
76
77
78
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 70

def export_service_for(relation)
  if tree_relation?(relation)
    ::BulkImports::TreeExportService
  elsif file_relation?(relation)
    ::BulkImports::FileExportService
  else
    raise ::BulkImports::Error, 'Unsupported export relation'
  end
end

#file_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 52

def file_relation?(relation)
  file_relations.include?(relation)
end

#portable_relationsObject



31
32
33
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 31

def portable_relations
  tree_relations + file_relations + self_relation - skipped_relations
end

#portable_relations_treeObject



62
63
64
65
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 62

def portable_relations_tree
  @portable_relations_tree ||= attributes_finder
    .find_relations_tree(portable_class_sym, include_import_only_tree: true).deep_stringify_keys
end

#portable_treeObject



15
16
17
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 15

def portable_tree
  attributes_finder.find_root(portable_class_sym)
end

#relation_excluded_keys(relation) ⇒ Object



23
24
25
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 23

def relation_excluded_keys(relation)
  attributes_finder.find_excluded_keys(relation)
end

#self_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 44

def self_relation?(relation)
  relation == SELF_RELATION
end

#top_relation_tree(relation) ⇒ Object



19
20
21
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 19

def top_relation_tree(relation)
  portable_relations_tree[relation.to_s]
end

#tree_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 48

def tree_relation?(relation)
  tree_relations.include?(relation)
end

#tree_relation_definition_for(relation) ⇒ Object



56
57
58
59
60
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 56

def tree_relation_definition_for(relation)
  return unless tree_relation?(relation)

  portable_tree[:include].find { |include| include[relation.to_sym] }
end