Sha256: b94cbd4398203a81d061d5b7cef2691a4e6a700785aa6d23fb238a5b1e577848

Contents?: true

Size: 1.21 KB

Versions: 22

Compression:

Stored size: 1.21 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?
          fail "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

      fail 'programming error'
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
haveapi-go-client-0.20.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.19.3 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.19.2 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.19.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.19.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.18.2 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.18.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.18.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.17.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.16.3 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.16.2 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.16.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.16.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.15.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.15.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.14.2 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.14.1 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.14.0 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.13.3 lib/haveapi/go_client/parameters/association.rb
haveapi-go-client-0.13.2 lib/haveapi/go_client/parameters/association.rb