Sha256: 00fa322c0004e3cdbdee365e1909fc3aa312bcdb1de84c1ad60cde2023159e8a

Contents?: true

Size: 1.56 KB

Versions: 8

Compression:

Stored size: 1.56 KB

Contents

module Capistrano
  class Configuration
    class Servers
      class RoleFilter

        def initialize(required, available)
          @required, @available = required, available
        end

        def self.for(required, available)
          new(required, available).roles
        end

        def roles
          if required.include?(:all)
            available
          else
            required.select { |name| available.include? name }
          end
        end

        private

        def required
          Array(@required).flat_map(&:to_sym)
        end

        def available
          if role_filter.any?
            role_filter
          else
            @available
          end
        end

        def role_filter
          env_filter | configuration_filter
        end

        def configuration_filter
          ConfigurationFilter.new.roles
        end

        def env_filter
          EnvFilter.new.roles
        end

        class ConfigurationFilter

          def roles
            if filter
              Array(filter.fetch(:roles, [])).map(&:to_sym)
            else
              []
            end
          end

          def config
            Configuration.env
          end

          def filter
            config.fetch(:filter) || config.fetch(:select)
          end
        end


        class EnvFilter

          def roles
            if filter
              filter.split(',').map(&:to_sym)
            else
              []
            end
          end

          def filter
            ENV['ROLES']
          end
        end

      end
    end
  end
end

Version data entries

8 entries across 6 versions & 2 rubygems

Version Path
honeybadger-2.4.0 vendor/gems/ruby/1.9.1/gems/capistrano-3.2.1/lib/capistrano/configuration/servers/role_filter.rb
honeybadger-2.4.0 vendor/gems/ruby/2.2.0/gems/capistrano-3.2.1/lib/capistrano/configuration/servers/role_filter.rb
honeybadger-2.4.0 vendor/gems/ruby/2.1.0/gems/capistrano-3.2.1/lib/capistrano/configuration/servers/role_filter.rb
capistrano-3.2.1 lib/capistrano/configuration/servers/role_filter.rb
capistrano-3.2.0 lib/capistrano/configuration/servers/role_filter.rb
capistrano-3.1.0 lib/capistrano/configuration/servers/role_filter.rb
capistrano-3.0.1 lib/capistrano/configuration/servers/role_filter.rb
capistrano-3.0.0 lib/capistrano/configuration/servers/role_filter.rb