소스 검색

Add application files and event access module.

pull/1/head
Magnus Klaar 13 년 전
부모
커밋
3ab6e09c8c
4개의 변경된 파일156개의 추가작업 그리고 0개의 파일을 삭제
  1. +8
    -0
      src/goldrush.app.src
  2. +27
    -0
      src/gr_app.erl
  3. +26
    -0
      src/gr_sup.erl
  4. +95
    -0
      src/gre.erl

+ 8
- 0
src/goldrush.app.src 파일 보기

@ -0,0 +1,8 @@
{application, goldrush, [
{description, ""},
{vsn, "0.1.0"},
{registered, []},
{applications, [kernel, stdlib, syntax_tools]},
{mod, {gr_app, []}},
{env, []}
]}.

+ 27
- 0
src/gr_app.erl 파일 보기

@ -0,0 +1,27 @@
%% Copyright (c) 2012, Magnus Klaar <klaar@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
%% copyright notice and this permission notice appear in all copies.
%%
%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-module(gr_app).
-behaviour(application).
-export([
start/2,
stop/1
]).
start(_Type, _Args) ->
gr_sup:start_link().
stop(_State) ->
ok.

+ 26
- 0
src/gr_sup.erl 파일 보기

@ -0,0 +1,26 @@
%% Copyright (c) 2012, Magnus Klaar <klaar@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
%% copyright notice and this permission notice appear in all copies.
%%
%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
%% @doc Top level supervisor for goldrush.
-module(gr_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
{ok, {{one_for_all, 5, 10}, []}}.

+ 95
- 0
src/gre.erl 파일 보기

@ -0,0 +1,95 @@
%% Copyright (c) 2012, Magnus Klaar <klaar@ninenines.eu>
%%
%% Permission to use, copy, modify, and/or distribute this software for any
%% purpose with or without fee is hereby granted, provided that the above
%% copyright notice and this permission notice appear in all copies.
%%
%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
%% @doc Accessor function for goldrush event terms.
-module(gre).
-export([
make/2,
has/2,
fetch/2,
find/2,
keys/1,
pairs/1
]).
-type event() :: {list, [{atom(), term()}]}.
-export_types([event/0]).
%% @doc Construct an event term.
-spec make(term(), [list]) -> event().
make(Term, [Type]) ->
{Type, Term}.
%% @doc Check if a field exists in an event.
-spec has(atom(), event()) -> boolean().
has(Key, {list, List}) ->
lists:keymember(Key, 1, List).
%% @doc Get the value of a field in an event.
%% The field is expected to exist in the event.
-spec fetch(atom(), event()) -> term().
fetch(Key, {list, List}=Event) ->
case lists:keyfind(Key, 1, List) of
{_, Value} -> Value;
false -> erlang:error(badarg, [Key, Event])
end.
%% @doc Find the value of a field in an event.
%% This is equivalent to testing if a field exists using {@link has/2}
%% before accessing the value of the field using {@link fetch/2}.
-spec find(atom(), event()) -> {true, term()} | false.
find(Key, {list, List}) ->
case lists:keyfind(Key, 1, List) of
{_, Value} -> {true, Value};
false -> false
end.
%% @doc Get the names of all fields in an event.
-spec keys(event()) -> [atom()].
keys({list, List}) ->
kv_keys_(List).
%% @private Get the names of all fields in a key-value list.
-spec kv_keys_([{atom(), term()}]) -> [atom()].
kv_keys_([{Key, _}|T]) ->
[Key|kv_keys_(T)];
kv_keys_([]) ->
[].
%% @doc Get the name and value of all fields in an event.
-spec pairs(event()) -> [{atom(), term()}].
pairs({list, List}) ->
lists:sort(List).
-ifdef(TEST).
-include_lib("eunit/include/eunit.hrl").
gre_test_() ->
[?_assert(gre:has(a, gre:make([{a,1}], [list]))),
?_assertNot(gre:has(b, gre:make([{a,1}], [list]))),
?_assertEqual(1, gre:fetch(a, gre:make([{a,1}], [list]))),
?_assertError(badarg, gre:fetch(a, gre:make([], [list]))),
?_assertEqual([], gre:keys(gre:make([], [list]))),
?_assertEqual([a], gre:keys(gre:make([{a,1}], [list]))),
?_assertEqual([a,b], gre:keys(gre:make([{a,1},{b,2}], [list]))),
?_assertEqual([{a,1},{b,2}], gre:pairs(gre:make([{b,2},{a,1}], [list])))
].
-endif.

불러오는 중...
취소
저장