class DTK::DSL::Template::V1::ComponentLink

Public Class Methods

elements_collection_type() click to toggle source

Canonical form is an array

# File lib/dsl/template/v1/component_link.rb, line 41
def self.elements_collection_type
  :hash
end
generate_elements(component_links_content, parent) click to toggle source

For generation

# File lib/dsl/template/v1/component_link.rb, line 68
def self.generate_elements(component_links_content, parent)
  # Parsing form can be a hash, but canonical form is an array
  component_links_content.map { |link_name, component_link| generate_canonical_element(link_name, component_link) }
end
parse_elements(input_hash, parent_info) click to toggle source
# File lib/dsl/template/v1/component_link.rb, line 45
def self.parse_elements(input_hash, parent_info)
  input_hash.inject(file_parser_output_hash) do |h, (name, value)|
    h.merge(name => parse_element({ 'value' => value}, parent_info, :index => name))
  end
end
parse_transform_to_hash_form(input_links, parent) click to toggle source
# File lib/dsl/template/v1/component_link.rb, line 57
def self.parse_transform_to_hash_form(input_links, parent)
  if input_links.kind_of?(::Hash)
    input_links
  elsif input_links.kind_of?(::Array)
    input_links.inject(empty_input_hash) { |h, link| h.merge(ComponentLink.parse_transform_link_to_hash_form(link, parent)) }
  else
    raise parent.parsing_error(:WrongObjectType, input_links, [::Hash, ::Array])
  end
end

Private Class Methods

dependent_component_ref(component_link) click to toggle source
# File lib/dsl/template/v1/component_link.rb, line 107
def self.dependent_component_ref(component_link)
  component_ref = component_link.req(:Value)
  if external_service_name = component_link.val(:ExternalServiceName)
    ExternalServiceName.dependent_component_ref(external_service_name, component_ref)
  else
    component_ref
  end
end
generate_canonical_element(link_name, component_link) click to toggle source
# File lib/dsl/template/v1/component_link.rb, line 98
def self.generate_canonical_element(link_name, component_link)
  dependent_ref = dependent_component_ref(component_link)
  if ImplicitLinkName.implicit_link_name(dependent_ref) == link_name
    dependent_ref
  else
    { link_name => dependent_ref }
  end
end

Public Instance Methods

parse!() click to toggle source
# File lib/dsl/template/v1/component_link.rb, line 51
def parse!
  dependency, external_service_name = parse_value
  set :Value, dependency
  set? :ExternalServiceName, external_service_name
end
parser_output_type() click to toggle source

For parsing

# File lib/dsl/template/v1/component_link.rb, line 36
def parser_output_type
  :hash
end

Private Instance Methods

parse_value() click to toggle source

returns [dependency, external_service_name]; second can be nil

# File lib/dsl/template/v1/component_link.rb, line 86
def parse_value
  dependency = external_service_name = nil

  string = input_key_value(:Value)
  # only the service instance dsl can have external service name
  if file_obj.file_type < FileType::ServiceInstance
    dependency, external_service_name = ExternalServiceName.parse?(string)
  end
  dependency ||= string
  [dependency, external_service_name]
end