Module: GoodData::Model::ToManifest
- Defined in:
- lib/gooddata/models/blueprint/to_manifest.rb
Class Method Summary collapse
-
.attribute_to_manifest(_project, dataset, a, mode) ⇒ Hash
Converts attribute or anchor to manifest.
-
.column_to_manifest(project, dataset, c, mode) ⇒ Object
Sets the active project.
-
.dataset_to_manifest(project, dataset, mode = 'FULL') ⇒ Hash
Converts dataset into manifest.
-
.date_ref_to_manifest(project, _dataset, reference, mode) ⇒ Hash
Converts data reference to manifest.
-
.fact_to_manifest(_project, _dataset, fact, mode) ⇒ Hash
Converts fact to manifest.
-
.generate_upload_filename(dataset_path) ⇒ String
Generates safe name for upload.
-
.label_to_manifest(_project, dataset, label, mode) ⇒ Hash
Converts label to manifest.
-
.reference_to_manifest(project, _dataset, reference, mode) ⇒ Hash
Converts reference to manifest.
-
.to_manifest(project, mode = 'FULL') ⇒ Hash
The entry function of the module.
Class Method Details
.attribute_to_manifest(_project, dataset, a, mode) ⇒ Hash
Converts attribute or anchor to manifest
17 18 19 20 21 22 23 24 25 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 17 def self.attribute_to_manifest(_project, dataset, a, mode) labels = DatasetBlueprint.labels_for_attribute(dataset, a) [{ 'referenceKey' => 1, 'populates' => [labels.first[:id]], 'mode' => mode, 'columnName' => labels.first[:column_name] || labels.first[:id] }] end |
.column_to_manifest(project, dataset, c, mode) ⇒ Object
Sets the active project
Examples
The following calls are equivalent
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 35 def self.column_to_manifest(project, dataset, c, mode) case c[:type].to_sym when :label label_to_manifest(project, dataset, c, mode) when :fact fact_to_manifest(project, dataset, c, mode) when :date_fact fact_to_manifest(project, dataset, c, mode) when :reference reference_to_manifest(project, dataset, c, mode) when :date date_ref_to_manifest(project, dataset, c, mode) else [] end end |
.dataset_to_manifest(project, dataset, mode = 'FULL') ⇒ Hash
Converts dataset into manifest. Since for manifest of a dataset you need to have access to the whole project blueprint it requires both project and dataset blueprints. It generates the manifest for blueprint and then selects only the one for particular dataset
61 62 63 64 65 66 67 68 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 61 def self.dataset_to_manifest(project, dataset, mode = 'FULL') dataset = dataset.is_a?(String) ? Model::ProjectBlueprint.find_dataset(project, dataset) : dataset dataset = dataset.to_hash res = Model::ProjectBlueprint.datasets(project).zip(to_manifest(project, mode)).find do |ds| ds.first == dataset end res[1] end |
.date_ref_to_manifest(project, _dataset, reference, mode) ⇒ Hash
Converts data reference to manifest
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 77 def self.date_ref_to_manifest(project, _dataset, reference, mode) referenced_dataset = ProjectBlueprint.find_date_dimension(project, reference[:dataset]) ref = "#{referenced_dataset[:id]}.date.mdyy" format = reference[:format] || GoodData::Model::DEFAULT_DATE_FORMAT GoodData.logger.info("Using date format \"#{format}\" for referencing attribute \"#{ref}\" of date dimension \"#{referenced_dataset[:id]}\"") [{ 'populates' => [ref], 'mode' => mode, 'constraints' => { 'date' => format }, 'columnName' => reference[:column_name] || reference[:dataset], 'referenceKey' => 1 }] end |
.fact_to_manifest(_project, _dataset, fact, mode) ⇒ Hash
Converts fact to manifest
98 99 100 101 102 103 104 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 98 def self.fact_to_manifest(_project, _dataset, fact, mode) [{ 'populates' => [fact[:id]], 'mode' => mode, 'columnName' => fact[:column_name] || fact[:id] }] end |
.generate_upload_filename(dataset_path) ⇒ String
Generates safe name for upload
109 110 111 112 113 114 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 109 def self.generate_upload_filename(dataset_path) sanitized_name = dataset_path.gsub(/[^0-9a-z]/i, '_') # ts = DateTime.now.strftime('%Y%m%d%H%M%S%6N') # "#{sanitized_name}-#{ts}.csv" "#{sanitized_name}.csv" end |
.label_to_manifest(_project, dataset, label, mode) ⇒ Hash
Converts label to manifest
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 123 def self.label_to_manifest(_project, dataset, label, mode) a = DatasetBlueprint.attribute_for_label(dataset, label) labels = DatasetBlueprint.labels_for_attribute(dataset, a) label = {}.tap do |l| if labels.any? { |lab| lab.key?(:reference_label) } && label[:reference_label] == true l['referenceKey'] = 1 elsif labels.all? { |lab| !lab.key?(:reference_label) } && labels.first == label l['referenceKey'] = 1 end l['populates'] = [label[:id]] l['mode'] = mode l['columnName'] = label[:column_name] || label[:id] end [label] end |
.reference_to_manifest(project, _dataset, reference, mode) ⇒ Hash
Converts reference to manifest
172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 172 def self.reference_to_manifest(project, _dataset, reference, mode) referenced_dataset = ProjectBlueprint.find_dataset(project, reference[:dataset]) anchor = DatasetBlueprint.anchor(referenced_dataset) label = DatasetBlueprint.reference_label_for_attribtue(referenced_dataset, anchor) [{ 'populates' => [label[:id]], 'mode' => mode, 'columnName' => reference[:column_name] || reference[:dataset], 'referenceKey' => 1 }] end |
.to_manifest(project, mode = 'FULL') ⇒ Hash
The entry function of the module. Converts the ProjectBlueprint to manifest to be used with SLI (GD loading interface).
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 146 def self.to_manifest(project, mode = 'FULL') ProjectBlueprint.datasets(project.to_hash).map do |dataset| columns = GoodData::Model::DatasetBlueprint.columns(dataset) { 'dataSetSLIManifest' => { 'parts' => columns.mapcat { |c| column_to_manifest(project, dataset, c, mode) }, 'dataSet' => dataset[:id], 'file' => ToManifest.generate_upload_filename(dataset[:id]), # should be configurable 'csvParams' => { 'quoteChar' => '"', 'escapeChar' => '"', 'separatorChar' => ',', 'endOfLine' => "\n" } } } end end |