diff options
author | James Lopez <james@jameslopez.es> | 2016-06-13 12:32:15 +0200 |
---|---|---|
committer | James Lopez <james@jameslopez.es> | 2016-06-13 12:32:15 +0200 |
commit | cc322603945816ed957da7c0efa56e2ef1016569 (patch) | |
tree | 6284ee6f2a9839f9a9668fef2469c5af6ab1a189 | |
parent | 069bc264185f35f75c6840e26581e64a1de12d6a (diff) | |
download | gitlab-ce-cc322603945816ed957da7c0efa56e2ef1016569.tar.gz |
added comments to import export reader class
-rw-r--r-- | lib/gitlab/import_export/import_export_reader.rb | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/gitlab/import_export/import_export_reader.rb b/lib/gitlab/import_export/import_export_reader.rb index 29b9ef24fde..5ed4885a066 100644 --- a/lib/gitlab/import_export/import_export_reader.rb +++ b/lib/gitlab/import_export/import_export_reader.rb @@ -11,6 +11,8 @@ module Gitlab methods: config_hash[:methods]) end + # Outputs a hash in the format described here: http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html + # for outputting a project in JSON format, including its relations and sub relations. def project_tree @attributes_finder.find_included(:project).merge(include: build_hash(@tree)) rescue => e @@ -20,6 +22,9 @@ module Gitlab private + # Builds a hash in the format described here: http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html + # + # +model_list+ - List of models as a relation tree to be included in the generated JSON, from the _import_export.yml_ file def build_hash(model_list) model_list.map do |model_objects| if model_objects.is_a?(Hash) @@ -30,6 +35,10 @@ module Gitlab end end + # Called when the model is actually a hash containing other relations (more models) + # Returns the config in the right format for calling +to_json+ + # +model_object_hash+ - A model relationship such as: + # {:merge_requests=>[:merge_request_diff, :notes]} def build_json_config_hash(model_object_hash) @json_config_hash = {} @@ -44,6 +53,11 @@ module Gitlab @json_config_hash end + + # If the model is a hash, process the sub_models, which could also be hashes + # If there is a list, add to an existing array, otherwise use hash syntax + # +current_key+ main model that will be a key in the hash + # +model_object+ model or list of models to include in the hash def process_sub_model(current_key, model_object) sub_model_json = build_json_config_hash(model_object).dup @json_config_hash.slice!(current_key) @@ -55,6 +69,9 @@ module Gitlab end end + # Creates or adds to an existing hash an individual model or list + # +current_key+ main model that will be a key in the hash + # +model_object+ model or list of models to include in the hash def handle_model_object(current_key, model_object) if @json_config_hash[current_key] add_model_value(current_key, model_object) @@ -63,6 +80,10 @@ module Gitlab end end + # Constructs a new hash that will hold the configuration for that particular object + # It may include exceptions or other attribute detail configuration, parsed by +@attributes_finder+ + # +current_key+ main model that will be a key in the hash + # +value+ existing model to be included in the hash def create_model_value(current_key, value) parsed_hash = { include: value } @@ -72,12 +93,20 @@ module Gitlab @json_config_hash[current_key] = parsed_hash end + # Adds new model configuration to an existing hash with key +current_key+ + # It may include exceptions or other attribute detail configuration, parsed by +@attributes_finder+ + # +current_key+ main model that will be a key in the hash + # +value+ existing model to be included in the hash def add_model_value(current_key, value) @attributes_finder.parse(value) { |hash| value = { value => hash } } old_values = @json_config_hash[current_key][:include] @json_config_hash[current_key][:include] = ([old_values] + [value]).compact.flatten end + # Construct a new hash or merge with an existing one a model configuration + # This is to fulfil +to_json+ requirements. + # +value+ existing model to be included in the hash + # +hash+ hash containing configuration generated mainly from +@attributes_finder+ def hash_or_merge(value, hash) value.is_a?(Hash) ? value.merge(hash) : { value => hash } end |