Sha256: 21c4401494c3b8f122250a68eee0fc3599a36b3a75a28e80cbc8ef6cddb0988f

Contents?: true

Size: 1.22 KB

Versions: 15

Compression:

Stored size: 1.22 KB

Contents

require 'haveapi/go_client/utils'

module HaveAPI::GoClient
  class Parameters::Association
    include Utils

    # @return [Parameter]
    attr_reader :parameter

    # @return [String]
    attr_reader :go_type

    # @return [String]
    attr_reader :go_value_id

    # @return [String]
    attr_reader :go_value_label

    # @return [Resource]
    attr_reader :resource

    def initialize(param, desc)
      @parameter = param
      @resource = find_resource(desc[:resource])
      @go_type = resource.actions.detect { |a| a.name == 'show' }.output.go_type
      @go_value_id = camelize(desc[:value_id])
      @go_value_label = camelize(desc[:value_label])
    end

    protected

    def find_resource(path)
      root = parameter.io.action.resource.api_version
      path = path.clone

      loop do
        name = path.shift
        resource = root.resources.detect { |r| r.name == name }

        if resource.nil?
          raise "associated resource '#{name}' not found in " +
                (root.is_a?(ApiVersion) ? 'root' : root.resource_path.map(&:name).join('.'))

        elsif path.empty?
          return resource

        else
          root = resource
        end
      end

      raise 'programming error'
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
haveapi-go-client-0.26.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.25.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.24.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.7 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.6 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.5 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.4 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.3 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.2 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.23.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.22.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.22.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.21.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.21.0 lib/haveapi/go_client/parameters/association.rb