summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-05-06 17:55:06 +0200
committerJames Lopez <james@jameslopez.es>2016-05-06 17:55:06 +0200
commit8ac53eb5d0dcc6d0248a8b178a3c1b5f2d2284e1 (patch)
tree1e2da8799bb8e20fb92343bce6ac67fc9fa21546 /lib
parentb6ab4a311396d12cdb686df885fe48c58ea31218 (diff)
downloadgitlab-ce-8ac53eb5d0dcc6d0248a8b178a3c1b5f2d2284e1.tar.gz
started refactoring import export reader - WIP
Diffstat (limited to 'lib')
-rw-r--r--lib/gitlab/import_export.rb2
-rw-r--r--lib/gitlab/import_export/attributes_finder.rb35
-rw-r--r--lib/gitlab/import_export/import_export_reader.rb68
3 files changed, 56 insertions, 49 deletions
diff --git a/lib/gitlab/import_export.rb b/lib/gitlab/import_export.rb
index aa69f7c44a5..84860b43cbe 100644
--- a/lib/gitlab/import_export.rb
+++ b/lib/gitlab/import_export.rb
@@ -11,7 +11,7 @@ module Gitlab
end
def project_tree
- Gitlab::ImportExport::ImportExportReader.project_tree
+ Gitlab::ImportExport::ImportExportReader.new.project_tree
end
def storage_path
diff --git a/lib/gitlab/import_export/attributes_finder.rb b/lib/gitlab/import_export/attributes_finder.rb
new file mode 100644
index 00000000000..12ae79a8773
--- /dev/null
+++ b/lib/gitlab/import_export/attributes_finder.rb
@@ -0,0 +1,35 @@
+module Gitlab
+ module ImportExport
+ class AttributesFinder
+ def initialize(included_attributes:, excluded_attributes:)
+ @included_attributes = included_attributes || {}
+ @excluded_attributes = excluded_attributes || {}
+ end
+
+ def find(model_object)
+ parsed_hash = find_attributes_only(model_object)
+ parsed_hash.empty? ? model_object : { model_object => parsed_hash }
+ end
+
+ def find_attributes_only(value)
+ find_included(value).merge(find_excluded(value))
+ end
+
+ def find_included(value)
+ key = key_from_hash(value)
+ @included_attributes[key].nil? ? {} : { only: @included_attributes[key] }
+ end
+
+ def find_excluded(value)
+ key = key_from_hash(value)
+ @excluded_attributes[key].nil? ? {} : { except: @excluded_attributes[key] }
+ end
+
+ private
+
+ def key_from_hash(value)
+ value.is_a?(Hash) ? value.keys.first : value
+ end
+ end
+ end
+end \ No newline at end of file
diff --git a/lib/gitlab/import_export/import_export_reader.rb b/lib/gitlab/import_export/import_export_reader.rb
index 77db6cabe38..a6cf1910105 100644
--- a/lib/gitlab/import_export/import_export_reader.rb
+++ b/lib/gitlab/import_export/import_export_reader.rb
@@ -1,37 +1,27 @@
module Gitlab
module ImportExport
- module ImportExportReader
- extend self
+ class ImportExportReader
+ #FIXME
- def project_tree
- { only: included_attributes[:project], include: build_hash(tree) }
+ def initialize(config: 'lib/gitlab/import_export/import_export.yml')
+ config = YAML.load_file('lib/gitlab/import_export/import_export.yml').with_indifferent_access
+ @tree = config[:project_tree]
+ @attributes_parser = Gitlab::ImportExport::AttributesFinder.new(included_attributes: config[:included_attributes],
+ excluded_attributes: config[:excluded_attributes])
end
- def tree
- config[:project_tree]
+ def project_tree
+ { only: @attributes_parser.find_included(:project), include: build_hash(@tree) }
end
private
- def config
- @config ||= YAML.load_file('lib/gitlab/import_export/import_export.yml').with_indifferent_access
- end
-
- def included_attributes
- config[:included_attributes] || {}
- end
-
- def excluded_attributes
- config[:excluded_attributes] || {}
- end
-
- def build_hash(array)
- array.map do |model_object|
+ def build_hash(model_list)
+ model_list.map do |model_object|
if model_object.is_a?(Hash)
process_include(model_object)
else
- only_except_hash = check_only_and_except(model_object)
- only_except_hash.empty? ? model_object : { model_object => only_except_hash }
+ @attributes_parser.find(model_object)
end
end
end
@@ -51,48 +41,30 @@ module Gitlab
def process_current_class(hash, included_classes_hash, value)
value = value.is_a?(Hash) ? process_include(hash, included_classes_hash) : value
- only_except_hash = check_only_and_except(hash.keys.first)
- included_classes_hash[hash.keys.first] ||= only_except_hash unless only_except_hash.empty?
+ attributes_hash = @attributes_parser.find_attributes_only(hash.keys.first)
+ included_classes_hash[hash.keys.first] ||= attributes_hash unless attributes_hash.empty?
value
end
def add_new_class(current_key, included_classes_hash, value)
- only_except_hash = check_only_and_except(value)
+ attributes_hash = @attributes_parser.find_attributes_only(value)
parsed_hash = { include: value }
- unless only_except_hash.empty?
+ unless attributes_hash.empty?
if value.is_a?(Hash)
- parsed_hash = { include: value.merge(only_except_hash) }
+ parsed_hash = { include: value.merge(attributes_hash) }
else
- parsed_hash = { include: { value => only_except_hash } }
+ parsed_hash = { include: { value => attributes_hash } }
end
end
included_classes_hash[current_key] = parsed_hash
end
def add_to_class(current_key, included_classes_hash, value)
- only_except_hash = check_only_and_except(value)
- value = { value => only_except_hash } unless only_except_hash.empty?
+ attributes_hash = @attributes_parser.find_attributes_only(value)
+ value = { value => attributes_hash } unless attributes_hash.empty?
old_values = included_classes_hash[current_key][:include]
included_classes_hash[current_key][:include] = ([old_values] + [value]).compact.flatten
end
-
- def check_only_and_except(value)
- check_only(value).merge(check_except(value))
- end
-
- def check_only(value)
- key = key_from_hash(value)
- included_attributes[key].nil? ? {} : { only: included_attributes[key] }
- end
-
- def check_except(value)
- key = key_from_hash(value)
- excluded_attributes[key].nil? ? {} : { except: excluded_attributes[key] }
- end
-
- def key_from_hash(value)
- value.is_a?(Hash) ? value.keys.first : value
- end
end
end
end