Sha256: 6edd3bf47418eb2ca9ce0afd9edb0e513ea10dc8d30bca64034ee9c9cdb94d04

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 KB

Contents

module Capabilities
  extend ActiveSupport::Concern

  included do
    has_one :capabilities, :class_name => 'rest_api/base/attribute_hash'
    include Helpers
  end

  def gear_sizes
    @gear_sizes ||= capabilities[:gear_sizes].map(&:to_sym)
  end

  def to_capabilities
    Capabilities::Cacheable.from(self)
  end

  module Helpers
    def gears_free?
      gears_free > 0
    end

    def gears_free
      [max_gears - consumed_gears, 0].max
    end
  end

  class Cacheable
    include Helpers

    # Changing this order will break serialization of cached data
    ATTRS = [:max_gears, :consumed_gears, :gear_sizes].each{ |s| attr_reader s }

    def initialize(*args)
      arg = args.each
      ATTRS.each{ |t| send("#{t}=", arg.next) }
    rescue StopIteration
    end

    def self.from(obj)
      new(*(obj.is_a?(Array) ? obj : ATTRS.map{ |s| obj.send(s) })) if obj
    end

    def to_capabilities
      self
    end

    def to_a
      ATTRS.map{ |s| send(s) }
    end

    private
      def max_gears=(i)
        @max_gears = Integer(i)
      end
      def consumed_gears=(i)
        @consumed_gears = Integer(i)
      end
      def gear_sizes=(arr)
        @gear_sizes = Array(arr)
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
openshift-origin-console-1.3.4 app/models/capabilities.rb
openshift-origin-console-1.3.3 app/models/capabilities.rb
openshift-origin-console-1.3.2 app/models/capabilities.rb