otp_kickoff 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +16 -10
- data/VERSION +1 -1
- data/lib/otp_kickoff.rb +70 -14
- data/otp_kickoff.gemspec +6 -5
- data/resources/{template_app.app → template.app} +4 -4
- data/resources/template_app.erl +3 -3
- data/resources/template_appstart.erl +3 -3
- data/resources/template_handler.erl +31 -18
- data/resources/template_include.hrl +3 -3
- data/resources/template_server.erl +8 -13
- data/resources/template_sup.erl +10 -10
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -1,20 +1,14 @@
|
|
1
1
|
= otp_kickoff
|
2
2
|
|
3
|
-
Simple generator to kick off Erlang/OTP projects.
|
3
|
+
Simple generator to kick off Erlang/OTP projects quickly.
|
4
4
|
|
5
5
|
== Install and configuration
|
6
6
|
|
7
|
-
Install the
|
7
|
+
Install the otp_kickoff gem:
|
8
8
|
|
9
|
-
sudo gem install gemcutter
|
9
|
+
sudo gem install otp_kickoff -s http://gemcutter.org
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
Next, install the otp_kickoff:
|
14
|
-
|
15
|
-
sudo gem install otp_kickoff
|
16
|
-
|
17
|
-
Finally, configure your preferences:
|
11
|
+
And finally, configure your preferences:
|
18
12
|
|
19
13
|
otp_kickoff configure --name=leandro --email=leandrodoze@gmail.com
|
20
14
|
|
@@ -41,6 +35,18 @@ That will generate:
|
|
41
35
|
|
42
36
|
Enjoy a lot with Erlang/OTP programming!
|
43
37
|
|
38
|
+
== Help
|
39
|
+
|
40
|
+
If you need some help, type:
|
41
|
+
|
42
|
+
otp_kickoff help
|
43
|
+
|
44
|
+
For a specific command:
|
45
|
+
|
46
|
+
otp_kickoff help new_application
|
47
|
+
|
48
|
+
And so on...
|
49
|
+
|
44
50
|
== Copyright
|
45
51
|
|
46
52
|
Copyright (c) 2009 Leandro Silva. See LICENSE for details.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/lib/otp_kickoff.rb
CHANGED
@@ -6,6 +6,7 @@ require 'yaml'
|
|
6
6
|
# Path to configuration file
|
7
7
|
#
|
8
8
|
CONFIGURATION_FILE = '~/.otp_kickoff'
|
9
|
+
TODAY = Date.today
|
9
10
|
|
10
11
|
#
|
11
12
|
# Thor classes, the magic of tasks!
|
@@ -29,12 +30,15 @@ class OTPKickOff < Thor
|
|
29
30
|
# Tasks
|
30
31
|
#
|
31
32
|
|
32
|
-
no_tasks { attr_accessor :
|
33
|
+
no_tasks { attr_accessor :author_name, :author_email }
|
34
|
+
|
35
|
+
no_tasks { attr_accessor :application_name, :supervisor_name, :server_name, :handler_name }
|
33
36
|
|
34
37
|
# task: configure
|
35
38
|
|
36
|
-
desc 'configure
|
37
|
-
|
39
|
+
desc 'configure', 'configure informations about author'
|
40
|
+
method_option :author, :type => :string, :required => true
|
41
|
+
method_option :email, :type => :string, :required => true
|
38
42
|
|
39
43
|
def configure
|
40
44
|
#set data about author
|
@@ -51,33 +55,85 @@ author_email: #{author_email}
|
|
51
55
|
|
52
56
|
# task: new_application
|
53
57
|
|
54
|
-
desc 'new_application
|
55
|
-
|
58
|
+
desc 'new_application', 'generate a new Erlang/OTP application stub'
|
59
|
+
method_option :name, :type => :string, :required => true, :aliases => "-n"
|
56
60
|
|
57
61
|
def new_application
|
58
62
|
# set data to templates
|
59
63
|
@application_name = options[:name]
|
64
|
+
@supervisor_name = @application_name
|
65
|
+
@server_name = @application_name
|
60
66
|
|
61
|
-
|
62
|
-
|
63
|
-
@author_email = config_info.author_email
|
64
|
-
|
65
|
-
@today = Date.today
|
66
|
-
|
67
|
+
@author_name, @author_email = get_config_info
|
68
|
+
|
67
69
|
# generate templates
|
68
|
-
template 'resources/
|
70
|
+
template 'resources/template.app', "#{application_name}/src/#{application_name}.app"
|
69
71
|
template 'resources/template_app.erl', "#{application_name}/src/#{application_name}_app.erl"
|
70
72
|
template 'resources/template_sup.erl', "#{application_name}/src/#{application_name}_sup.erl"
|
71
73
|
template 'resources/template_server.erl', "#{application_name}/src/#{application_name}_server.erl"
|
72
|
-
template 'resources/template_handler.erl', "#{application_name}/src/#{application_name}_handler.erl"
|
73
74
|
template 'resources/template_appstart.erl', "#{application_name}/src/#{application_name}.erl"
|
74
75
|
template 'resources/template_include.hrl', "#{application_name}/src/#{application_name}.hrl"
|
75
|
-
|
76
|
+
|
76
77
|
# create required directories
|
77
78
|
empty_directory "#{application_name}/ebin"
|
78
79
|
empty_directory "#{application_name}/deps"
|
79
80
|
empty_directory "#{application_name}/priv"
|
80
81
|
end
|
82
|
+
|
83
|
+
# task: new_supervisor
|
84
|
+
|
85
|
+
desc 'new_supervisor', 'generate a new Erlang/OTP supervisor stub'
|
86
|
+
method_option :name, :type => :string, :required => true, :aliases => "-n"
|
87
|
+
method_option :application_name, :type => :string, :required => true, :aliases => "-a"
|
88
|
+
|
89
|
+
def new_supervisor
|
90
|
+
# set data to templates
|
91
|
+
@supervisor_name = options[:name]
|
92
|
+
@application_name = options[:application_name]
|
93
|
+
|
94
|
+
@author_name, @author_email = get_config_info
|
95
|
+
|
96
|
+
# generate templates
|
97
|
+
template 'resources/template_sup.erl', "#{supervisor_name}_sup.erl"
|
98
|
+
end
|
99
|
+
|
100
|
+
# task: new_gen_server
|
101
|
+
|
102
|
+
desc 'new_gen_server', 'generate a new Erlang/OTP gen_server stub'
|
103
|
+
method_option :name, :type => :string, :required => true, :aliases => "-n"
|
104
|
+
|
105
|
+
def new_gen_server
|
106
|
+
# set data to templates
|
107
|
+
@server_name = options[:name]
|
108
|
+
|
109
|
+
@author_name, @author_email = get_config_info
|
110
|
+
|
111
|
+
# generate templates
|
112
|
+
template 'resources/template_server.erl', "#{server_name}_server.erl"
|
113
|
+
end
|
114
|
+
|
115
|
+
# task: new_gen_server
|
116
|
+
|
117
|
+
desc 'new_event_handler', 'generate a new Erlang/OTP gen_event handler stub'
|
118
|
+
method_option :name, :type => :string, :required => true, :aliases => "-n"
|
119
|
+
|
120
|
+
def new_event_handler
|
121
|
+
# set data to templates
|
122
|
+
@handler_name = options[:name]
|
123
|
+
|
124
|
+
@author_name, @author_email = get_config_info
|
125
|
+
|
126
|
+
# generate templates
|
127
|
+
template 'resources/template_handler.erl', "#{handler_name}_handler.erl"
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
def get_config_info
|
133
|
+
config_info = ConfigInfo.new
|
134
|
+
|
135
|
+
return config_info.author_name, config_info.author_email
|
136
|
+
end
|
81
137
|
end
|
82
138
|
|
83
139
|
#
|
data/otp_kickoff.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{otp_kickoff}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Leandro Silva"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-12-05}
|
13
13
|
s.default_executable = %q{otp_kickoff}
|
14
14
|
s.email = %q{leandrodoze@gmail.com}
|
15
15
|
s.executables = ["otp_kickoff"]
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"bin/otp_kickoff",
|
28
28
|
"lib/otp_kickoff.rb",
|
29
29
|
"otp_kickoff.gemspec",
|
30
|
-
"resources/
|
30
|
+
"resources/template.app",
|
31
31
|
"resources/template_app.erl",
|
32
32
|
"resources/template_appstart.erl",
|
33
33
|
"resources/template_handler.erl",
|
@@ -63,3 +63,4 @@ Gem::Specification.new do |s|
|
|
63
63
|
s.add_dependency(%q<thor>, [">= 0"])
|
64
64
|
end
|
65
65
|
end
|
66
|
+
|
@@ -1,16 +1,16 @@
|
|
1
1
|
%%
|
2
2
|
%% Resource application file
|
3
3
|
%%
|
4
|
-
%% File : <%=application_name
|
5
|
-
%% Created: <%=
|
4
|
+
%% File : <%=application_name%>.app
|
5
|
+
%% Created: <%=TODAY%>
|
6
6
|
%%
|
7
7
|
%% @author <%=author_name%> <<%=author_email%>>
|
8
|
-
%% @copyright <%=
|
8
|
+
%% @copyright <%=TODAY.year%> <%=author_name%>
|
9
9
|
%%
|
10
10
|
%% @doc TODO make nice description
|
11
11
|
%%
|
12
12
|
|
13
|
-
{application, <%=application_name
|
13
|
+
{application, <%=application_name%>,
|
14
14
|
[{description, "<%=application_name.capitalize%> application version 1.0"},
|
15
15
|
{vsn, "1.0"},
|
16
16
|
{modules, [<%=application_name%>_sup, <%=application_name%>_app, <%=application_name%>_server]},
|
data/resources/template_app.erl
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
%%
|
2
2
|
%% Application module
|
3
3
|
%%
|
4
|
-
%% File : <%=application_name%>
|
5
|
-
%% Created: <%=
|
4
|
+
%% File : <%=application_name%>_app.erl
|
5
|
+
%% Created: <%=TODAY%>
|
6
6
|
%%
|
7
7
|
%% @author <%=author_name%> <<%=author_email%>>
|
8
|
-
%% @copyright <%=
|
8
|
+
%% @copyright <%=TODAY.year%> <%=author_name%>
|
9
9
|
%%
|
10
10
|
%% @doc TODO make nice description
|
11
11
|
%%
|
@@ -1,11 +1,11 @@
|
|
1
1
|
%%
|
2
2
|
%% Start application module
|
3
3
|
%%
|
4
|
-
%% File : <%=application_name
|
5
|
-
%% Created: <%=
|
4
|
+
%% File : <%=application_name%>.erl
|
5
|
+
%% Created: <%=TODAY%>
|
6
6
|
%%
|
7
7
|
%% @author <%=author_name%> <<%=author_email%>>
|
8
|
-
%% @copyright <%=
|
8
|
+
%% @copyright <%=TODAY.year%> <%=author_name%>
|
9
9
|
%%
|
10
10
|
%% @doc TODO make nice description
|
11
11
|
%%
|
@@ -1,35 +1,48 @@
|
|
1
1
|
%%
|
2
|
-
%% Handler module
|
2
|
+
%% Handler module used by event manager to deal with events
|
3
3
|
%%
|
4
|
-
%% File : <%=
|
5
|
-
%% Created: <%=
|
4
|
+
%% File : <%=handler_name%>_handler.erl
|
5
|
+
%% Created: <%=TODAY%>
|
6
6
|
%%
|
7
7
|
%% @author <%=author_name%> <<%=author_email%>>
|
8
|
-
%% @copyright <%=
|
8
|
+
%% @copyright <%=TODAY.year%> <%=author_name%>
|
9
9
|
%%
|
10
10
|
%% @doc TODO make nice description
|
11
11
|
%%
|
12
12
|
|
13
|
-
-module(<%=
|
13
|
+
-module(<%=handler_name%>_handler).
|
14
14
|
-author('<%=author_name%> <<%=author_email%>>').
|
15
15
|
|
16
|
-
-
|
16
|
+
-behahiour(gen_event).
|
17
|
+
|
18
|
+
-export([init/1, terminate/1, handle_event/2, handle_call/2, handle_info/2, code_change/3]).
|
17
19
|
|
18
20
|
%% @spec init(State) -> State
|
19
|
-
%% @doc
|
20
|
-
init(State) ->
|
21
|
+
%% @doc Callback for initialize the <%=handler_name%>_handler
|
22
|
+
init(State) ->
|
23
|
+
{ok, State}.
|
21
24
|
|
22
|
-
%% @spec terminate(State) -> State
|
23
|
-
%% @doc
|
25
|
+
%% @spec terminate(State) -> {ok, State}
|
26
|
+
%% @doc Callback for cleanup the handler
|
24
27
|
terminate(State) ->
|
25
28
|
{ok, State}.
|
26
29
|
|
27
|
-
%% @spec handle_event(
|
28
|
-
%% @doc
|
29
|
-
handle_event({event, _Event}, State) ->
|
30
|
-
{ok, State};
|
31
|
-
|
32
|
-
%% @spec handle_event(_Event, State) -> State
|
33
|
-
%% @doc Handle event "catch" function
|
30
|
+
%% @spec handle_event(_Event, State) -> {ok, State}
|
31
|
+
%% @doc Callback for notified events on gen_event
|
34
32
|
handle_event(_Event, State) ->
|
35
|
-
State.
|
33
|
+
{ok, State}.
|
34
|
+
|
35
|
+
%% @spec handle_call(_Request, State) -> {ok, Reply, State}
|
36
|
+
%% @doc Callback for specific calls for this handler
|
37
|
+
handle_call(_Request, State) ->
|
38
|
+
{ok, noreply, State}.
|
39
|
+
|
40
|
+
%% @spec handle_info(_Info, State) -> {ok, State}
|
41
|
+
%% @doc Callback for unknow messages by the gen_event
|
42
|
+
handle_info(_Info, State) ->
|
43
|
+
{ok, State}.
|
44
|
+
|
45
|
+
%% @spec code_change(_OldVsn, State, _Extra) -> {ok, State}
|
46
|
+
%% @doc Callback for update internal state during upgrade/downgrade
|
47
|
+
code_change(_OldVsn, State, _Extra) ->
|
48
|
+
{ok, State}.
|
@@ -1,11 +1,11 @@
|
|
1
1
|
%%
|
2
2
|
%% Include file
|
3
3
|
%%
|
4
|
-
%% File : <%=application_name%>
|
5
|
-
%% Created: <%=
|
4
|
+
%% File : <%=application_name%>_include.erl
|
5
|
+
%% Created: <%=TODAY%>
|
6
6
|
%%
|
7
7
|
%% @author <%=author_name%> <<%=author_email%>>
|
8
|
-
%% @copyright <%=
|
8
|
+
%% @copyright <%=TODAY.year%> <%=author_name%>
|
9
9
|
%%
|
10
10
|
%% @doc TODO make nice description
|
11
11
|
%%
|
@@ -1,16 +1,16 @@
|
|
1
1
|
%%
|
2
2
|
%% Supervised worker process module
|
3
3
|
%%
|
4
|
-
%% File : <%=
|
5
|
-
%% Created: <%=
|
4
|
+
%% File : <%=server_name%>_server.erl
|
5
|
+
%% Created: <%=TODAY%>
|
6
6
|
%%
|
7
7
|
%% @author <%=author_name%> <<%=author_email%>>
|
8
|
-
%% @copyright <%=
|
8
|
+
%% @copyright <%=TODAY.year%> <%=author_name%>
|
9
9
|
%%
|
10
10
|
%% @doc TODO make nice description
|
11
11
|
%%
|
12
12
|
|
13
|
-
-module(<%=
|
13
|
+
-module(<%=server_name%>_server).
|
14
14
|
-author('<%=author_name%> <<%=author_email%>>').
|
15
15
|
|
16
16
|
-behaviour(gen_server).
|
@@ -26,22 +26,17 @@
|
|
26
26
|
%% Operation & Maintenance API
|
27
27
|
%%
|
28
28
|
|
29
|
-
%% @spec start_link() ->
|
30
|
-
%% @doc Start the
|
29
|
+
%% @spec start_link() -> {ok, Pid}
|
30
|
+
%% @doc Start the <%=server_name%>_server
|
31
31
|
start_link() ->
|
32
32
|
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
33
|
-
|
34
|
-
%% @spec stop() -> ServerReturn
|
35
|
-
%% @doc Stopt the server for <%=application_name%>
|
36
|
-
stop() ->
|
37
|
-
gen_server:cast(?MODULE, stop).
|
38
33
|
|
39
34
|
%%
|
40
35
|
%% Genserver callback functions
|
41
36
|
%%
|
42
37
|
|
43
38
|
%% @spec init(State) -> {ok, State}
|
44
|
-
%% @doc Callback for initialize the
|
39
|
+
%% @doc Callback for initialize the <%=server_name%>_server
|
45
40
|
init(State) ->
|
46
41
|
{ok, State}.
|
47
42
|
|
@@ -62,7 +57,7 @@ handle_cast(_Msg, State) ->
|
|
62
57
|
{noreply, State}.
|
63
58
|
|
64
59
|
%% @spec handle_info(_Info, State) -> {noreply, State}
|
65
|
-
%% @doc Callback for
|
60
|
+
%% @doc Callback for timeout or other unreconized messages
|
66
61
|
handle_info(_Info, State) ->
|
67
62
|
{noreply, State}.
|
68
63
|
|
data/resources/template_sup.erl
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
%%
|
2
2
|
%% Supervisor module
|
3
3
|
%%
|
4
|
-
%% File : <%=
|
5
|
-
%% Created: <%=
|
4
|
+
%% File : <%=supervisor_name%>_sup.erl
|
5
|
+
%% Created: <%=TODAY%>
|
6
6
|
%%
|
7
7
|
%% @author <%=author_name%> <<%=author_email%>>
|
8
|
-
%% @copyright <%=
|
8
|
+
%% @copyright <%=TODAY.year%> <%=author_name%>
|
9
9
|
%%
|
10
10
|
%% @doc TODO make nice description
|
11
11
|
%%
|
12
12
|
|
13
|
-
-module(<%=
|
13
|
+
-module(<%=supervisor_name%>_sup).
|
14
14
|
-author('<%=author_name%> <<%=author_email%>>').
|
15
15
|
|
16
16
|
-behaviour(supervisor).
|
@@ -27,8 +27,8 @@
|
|
27
27
|
%% Operation & Maintenance API
|
28
28
|
%%
|
29
29
|
|
30
|
-
%% @spec start_link() ->
|
31
|
-
%% @doc Start the
|
30
|
+
%% @spec start_link() -> {ok, Pid}
|
31
|
+
%% @doc Start the <%=supervisor_name%>_sup for <%=application_name%> application
|
32
32
|
start_link() ->
|
33
33
|
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
|
34
34
|
|
@@ -36,12 +36,12 @@ start_link() ->
|
|
36
36
|
%% Supervisor callback function
|
37
37
|
%%
|
38
38
|
|
39
|
-
%% @spec init([]) ->
|
40
|
-
%% @doc Callback for initialize the
|
39
|
+
%% @spec init([]) -> {ok, {{RestartStrategy, MaxRestart, MaxTime}, [ChildSpec]}}
|
40
|
+
%% @doc Callback for initialize the <%=supervisor_name%>_sup for <%=application_name%> application
|
41
41
|
init([]) ->
|
42
42
|
%% <%=application_name%>_server is a supervisioned child process
|
43
|
-
Server = {<%=application_name%>
|
44
|
-
{<%=application_name%>_server, start_link, []},permanent,
|
43
|
+
Server = {<%=application_name%>_server,
|
44
|
+
{<%=application_name%>_server, start_link, []}, permanent, brutal_kill, worker, [<%=application_name%>_server]},
|
45
45
|
|
46
46
|
%% Restart strategies for childs
|
47
47
|
{ok, {{one_for_one, 10, 1}, [Server]}}.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: otp_kickoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Silva
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-05 00:00:00 -08:00
|
13
13
|
default_executable: otp_kickoff
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -51,7 +51,7 @@ files:
|
|
51
51
|
- bin/otp_kickoff
|
52
52
|
- lib/otp_kickoff.rb
|
53
53
|
- otp_kickoff.gemspec
|
54
|
-
- resources/
|
54
|
+
- resources/template.app
|
55
55
|
- resources/template_app.erl
|
56
56
|
- resources/template_appstart.erl
|
57
57
|
- resources/template_handler.erl
|