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'
USER_CONTRIBUTIONS_RELATION =
'user_contributions'

Instance Method Summary collapse

Constructor Details

#initialize(portable) ⇒ BaseConfig

Returns a new instance of BaseConfig.



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

def initialize(portable)
  @portable = portable
end

Instance Method Details

#batchable_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#batchable_relationsObject



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

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

#export_pathObject



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

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.)



83
84
85
86
87
88
89
90
91
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 83

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)


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

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

#portable_relationsObject



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

def portable_relations
  tree_relations + file_relations + self_relation - skipped_relations
end

#portable_relations_treeObject



75
76
77
78
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 75

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



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

def portable_tree
  attributes_finder.find_root(portable_class_sym)
end

#relation_excluded_keys(relation) ⇒ Object



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

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

#relation_has_user_contributions?(relation) ⇒ Boolean

Returns:

  • (Boolean)


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

def relation_has_user_contributions?(relation)
  (relation_included_keys(relation) & ::Gitlab::ImportExport::Base::RelationFactory::USER_REFERENCES).any?
end

#relation_included_keys(relation) ⇒ Object



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

def relation_included_keys(relation)
  attributes_finder.find_included_keys(relation)
end

#self_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


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

def self_relation?(relation)
  relation == SELF_RELATION
end

#top_relation_tree(relation) ⇒ Object



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

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

#tree_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#tree_relation_definition_for(relation) ⇒ Object



69
70
71
72
73
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 69

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

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

#user_contributions_relation?(relation) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'app/models/bulk_imports/file_transfer/base_config.rb', line 65

def user_contributions_relation?(relation)
  relation == USER_CONTRIBUTIONS_RELATION
end