% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.

%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-

-module(dreyfus).

-export([available/0]).

available() ->
    case application:get_env(dreyfus, available) of
        {ok, Val} ->
            Val;
        undefined ->
            case clouseau_rpc:connected() of
                true ->
                    ok = application:set_env(dreyfus, available, true),
                    true;
                false ->
                    false
            end
    end.
