aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric <[email protected]>2012-09-04 16:23:49 -0500
committerEric <[email protected]>2012-09-04 16:23:49 -0500
commit6f6fd117cc8c7dd1f139fa7a8bfb53b0e670a968 (patch)
treefb89051084f8de435f0b80be627f00068ddb528c
parentdf2af59cc1e6dc215d722e778f4e8ea53929e87d (diff)
downloadrelx-6f6fd117cc8c7dd1f139fa7a8bfb53b0e670a968.tar.gz
relx-6f6fd117cc8c7dd1f139fa7a8bfb53b0e670a968.tar.bz2
relx-6f6fd117cc8c7dd1f139fa7a8bfb53b0e670a968.zip
the initial state management system
-rw-r--r--src/rcl_state.erl63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/rcl_state.erl b/src/rcl_state.erl
new file mode 100644
index 0000000..7175d1f
--- /dev/null
+++ b/src/rcl_state.erl
@@ -0,0 +1,63 @@
+%%% -*- mode: Erlang; fill-column: 80; comment-column: 75; -*-
+%%% Copyright 2012 Erlware, LLC. All Rights Reserved.
+%%%
+%%% This file is provided to you 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.
+%%%---------------------------------------------------------------------------
+%%% @author Eric Merritt <[email protected]>
+%%% @copyright (C) 2012 Erlware, LLC.
+%%%
+%%% @doc Provides state management services for the relcool tool. Generally,
+%%% those things that are fixed have a direct api. Those things that are mutable
+%%% have a more mutable api.
+-module(rcl_state).
+
+-export([new/1,
+ log/1]).
+
+-export_type([state/0]).
+
+-record(?MODULE, {log :: rcl_log:state()}).
+
+%%============================================================================
+%% types
+%%============================================================================
+-opaque state() :: record(?MODULE).
+
+%%============================================================================
+%% API
+%%============================================================================
+%% @doc Create a new 'log level' for the system
+-spec new(proplists:proplist()) -> state().
+new(PropList) when erlang:is_list(PropList) ->
+ #?MODULE{log = proplists:get_value(log, PropList, rcl_log:new(error))}.
+
+%% @doc get the current log state for the system
+-spec log(state()) -> rc_log:state().
+log(#?MODULE{log=LogState}) ->
+ LogState.
+
+%%%===================================================================
+%%% Test Functions
+%%%===================================================================
+
+-ifndef(NOTEST).
+-include_lib("eunit/include/eunit.hrl").
+
+new_test() ->
+ LogState = rcl_log:new(error),
+ RCLState = new([{log, LogState}]),
+ ?assertMatch(LogState, log(RCLState)).
+
+-endif.