lib/gooddata/models/blueprint/attribute_field.rb in gooddata-0.6.49 vs lib/gooddata/models/blueprint/attribute_field.rb in gooddata-0.6.50
- old
+ new
@@ -1,16 +1,25 @@
# encoding: UTF-8
#
-# Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
+# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
require_relative 'blueprint_field'
module GoodData
module Model
class AttributeBlueprintField < BlueprintField
+ # Returns label that is considered referencing. It is either first one or the one marked
+ # with reference_label: true in blueprint
+ #
+ # @return [Array<GoodData::Model::LabelBlueprintField>] Returns list of labels
+ def reference_label
+ reference_label = labels.find { |label| label.respond_to?(:reference_label) && label.reference_label == true }
+ reference_label || labels.first
+ end
+
# Returns list of labels on the attribute. There has to be always at least one attribute
#
# @return [Array] returns list of the errors represented by hash structures
def labels
@dataset_blueprint.labels_for_attribute(self)
@@ -18,12 +27,19 @@
# Validates the fields in the attribute
#
# @return [Array] returns list of the errors represented by hash structures
def validate
- validate_presence_of(:id).map do |e|
+ errors = validate_presence_of(:id).map do |e|
{ type: :error, message: "Field \"#{e}\" is not defined or empty for attribute \"#{id}\"" }
end
+ if labels.select(&:reference_label?).count > 1
+ errors << {
+ type: :error,
+ message: "Anchor \"#{id}\" can have only one label with reference_label field set to true"
+ }
+ end
+ errors
end
end
end
end