Sha256: 275325f01643b8aed142d7936c22bd8fd7864466e8213b4ef8a8c33c521d5549

Contents?: true

Size: 1.72 KB

Versions: 2

Compression:

Stored size: 1.72 KB

Contents

module Dag
  class ClusterCollection < Model
    include Enumerable
    include Dag::Client::ClusterValidation

    def initialize(api)
      super(api)
    end

    #
    # == Parameters ==
    # <tt>status</tt> - 'init', 'stopped', restarting, 'norm', 'failed', 'ptfailed', 'error', 'released'
    def where(params)
      validate_cluster_param_keys(params)

      @status = params[:status] if params[:status]
      @type = params[:type] if params[:type]
      @cluster_name = params[:cluster_name] if params[:cluster_name].present?

      self
    end

    def order(o)
      result = o.downcase.to_s
      unless ['asc', 'desc'].include?(result)
        raise Dag::Client::ParameterInvalid.new("Invalid order condition: #{o}")
      end

      @order = result

      self
    end

    def each
      marker = nil
      truncated = false
      begin
        cluster_info_list = @api.cluster_info_list(make_options(marker))
        cluster_info_list['clusters'].each do |cluster_info|
          yield Dag::Cluster.new(@api, cluster_info)
        end
        truncated = cluster_info_list['isTruncated']
        marker = cluster_info_list['nextMarker']
      end while truncated
    end

    private

    def make_options(marker = nil)
      options = { max: 100 }
      if marker
        options = options.merge(marker: marker)
      end

      if @order
        options = options.merge(order: @order)
      end

      if @status
        status = @status.respond_to?(:join) ? @status.join(",") : @status
        options = options.merge(status: status)
      end

      if @type
        options = options.merge(type: @type)
      end

      if @cluster_name
        options = options.merge(cluster_name: @cluster_name)
      end

      options
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
iij-dag-client-1.0.2 lib/dag/client/model/cluster_collection.rb
iij-dag-client-1.0.1 lib/dag/client/model/cluster_collection.rb