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
15 16 17 18 19 20 21 22 23 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 15 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
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 33 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, :date_fact, :hll 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
57 58 59 60 61 62 63 64 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 57 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
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 73 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
94 95 96 97 98 99 100 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 94 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
105 106 107 108 109 110 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 105 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
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 119 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
168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 168 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).
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/gooddata/models/blueprint/to_manifest.rb', line 142 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 |