dice-cyfronet/atmosphere

View on GitHub
app/abilities/atmosphere/appliance_ability_builder.rb

Summary

Maintainability
A
0 mins
Test Coverage
#
# Appliance abilities.
#
module Atmosphere
  class ApplianceAbilityBuilder < AbilityBuilder
    include Atmosphere::ApplianceAbilityBuilderExt

    def add_user_abilities!
      can [:read, :update, :destroy, :endpoints, :action],
          Appliance, appliance_set: { user_id: user.id }

      can :create, Appliance do |appl|
        appl.owned_by?(user) &&
          appl.appliance_type.appropriate_for?(appl.appliance_set) &&
            can_start?(appl) &&
              can_start_ext?(appl)
      end

      can :reboot, Appliance, appliance_set: {
          user_id: user.id, appliance_set_type: 'development'
      }

      can :scale, Appliance, appliance_set: {
          user_id: user.id
      }
    end

    def add_developer_abilities!
      can :save_vm_as_tmpl, Appliance,
          appliance_set: { user_id: user.id, appliance_set_type: 'development' }
    end

    private

    def can_start?(appliance)
      at = appliance.appliance_type
      if appliance.development?
        @pdp_class.new(user).can_start_in_development?(at)
      else
        @pdp_class.new(user).can_start_in_production?(at)
      end
    end
  end
end