skelerl 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/History.txt +4 -0
- data/README.txt +48 -0
- data/Rakefile +11 -0
- data/VERSION.yml +4 -0
- data/bin/gen_server +17 -0
- data/bin/makefile +17 -0
- data/bin/skelerl +60 -0
- data/bin/skelerl-gen_server +29 -0
- data/bin/skelerl-makefile +29 -0
- data/config/jeweler.rb +41 -0
- data/config/requirements.rb +15 -0
- data/generators/appfile/USAGE +5 -0
- data/generators/appfile/appfile_generator.rb +61 -0
- data/generators/appfile/templates/appfile.app +19 -0
- data/generators/gen_server/USAGE +7 -0
- data/generators/gen_server/gen_server_generator.rb +65 -0
- data/generators/gen_server/templates/README.txt +1 -0
- data/generators/gen_server/templates/Rakefile +1 -0
- data/generators/gen_server/templates/gen_server.erl +107 -0
- data/generators/gen_server/templates/gitignore +3 -0
- data/generators/makefile/USAGE +5 -0
- data/generators/makefile/makefile_generator.rb +68 -0
- data/generators/makefile/templates/Emakefile +5 -0
- data/generators/makefile/templates/Makefile +31 -0
- data/generators/makefile/templates/appfile.app.erb +19 -0
- data/generators/makefile/templates/make_boot.erl.erb +29 -0
- data/generators/makefile/templates/start.sh +4 -0
- data/generators/skeleton/USAGE +7 -0
- data/generators/skeleton/skeleton_generator.rb +91 -0
- data/generators/skeleton/templates/README.txt +1 -0
- data/generators/skeleton/templates/Rakefile +1 -0
- data/generators/skeleton/templates/gitignore +3 -0
- data/script/generate +14 -0
- data/tasks/build.rake +152 -0
- data/tasks/environment.rake +7 -0
- data/tasks/generate.rake +5 -0
- data/tasks/website.rake +17 -0
- metadata +103 -0
data/History.txt
ADDED
data/README.txt
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
= skelerl
|
2
|
+
|
3
|
+
== SYNOPSIS:
|
4
|
+
|
5
|
+
Skeleton Erlang application
|
6
|
+
|
7
|
+
This is a basic skeleton for erlang applications.
|
8
|
+
|
9
|
+
This skeleton app takes care of everything you'd need in an erlang application, hopefully!
|
10
|
+
|
11
|
+
h2. Building an application
|
12
|
+
1. Include the source code in the src/ directory.
|
13
|
+
2. Add your .app file to the ebin/ directory.
|
14
|
+
3. Type: ./bin/build-app [name] [version]
|
15
|
+
4. There is no fourth step
|
16
|
+
|
17
|
+
Erlang start script in ruby
|
18
|
+
|
19
|
+
Example coming shortly
|
20
|
+
|
21
|
+
== INSTALL:
|
22
|
+
|
23
|
+
sudo gem install auser-skelerl
|
24
|
+
|
25
|
+
== LICENSE:
|
26
|
+
|
27
|
+
(The MIT License)
|
28
|
+
|
29
|
+
Copyright (c) 2009 Ari Lerner
|
30
|
+
|
31
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
32
|
+
a copy of this software and associated documentation files (the
|
33
|
+
'Software'), to deal in the Software without restriction, including
|
34
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
35
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
36
|
+
permit persons to whom the Software is furnished to do so, subject to
|
37
|
+
the following conditions:
|
38
|
+
|
39
|
+
The above copyright notice and this permission notice shall be
|
40
|
+
included in all copies or substantial portions of the Software.
|
41
|
+
|
42
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
43
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
44
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
45
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
46
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
47
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
48
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
data/VERSION.yml
ADDED
data/bin/gen_server
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rubigen'
|
5
|
+
|
6
|
+
if %w(-v --version).include? ARGV.first
|
7
|
+
require 'gen_server/version'
|
8
|
+
puts "#{File.basename($0)} #{GenServer::VERSION::STRING}"
|
9
|
+
exit(0)
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rubigen/scripts/generate'
|
13
|
+
source = RubiGen::PathSource.new(:application,
|
14
|
+
File.join(File.dirname(__FILE__), "../app_generators"))
|
15
|
+
RubiGen::Base.reset_sources
|
16
|
+
RubiGen::Base.append_sources source
|
17
|
+
RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'gen_server')
|
data/bin/makefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rubigen'
|
5
|
+
|
6
|
+
if %w(-v --version).include? ARGV.first
|
7
|
+
require 'makefile/version'
|
8
|
+
puts "#{File.basename($0)} #{GenServer::VERSION::STRING}"
|
9
|
+
exit(0)
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rubigen/scripts/generate'
|
13
|
+
source = RubiGen::PathSource.new(:application,
|
14
|
+
File.join(File.dirname(__FILE__), "../generators"))
|
15
|
+
RubiGen::Base.reset_sources
|
16
|
+
RubiGen::Base.append_sources source
|
17
|
+
RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'makefile')
|
data/bin/skelerl
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
Dir[File.dirname(__FILE__) + "/../vendor/gems/*"].each {|lib| $:.unshift( File.expand_path(lib + "/lib") )}
|
3
|
+
require "git-style-binary"
|
4
|
+
require "colors"
|
5
|
+
require 'git-style-binary/command'
|
6
|
+
|
7
|
+
GitStyleBinary.primary do
|
8
|
+
@theme = :short
|
9
|
+
|
10
|
+
config = YAML.load(File.read(File.dirname(__FILE__) + '/../VERSION.yml'))
|
11
|
+
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
12
|
+
|
13
|
+
version "Skelerl release: #{version}"
|
14
|
+
banner <<-EOS
|
15
|
+
Usage: #{$0} #{all_options_string} COMMAND [ARGS]
|
16
|
+
|
17
|
+
The skelerl subcommands commands are:
|
18
|
+
\#{GitStyleBinary.pretty_known_subcommands(:short).join(" ")}
|
19
|
+
|
20
|
+
See 'skelerl help COMMAND' for more information on a specific command.
|
21
|
+
EOS
|
22
|
+
|
23
|
+
run do |command|
|
24
|
+
subcommands = GitStyleBinary.list_subcommands
|
25
|
+
|
26
|
+
puts "Usage: skelerl COMMAND [ARGS]
|
27
|
+
|
28
|
+
The skelerl subcommands commands are:
|
29
|
+
#{subcommands}
|
30
|
+
|
31
|
+
See 'skelerl help COMMAND' for more information on a specific command"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# #!/usr/bin/env ruby
|
36
|
+
# $:.unshift(File.dirname(__FILE__) + "/../lib")
|
37
|
+
#
|
38
|
+
# require 'rubygems'
|
39
|
+
# require 'rubigen'
|
40
|
+
# require "skelerl"
|
41
|
+
#
|
42
|
+
# if %w(-v --version).include? ARGV.first
|
43
|
+
# puts "#{File.basename($0)} #{Skelerl::VERSION::STRING}"
|
44
|
+
# exit(0)
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# require 'rubigen/scripts/generate'
|
48
|
+
# source = RubiGen::PathSource.new(:application,
|
49
|
+
# File.join(File.dirname(__FILE__), "../generators"))
|
50
|
+
# RubiGen::Base.reset_sources
|
51
|
+
# RubiGen::Base.append_sources source
|
52
|
+
#
|
53
|
+
# # Different generators
|
54
|
+
# if ARGV.contains_similar_elements? %w(--gen_server gen_server gs)
|
55
|
+
# RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'gen_server')
|
56
|
+
# elsif ARGV.contains_similar_elements? %w(--makefile make mf makefile)
|
57
|
+
# RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'makefile')
|
58
|
+
# else
|
59
|
+
# RubiGen::Scripts::Generate.new.run(ARGV, :generator => 'skeleton')
|
60
|
+
# end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
Dir[File.dirname(__FILE__) + "/../vendor/gems/*"].each {|lib| $:.unshift( File.expand_path(lib + "/lib") )}
|
3
|
+
require 'git-style-binary/command'
|
4
|
+
require "rubigen"
|
5
|
+
require 'rubigen/scripts/generate'
|
6
|
+
|
7
|
+
GitStyleBinary.command do
|
8
|
+
banner <<-EOS
|
9
|
+
Usage: #{$0} #{all_options_string}
|
10
|
+
|
11
|
+
Create a gen_server skeleton
|
12
|
+
EOS
|
13
|
+
|
14
|
+
short_desc "Create a gen_server skeleton"
|
15
|
+
|
16
|
+
opt :name, "The basename of the gen_server to generate", :type => :string
|
17
|
+
|
18
|
+
run do |command|
|
19
|
+
|
20
|
+
source = RubiGen::PathSource.new(:application, File.join(File.dirname(__FILE__), "../generators"))
|
21
|
+
RubiGen::Base.reset_sources
|
22
|
+
RubiGen::Base.append_sources source
|
23
|
+
|
24
|
+
argv = [command[:name]]
|
25
|
+
|
26
|
+
RubiGen::Scripts::Generate.new.run(argv, :generator => 'gen_server')
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
Dir[File.dirname(__FILE__) + "/../vendor/gems/*"].each {|lib| $:.unshift( File.expand_path(lib + "/lib") )}
|
3
|
+
require 'git-style-binary/command'
|
4
|
+
require "rubigen"
|
5
|
+
require 'rubigen/scripts/generate'
|
6
|
+
|
7
|
+
GitStyleBinary.command do
|
8
|
+
banner <<-EOS
|
9
|
+
Usage: #{$0} #{all_options_string}
|
10
|
+
|
11
|
+
Create a Makefile and application skeleton
|
12
|
+
EOS
|
13
|
+
|
14
|
+
short_desc "Create a makefile"
|
15
|
+
|
16
|
+
opt :name, "The basename of the makefile application to generate", :type => :string
|
17
|
+
|
18
|
+
run do |command|
|
19
|
+
|
20
|
+
source = RubiGen::PathSource.new(:application, File.join(File.dirname(__FILE__), "../generators"))
|
21
|
+
RubiGen::Base.reset_sources
|
22
|
+
RubiGen::Base.append_sources source
|
23
|
+
|
24
|
+
argv = [command[:name]]
|
25
|
+
|
26
|
+
RubiGen::Scripts::Generate.new.run(argv, :generator => 'makefile')
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/config/jeweler.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# You also need to setup your name and email for git if you haven't already done so.
|
2
|
+
# Info at http://github.com/guides/tell-git-your-user-name-and-email-address
|
3
|
+
|
4
|
+
begin
|
5
|
+
class Array
|
6
|
+
def one_of_regex
|
7
|
+
option_list = join "|"
|
8
|
+
Regexp.new "(#{option_list})"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
require 'rubygems'
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |s|
|
14
|
+
s.name = "skelerl"
|
15
|
+
s.description = "Erlang skeleton application"
|
16
|
+
s.summary = <<-EOM
|
17
|
+
The most awesomenest erlang skeleton and generator!
|
18
|
+
EOM
|
19
|
+
|
20
|
+
s.homepage = "http://poolpartyrb.com"
|
21
|
+
s.email = "arilerner@mac.com"
|
22
|
+
s.authors = ["Ari Lerner", "Michael Fairchild", "Nate Murray"]
|
23
|
+
|
24
|
+
s.test_files = Dir["test/**/test_*.rb"]
|
25
|
+
|
26
|
+
s.files = (%w(Rakefile README.rdoc License.txt VERSION.yml) + Dir["{config,tasks,script,generators,bin}/**/*"])
|
27
|
+
|
28
|
+
s.files.exclude '**/*.beam'
|
29
|
+
s.files.exclude "**/*/erl_crash.dump"
|
30
|
+
|
31
|
+
s.has_rdoc = true
|
32
|
+
s.extra_rdoc_files = ["README.txt", "License.txt", 'History.txt']
|
33
|
+
s.rdoc_options = ['--quiet', '--title', 'Skelerl documentation',
|
34
|
+
# "index.html",
|
35
|
+
"--line-numbers",
|
36
|
+
"--main", "README"
|
37
|
+
]
|
38
|
+
end
|
39
|
+
rescue LoadError
|
40
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
41
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
include FileUtils
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
%w[rake hoe newgem rubigen].each do |req_gem|
|
6
|
+
begin
|
7
|
+
require req_gem
|
8
|
+
rescue LoadError
|
9
|
+
# puts "This Rakefile requires the '#{req_gem}' RubyGem."
|
10
|
+
# puts "Installation: gem install #{req_gem} -y"
|
11
|
+
# exit
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
$:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class AppfileGenerator < RubiGen::Base
|
2
|
+
|
3
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
4
|
+
Config::CONFIG['ruby_install_name'])
|
5
|
+
|
6
|
+
default_options :author => nil
|
7
|
+
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
def initialize(runtime_args, runtime_options = {})
|
11
|
+
super
|
12
|
+
usage if args.empty?
|
13
|
+
@app_name = args.shift
|
14
|
+
@destination_root = File.expand_path(".")
|
15
|
+
@name = base_name
|
16
|
+
extract_options
|
17
|
+
end
|
18
|
+
|
19
|
+
def manifest
|
20
|
+
record do |m|
|
21
|
+
m.template "appfile.app", "ebin/#{@app_name}.app"
|
22
|
+
|
23
|
+
# m.dependency "install_rubigen_scripts", [destination_root, 'appfile'], :shebang => options[:shebang], :collision => :force
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
def banner
|
29
|
+
<<-EOS
|
30
|
+
Creates a basic .app file
|
31
|
+
|
32
|
+
USAGE: #{spec.name} name
|
33
|
+
EOS
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_options!(opts)
|
37
|
+
opts.separator ''
|
38
|
+
opts.separator 'Options:'
|
39
|
+
# For each option below, place the default
|
40
|
+
# at the top of the file next to "default_options"
|
41
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
42
|
+
# "Some comment about this option",
|
43
|
+
# "Default: none") { |options[:author]| }
|
44
|
+
opts.on("-n", "--name", "Name the app") { |options[:app_name]| }
|
45
|
+
opts.on("-d", "--desc", "Description of the app") { |options[:description]| }
|
46
|
+
opts.on("-m", "--modules", "Modules used in the application") { |options[:modules]| }
|
47
|
+
opts.on("-r", "--registered", "Modules registered in the application") { |options[:registered]| }
|
48
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
49
|
+
end
|
50
|
+
|
51
|
+
def extract_options
|
52
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
53
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
54
|
+
# raw instance variable value.
|
55
|
+
# @author = options[:author]
|
56
|
+
@description = options[:desc] || "Description of your project"
|
57
|
+
@version = options[:version] || "0.1"
|
58
|
+
@modules = options[:modules] || "#{@name}_app"
|
59
|
+
@registered = options[:registered] || ""
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{application, APPNAME,
|
2
|
+
[
|
3
|
+
% Quick description of the server
|
4
|
+
{description, "Description of the application"},
|
5
|
+
% Version
|
6
|
+
{vsn, "0.0.1"},
|
7
|
+
% All modules used by the application.
|
8
|
+
{modules, []},
|
9
|
+
% All the registered names in the application
|
10
|
+
{registered, []},
|
11
|
+
% These must be started for application to run
|
12
|
+
{applications, [kernel, stdlib]},
|
13
|
+
% Environment vars
|
14
|
+
{env, []},
|
15
|
+
% Module and Args used to start
|
16
|
+
{mod, {[]}},
|
17
|
+
{start_phases, []}
|
18
|
+
]
|
19
|
+
}.
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
class GenServerGenerator < RubiGen::Base
|
4
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
5
|
+
Config::CONFIG['ruby_install_name'])
|
6
|
+
|
7
|
+
default_options :shebang => DEFAULT_SHEBANG,
|
8
|
+
:an_option => 'some_default'
|
9
|
+
|
10
|
+
attr_reader :app_name, :module_name
|
11
|
+
|
12
|
+
def initialize(runtime_args, runtime_options = {})
|
13
|
+
super
|
14
|
+
usage if args.empty?
|
15
|
+
@destination_root = args.shift
|
16
|
+
@app_name = File.basename(File.expand_path(@destination_root))
|
17
|
+
@module_name = app_name.camelize
|
18
|
+
extract_options
|
19
|
+
end
|
20
|
+
|
21
|
+
def manifest
|
22
|
+
# Use /usr/bin/env if no special shebang was specified
|
23
|
+
script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
|
24
|
+
windows = (RUBY_PLATFORM =~ /dos|win32|cygwin/i) || (RUBY_PLATFORM =~ /(:?mswin|mingw)/)
|
25
|
+
|
26
|
+
record do |m|
|
27
|
+
m.directory File.join("src")
|
28
|
+
m.template "gen_server.erl", "src/#{gen_server_file_name}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def gen_server_file_name
|
33
|
+
"#{module_name}.erl"
|
34
|
+
end
|
35
|
+
|
36
|
+
def module_name
|
37
|
+
"#{app_name}_srv"
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
def banner
|
42
|
+
<<-EOS
|
43
|
+
Create a stub for #{File.basename $0} to get started.
|
44
|
+
|
45
|
+
Usage: #{File.basename $0} gen_server_name [options]"
|
46
|
+
EOS
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_options!(opts)
|
50
|
+
opts.separator ''
|
51
|
+
opts.separator "#{File.basename $0} options:"
|
52
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
53
|
+
end
|
54
|
+
|
55
|
+
def extract_options
|
56
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
57
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
58
|
+
# raw instance variable value.
|
59
|
+
@author = options[:author]
|
60
|
+
@description = options[:desc] || "Description of your project"
|
61
|
+
end
|
62
|
+
|
63
|
+
BASEDIRS = %w()
|
64
|
+
BASEFILES = %w()
|
65
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Your app description
|
@@ -0,0 +1 @@
|
|
1
|
+
require "skelerl"
|
@@ -0,0 +1,107 @@
|
|
1
|
+
%%%-------------------------------------------------------------------
|
2
|
+
%%% File : <%= gen_server_file_name %>
|
3
|
+
%%% Author : <%= ENV["USER"] %>
|
4
|
+
%%% Description : desc
|
5
|
+
%%% Created : <%= Time.now.strftime("%F") %>
|
6
|
+
%%%-------------------------------------------------------------------
|
7
|
+
|
8
|
+
-module (<%= module_name %>).
|
9
|
+
-behaviour(gen_server).
|
10
|
+
|
11
|
+
%% API
|
12
|
+
-export([start_link/0]).
|
13
|
+
|
14
|
+
%% gen_server callbacks
|
15
|
+
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
|
16
|
+
terminate/2, code_change/3]).
|
17
|
+
|
18
|
+
-record(state, {
|
19
|
+
|
20
|
+
}).
|
21
|
+
|
22
|
+
%% Macros
|
23
|
+
-define(SERVER, ?MODULE).
|
24
|
+
-define(DEFAULT_CONFIG, {}).
|
25
|
+
|
26
|
+
%%====================================================================
|
27
|
+
%% API
|
28
|
+
%%====================================================================
|
29
|
+
%%--------------------------------------------------------------------
|
30
|
+
%% Function: start() -> {ok,Pid} | ignore | {error,Error}
|
31
|
+
%% Description: Alias for start_link
|
32
|
+
%%--------------------------------------------------------------------
|
33
|
+
start_link() ->
|
34
|
+
start_link(?DEFAULT_CONFIG).
|
35
|
+
|
36
|
+
%%--------------------------------------------------------------------
|
37
|
+
%% Function: start_link() -> {ok,Pid} | ignore | {error,Error}
|
38
|
+
%% Description: Starts the server
|
39
|
+
%%--------------------------------------------------------------------
|
40
|
+
start_link(Config) ->
|
41
|
+
gen_server:start_link({local, ?SERVER}, ?MODULE, [Config], []).
|
42
|
+
|
43
|
+
%%====================================================================
|
44
|
+
%% gen_server callbacks
|
45
|
+
%%====================================================================
|
46
|
+
|
47
|
+
%%--------------------------------------------------------------------
|
48
|
+
%% Function: init(Args) -> {ok, State} |
|
49
|
+
%% {ok, State, Timeout} |
|
50
|
+
%% ignore |
|
51
|
+
%% {stop, Reason}
|
52
|
+
%% Description: Initiates the server
|
53
|
+
%%--------------------------------------------------------------------
|
54
|
+
init([]) ->
|
55
|
+
{ok, #state{}}.
|
56
|
+
|
57
|
+
%%--------------------------------------------------------------------
|
58
|
+
%% Function: %% handle_call(Request, From, State) -> {reply, Reply, State} |
|
59
|
+
%% {reply, Reply, State, Timeout} |
|
60
|
+
%% {noreply, State} |
|
61
|
+
%% {noreply, State, Timeout} |
|
62
|
+
%% {stop, Reason, Reply, State} |
|
63
|
+
%% {stop, Reason, State}
|
64
|
+
%% Description: Handling call messages
|
65
|
+
%%--------------------------------------------------------------------
|
66
|
+
handle_call(_Request, _From, State) ->
|
67
|
+
Reply = ok,
|
68
|
+
{reply, Reply, State}.
|
69
|
+
|
70
|
+
%%--------------------------------------------------------------------
|
71
|
+
%% Function: handle_cast(Msg, State) -> {noreply, State} |
|
72
|
+
%% {noreply, State, Timeout} |
|
73
|
+
%% {stop, Reason, State}
|
74
|
+
%% Description: Handling cast messages
|
75
|
+
%%--------------------------------------------------------------------
|
76
|
+
handle_cast(_Msg, State) ->
|
77
|
+
{noreply, State}.
|
78
|
+
|
79
|
+
%%--------------------------------------------------------------------
|
80
|
+
%% Function: handle_info(Info, State) -> {noreply, State} |
|
81
|
+
%% {noreply, State, Timeout} |
|
82
|
+
%% {stop, Reason, State}
|
83
|
+
%% Description: Handling all non call/cast messages
|
84
|
+
%%--------------------------------------------------------------------
|
85
|
+
handle_info(_Info, State) ->
|
86
|
+
{noreply, State}.
|
87
|
+
|
88
|
+
%%--------------------------------------------------------------------
|
89
|
+
%% Function: terminate(Reason, State) -> void()
|
90
|
+
%% Description: This function is called by a gen_server when it is about to
|
91
|
+
%% terminate. It should be the opposite of Module:init/1 and do any necessary
|
92
|
+
%% cleaning up. When it returns, the gen_server terminates with Reason.
|
93
|
+
%% The return value is ignored.
|
94
|
+
%%--------------------------------------------------------------------
|
95
|
+
terminate(_Reason, _State) ->
|
96
|
+
ok.
|
97
|
+
|
98
|
+
%%--------------------------------------------------------------------
|
99
|
+
%% Func: code_change(OldVsn, State, Extra) -> {ok, NewState}
|
100
|
+
%% Description: Convert process state when code is changed
|
101
|
+
%%--------------------------------------------------------------------
|
102
|
+
code_change(_OldVsn, State, _Extra) ->
|
103
|
+
{ok, State}.
|
104
|
+
|
105
|
+
%%--------------------------------------------------------------------
|
106
|
+
%%% Internal functions
|
107
|
+
%%--------------------------------------------------------------------
|
@@ -0,0 +1,68 @@
|
|
1
|
+
class MakefileGenerator < RubiGen::Base
|
2
|
+
|
3
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
4
|
+
Config::CONFIG['ruby_install_name'])
|
5
|
+
|
6
|
+
default_options :author => nil
|
7
|
+
|
8
|
+
attr_reader :app_name, :version
|
9
|
+
|
10
|
+
def initialize(runtime_args, runtime_options = {})
|
11
|
+
super
|
12
|
+
usage if args.empty?
|
13
|
+
# @app_name = args.shift
|
14
|
+
# @destination_root = File.expand_path(".")
|
15
|
+
@destination_root = args.shift
|
16
|
+
@app_name = File.basename(File.expand_path(@destination_root))
|
17
|
+
|
18
|
+
@name = base_name
|
19
|
+
extract_options
|
20
|
+
end
|
21
|
+
|
22
|
+
def manifest
|
23
|
+
record do |m|
|
24
|
+
m.template "Makefile", "Makefile"
|
25
|
+
m.template "Emakefile", "Emakefile"
|
26
|
+
m.directory "ebin"
|
27
|
+
m.template "appfile.app.erb", "ebin/#{@app_name}.app"
|
28
|
+
m.template "start.sh", "start.sh", { :chmod => 0755 }
|
29
|
+
m.directory "src"
|
30
|
+
m.template "make_boot.erl.erb", "src/make_boot.erl"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
def banner
|
36
|
+
<<-EOS
|
37
|
+
Creates a makefile project with a bootscript generator
|
38
|
+
|
39
|
+
USAGE: #{spec.name} name
|
40
|
+
EOS
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_options!(opts)
|
44
|
+
opts.separator ''
|
45
|
+
opts.separator 'Options:'
|
46
|
+
# For each option below, place the default
|
47
|
+
# at the top of the file next to "default_options"
|
48
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
49
|
+
# "Some comment about this option",
|
50
|
+
# "Default: none") { |options[:author]| }
|
51
|
+
opts.on("-n", "--name", "Name the app") { |options[:app_name]| }
|
52
|
+
opts.on("-d", "--desc", "Description of the app") { |options[:description]| }
|
53
|
+
opts.on("-m", "--modules", "Modules used in the application") { |options[:modules]| }
|
54
|
+
opts.on("-r", "--registered", "Modules registered in the application") { |options[:registered]| }
|
55
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
56
|
+
end
|
57
|
+
|
58
|
+
def extract_options
|
59
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
60
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
61
|
+
# raw instance variable value.
|
62
|
+
# @author = options[:author]
|
63
|
+
@description = options[:desc] || "Description of your project"
|
64
|
+
@version = options[:version] || "0.1"
|
65
|
+
@modules = options[:modules] || "#{@name}_app"
|
66
|
+
@registered = options[:registered] || ""
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
LIBDIR = `erl -eval 'io:format("~s~n", [code:lib_dir()])' -s init stop -noshell`
|
2
|
+
VERSION = <%= version -%>
|
3
|
+
CC = erlc
|
4
|
+
ERL = erl
|
5
|
+
EBIN = ebin
|
6
|
+
CFLAGS = -I include -pa $(EBIN)
|
7
|
+
COMPILE = $(CC) $(CFLAGS) -o $(EBIN)
|
8
|
+
EBIN_DIRS = $(wildcard deps/*/ebin)
|
9
|
+
WEB_DIR = web/
|
10
|
+
APP = <%= app_name %>
|
11
|
+
|
12
|
+
all: ebin compile boot
|
13
|
+
|
14
|
+
compile:
|
15
|
+
@$(ERL) -pa $(EBIN_DIRS) -noinput +B -eval 'case make:all() of up_to_date -> halt(0); error -> halt(1) end.'
|
16
|
+
|
17
|
+
edoc:
|
18
|
+
@echo Generating $(APP) documentation from srcs
|
19
|
+
@$(ERL) -noinput -eval 'edoc:application($(APP), "./", [{doc, "doc/"}, {files, "src/"}])' -s erlang halt
|
20
|
+
|
21
|
+
boot:
|
22
|
+
(cd ebin; erl -pa ebin -noshell -run make_boot write_scripts $(APP))
|
23
|
+
|
24
|
+
start_all:
|
25
|
+
(cd ebin; erl -pa ebin -noshell -boot $(APP))
|
26
|
+
|
27
|
+
ebin:
|
28
|
+
@mkdir ebin
|
29
|
+
|
30
|
+
clean:
|
31
|
+
rm -rf ebin/*.beam ebin/erl_crash.dump erl_crash.dump ebin/*.boot ebin/*.rel ebin/*.script
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{application, <%= app_name %>,
|
2
|
+
[
|
3
|
+
% Quick description of the server
|
4
|
+
{description, "Description of the application"},
|
5
|
+
% Version
|
6
|
+
{vsn, "<%= version -%>"},
|
7
|
+
% All modules used by the application.
|
8
|
+
{modules, []},
|
9
|
+
% All the registered names in the application
|
10
|
+
{registered, []},
|
11
|
+
% These must be started for application to run
|
12
|
+
{applications, [kernel, stdlib]},
|
13
|
+
% Environment vars
|
14
|
+
{env, []},
|
15
|
+
% Module and Args used to start
|
16
|
+
{mod, {<%= app_name -%>, []}},
|
17
|
+
{start_phases, []}
|
18
|
+
]
|
19
|
+
}.
|
@@ -0,0 +1,29 @@
|
|
1
|
+
-module(make_boot).
|
2
|
+
-export([write_scripts/1]).
|
3
|
+
|
4
|
+
write_scripts(Args) ->
|
5
|
+
[Name] = Args,
|
6
|
+
io:format("write_scripts for ~p~n", [Name]),
|
7
|
+
Erts = erlang:system_info(version),
|
8
|
+
application:load(sasl),
|
9
|
+
Version = "0.1",
|
10
|
+
{value, {kernel, _, Kernel}} = lists:keysearch(kernel, 1,
|
11
|
+
application:loaded_applications()),
|
12
|
+
{value, {stdlib, _, Stdlib}} = lists:keysearch(stdlib, 1,
|
13
|
+
application:loaded_applications()),
|
14
|
+
{value, {sasl, _, Sasl}} = lists:keysearch(sasl, 1,
|
15
|
+
application:loaded_applications()),
|
16
|
+
|
17
|
+
Rel = "{release, {\"~s\", \"~s\"}, {erts, \"~s\"}, ["
|
18
|
+
"{kernel, \"~s\"}, {stdlib, \"~s\"}, {sasl, \"~s\"}, {~s, \"~s\"}]}.",
|
19
|
+
Lowername = string:to_lower(Name),
|
20
|
+
|
21
|
+
Filename = lists:flatten(Lowername ++ ".rel"),
|
22
|
+
io:format("Writing to ~p (as ~s)~n", [Filename, Lowername]),
|
23
|
+
{ok, Fs} = file:open(Filename, [write]),
|
24
|
+
|
25
|
+
io:format(Fs, Rel, [Name, Version, Erts, Kernel, Stdlib, Sasl, Lowername, Version]),
|
26
|
+
file:close(Fs),
|
27
|
+
|
28
|
+
systools:make_script(Lowername, [local]),
|
29
|
+
halt().
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
class SkeletonGenerator < RubiGen::Base
|
4
|
+
DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'],
|
5
|
+
Config::CONFIG['ruby_install_name'])
|
6
|
+
|
7
|
+
default_options :shebang => DEFAULT_SHEBANG,
|
8
|
+
:an_option => 'some_default'
|
9
|
+
|
10
|
+
attr_reader :app_name, :module_name
|
11
|
+
|
12
|
+
def initialize(runtime_args, runtime_options = {})
|
13
|
+
super
|
14
|
+
usage if args.empty?
|
15
|
+
@destination_root = args.shift
|
16
|
+
@app_name = File.basename(File.expand_path(@destination_root))
|
17
|
+
@module_name = app_name.camelize
|
18
|
+
extract_options
|
19
|
+
end
|
20
|
+
|
21
|
+
def manifest
|
22
|
+
# Use /usr/bin/env if no special shebang was specified
|
23
|
+
script_options = { :chmod => 0755, :shebang => options[:shebang] == DEFAULT_SHEBANG ? nil : options[:shebang] }
|
24
|
+
windows = (RUBY_PLATFORM =~ /dos|win32|cygwin/i) || (RUBY_PLATFORM =~ /(:?mswin|mingw)/)
|
25
|
+
|
26
|
+
record do |m|
|
27
|
+
# Root directory and all subdirectories.
|
28
|
+
m.directory ''
|
29
|
+
BASEDIRS.each { |path| m.directory path }
|
30
|
+
|
31
|
+
# Root
|
32
|
+
m.template_copy_each %w( Rakefile )
|
33
|
+
m.file_copy_each %w( README.txt )
|
34
|
+
|
35
|
+
# Test helper
|
36
|
+
m.template "gitignore", ".gitignore"
|
37
|
+
|
38
|
+
# Tests
|
39
|
+
%w(ebin include src).each do |directory|
|
40
|
+
m.directory "test/#{directory}"
|
41
|
+
end
|
42
|
+
|
43
|
+
include_eunit
|
44
|
+
include_configerl
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def include_eunit
|
50
|
+
cmds = [
|
51
|
+
"svn co http://svn.process-one.net/contribs/trunk/eunit #{@destination_root}/test/include/eunit",
|
52
|
+
"cd #{@destination_root}/test/include/eunit",
|
53
|
+
"make"
|
54
|
+
]
|
55
|
+
Kernel.system cmds.join(" && ")
|
56
|
+
end
|
57
|
+
def include_configerl
|
58
|
+
cmds = [
|
59
|
+
"git submodule add git://github.com/auser/configerl.git #{@destination_root}/deps/configerl",
|
60
|
+
"git submodule init",
|
61
|
+
"git submodule update"
|
62
|
+
]
|
63
|
+
Kernel.system cmds.join(" && ")
|
64
|
+
end
|
65
|
+
|
66
|
+
protected
|
67
|
+
def banner
|
68
|
+
<<-EOS
|
69
|
+
Create a stub for #{File.basename $0} to get started.
|
70
|
+
|
71
|
+
Usage: #{File.basename $0} /path/to/your/app [options]"
|
72
|
+
EOS
|
73
|
+
end
|
74
|
+
|
75
|
+
def add_options!(opts)
|
76
|
+
opts.separator ''
|
77
|
+
opts.separator "#{File.basename $0} options:"
|
78
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
79
|
+
end
|
80
|
+
|
81
|
+
def extract_options
|
82
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
83
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
84
|
+
# raw instance variable value.
|
85
|
+
@author = options[:author]
|
86
|
+
@description = options[:desc] || "Description of your project"
|
87
|
+
end
|
88
|
+
|
89
|
+
BASEDIRS = %w(deps doc ebin include priv scripts src support)
|
90
|
+
BASEFILES = %w(README.txt Rakefile)
|
91
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
Your app description
|
@@ -0,0 +1 @@
|
|
1
|
+
require "skelerl"
|
data/script/generate
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/generate'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:appfile, :test_unit]
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
data/tasks/build.rake
ADDED
@@ -0,0 +1,152 @@
|
|
1
|
+
# modified from http://21ccw.blogspot.com/2008/04/using-rake-for-erlang-unit-testing.html
|
2
|
+
require 'rake/clean'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
deps_dir = Dir.pwd + "/deps"
|
6
|
+
|
7
|
+
INCLUDE = File.dirname(__FILE__) + "/include"
|
8
|
+
|
9
|
+
DEPS = Dir["#{deps_dir}/*"].select {|d| d if File.directory? d }
|
10
|
+
DEPS_FILES = DEPS.map {|d| "./deps/#{File.basename(d)}" }
|
11
|
+
EXTRA_ERLC = DEPS_FILES.map {|a| "-pa #{a}/ebin" }.join(" ")
|
12
|
+
|
13
|
+
ERLC_FLAGS = "-I#{INCLUDE} +warn_unused_vars +warn_unused_import -o ebin -W0 #{EXTRA_ERLC}"
|
14
|
+
|
15
|
+
SRC = FileList["src/**/*.erl"]
|
16
|
+
SRC_OBJ = SRC.pathmap("%{src,ebin}X.beam")
|
17
|
+
|
18
|
+
DEP = DEPS_FILES.map {|d| FileList["#{d}/src/*.erl"]}
|
19
|
+
DEP_OBJ = DEP.map {|d| d.pathmap("%{src,ebin}X.beam")}
|
20
|
+
|
21
|
+
TEST = FileList['test/src/*.erl']
|
22
|
+
TEST_OBJ = TEST.pathmap("%{src,ebin}X.beam")
|
23
|
+
|
24
|
+
CLEAN.include("ebin/*.beam", "test/ebin/*.beam")
|
25
|
+
|
26
|
+
directory 'ebin'
|
27
|
+
directory 'test/ebin'
|
28
|
+
|
29
|
+
rule( ".beam" => ["%{ebin,src}X.erl"] ) do |t|
|
30
|
+
testing = t.source =~ /test\// ? true : false
|
31
|
+
eunit = testing ? "-D EUNIT " : ""
|
32
|
+
ebin_dir = testing ? "test/ebin" : "ebin"
|
33
|
+
cmd = "erlc #{eunit}-pa ebin -W #{ERLC_FLAGS} -o #{ebin_dir} #{t.source}"
|
34
|
+
puts cmd
|
35
|
+
sh cmd
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "Compile everything"
|
39
|
+
task :compile => ["src:compile", "test:compile"]
|
40
|
+
task :recompile => ["clean", "src:compile", "test:compile"]
|
41
|
+
|
42
|
+
namespace :src do
|
43
|
+
desc "Compile src"
|
44
|
+
task :compile => ['ebin'] + SRC_OBJ
|
45
|
+
end
|
46
|
+
|
47
|
+
namespace :test do
|
48
|
+
desc "Compile tests"
|
49
|
+
task :compile => ['test/ebin'] + TEST_OBJ
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "Run all tests"
|
53
|
+
task :run_tests => :compile do
|
54
|
+
puts "Modules under test:"
|
55
|
+
TEST_OBJ.each do |obj|
|
56
|
+
obj[%r{.*/(.*).beam}]
|
57
|
+
mod = $1
|
58
|
+
test_cmd = "erl -pa ebin -pa test/ebin -run #{mod} test -run init stop"
|
59
|
+
test_output = `#{test_cmd}`
|
60
|
+
|
61
|
+
puts test_output if Rake.application.options.trace
|
62
|
+
|
63
|
+
if /\*failed\*/ =~ test_output
|
64
|
+
test_output[/(Failed.*Aborted.*Skipped.*Succeeded.*$)/]
|
65
|
+
else
|
66
|
+
test_output[/1>\s*(.*)\n/]
|
67
|
+
end
|
68
|
+
|
69
|
+
puts "#{mod}: #{$1}"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
desc "Clean the beams from the ebin directory"
|
74
|
+
task :clean do
|
75
|
+
# cmd = "rm #{::File.dirname(__FILE__)}/ebin/*.beam"
|
76
|
+
# Kernel.system cmd
|
77
|
+
end
|
78
|
+
|
79
|
+
desc "Recompile the sources"
|
80
|
+
task :recompile => [:clean, :compile]
|
81
|
+
|
82
|
+
desc "Compile with the DEBUG flag set to true"
|
83
|
+
task :compile_debug do
|
84
|
+
Dir["#{::File.dirname(__FILE__)}/src/*.erl"].each do |t|
|
85
|
+
Kernel.system "erlc -pa ebin -W #{ERLC_FLAGS} -Ddebug -o ebin #{t}"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
desc "Rebuild the boot scripts"
|
90
|
+
task :build_boot_scripts => [:recompile] do
|
91
|
+
puts "Rebuilding boot scripts"
|
92
|
+
|
93
|
+
root_dir = ::File.expand_path( ::File.join(::File.dirname(__FILE__)) )
|
94
|
+
@version = ENV["VERSION"] || ENV["V"] || "0.1"
|
95
|
+
@name = ENV["NAME"] || ::File.basename(::File.dirname( root_dir ))
|
96
|
+
|
97
|
+
cmd = "erl -pa ./ebin/ -run packager start #{@name} #{@version} -run init stop -noshell"
|
98
|
+
Kernel.system cmd
|
99
|
+
end
|
100
|
+
|
101
|
+
desc "Rebuild and repackage"
|
102
|
+
task :repackage => [:build_boot_scripts] do
|
103
|
+
cmd = "erl -pa ./ebin -s packager start -s init stop"
|
104
|
+
Kernel.system cmd
|
105
|
+
end
|
106
|
+
|
107
|
+
desc "Shell command"
|
108
|
+
task :shell do
|
109
|
+
cmd = "erl -pa ./ebin #{EXTRA_ERLC} -boot start_sasl"
|
110
|
+
puts cmd if Rake.application.options.trace
|
111
|
+
Kernel.system cmd
|
112
|
+
end
|
113
|
+
|
114
|
+
namespace(:deps) do
|
115
|
+
desc "Compile deps"
|
116
|
+
task :compile do
|
117
|
+
DEPS_FILES.each do |dir|
|
118
|
+
Kernel.system "cd #{dir} && rake compile"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
desc "Update deps/"
|
123
|
+
task :update do
|
124
|
+
update_cmd = "git remote update && git merge origin/master" # "git fetch && git rebase origin/master"
|
125
|
+
DEPS_FILES.each do |dir|
|
126
|
+
cmd = "cd #{dir} && #{update_cmd}"
|
127
|
+
puts cmd if Rake.application.options.trace
|
128
|
+
Kernel.system cmd
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
desc "Update and compile deps/"
|
133
|
+
task :up => [:update, :compile]
|
134
|
+
|
135
|
+
desc "Clean the deps"
|
136
|
+
task :clean do
|
137
|
+
DEPS_FILES.each do |dir|
|
138
|
+
cmd = "cd #{dir}/ebin && rm *.beam"
|
139
|
+
puts cmd if Rake.application.options.trace
|
140
|
+
Kernel.system cmd
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
desc "Build eunit"
|
146
|
+
task :build_eunit do
|
147
|
+
cmd = "cd test/include/eunit && make"
|
148
|
+
Kernel.system cmd
|
149
|
+
end
|
150
|
+
|
151
|
+
desc "Compile and get a shell"
|
152
|
+
task :compile_shell => [:compile, :shell]
|
data/tasks/generate.rake
ADDED
data/tasks/website.rake
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
desc 'Generate website files'
|
2
|
+
task :website_generate => :ruby_env do
|
3
|
+
(Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
|
4
|
+
sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
desc 'Upload website files to rubyforge'
|
9
|
+
task :website_upload do
|
10
|
+
host = "#{rubyforge_username}@rubyforge.org"
|
11
|
+
remote_dir = "/var/www/gforge-projects/#{PATH}/"
|
12
|
+
local_dir = 'website'
|
13
|
+
sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Generate and upload website files'
|
17
|
+
task :website => [:website_generate, :website_upload, :publish_docs]
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: skelerl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ari Lerner
|
8
|
+
- Michael Fairchild
|
9
|
+
- Nate Murray
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2009-08-17 00:00:00 -07:00
|
15
|
+
default_executable:
|
16
|
+
dependencies: []
|
17
|
+
|
18
|
+
description: Erlang skeleton application
|
19
|
+
email: arilerner@mac.com
|
20
|
+
executables:
|
21
|
+
- gen_server
|
22
|
+
- makefile
|
23
|
+
- skelerl
|
24
|
+
- skelerl-gen_server
|
25
|
+
- skelerl-makefile
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files:
|
29
|
+
- History.txt
|
30
|
+
- README.txt
|
31
|
+
files:
|
32
|
+
- Rakefile
|
33
|
+
- VERSION.yml
|
34
|
+
- bin/gen_server
|
35
|
+
- bin/makefile
|
36
|
+
- bin/skelerl
|
37
|
+
- bin/skelerl-gen_server
|
38
|
+
- bin/skelerl-makefile
|
39
|
+
- config/jeweler.rb
|
40
|
+
- config/requirements.rb
|
41
|
+
- generators/appfile/USAGE
|
42
|
+
- generators/appfile/appfile_generator.rb
|
43
|
+
- generators/appfile/templates/appfile.app
|
44
|
+
- generators/gen_server/USAGE
|
45
|
+
- generators/gen_server/gen_server_generator.rb
|
46
|
+
- generators/gen_server/templates/README.txt
|
47
|
+
- generators/gen_server/templates/Rakefile
|
48
|
+
- generators/gen_server/templates/gen_server.erl
|
49
|
+
- generators/gen_server/templates/gitignore
|
50
|
+
- generators/makefile/USAGE
|
51
|
+
- generators/makefile/makefile_generator.rb
|
52
|
+
- generators/makefile/templates/Emakefile
|
53
|
+
- generators/makefile/templates/Makefile
|
54
|
+
- generators/makefile/templates/appfile.app.erb
|
55
|
+
- generators/makefile/templates/make_boot.erl.erb
|
56
|
+
- generators/makefile/templates/start.sh
|
57
|
+
- generators/skeleton/USAGE
|
58
|
+
- generators/skeleton/skeleton_generator.rb
|
59
|
+
- generators/skeleton/templates/README.txt
|
60
|
+
- generators/skeleton/templates/Rakefile
|
61
|
+
- generators/skeleton/templates/gitignore
|
62
|
+
- script/generate
|
63
|
+
- tasks/build.rake
|
64
|
+
- tasks/environment.rake
|
65
|
+
- tasks/generate.rake
|
66
|
+
- tasks/website.rake
|
67
|
+
- History.txt
|
68
|
+
- README.txt
|
69
|
+
has_rdoc: true
|
70
|
+
homepage: http://poolpartyrb.com
|
71
|
+
licenses: []
|
72
|
+
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options:
|
75
|
+
- --quiet
|
76
|
+
- --title
|
77
|
+
- Skelerl documentation
|
78
|
+
- --line-numbers
|
79
|
+
- --main
|
80
|
+
- README
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: "0"
|
88
|
+
version:
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "0"
|
94
|
+
version:
|
95
|
+
requirements: []
|
96
|
+
|
97
|
+
rubyforge_project:
|
98
|
+
rubygems_version: 1.3.4
|
99
|
+
signing_key:
|
100
|
+
specification_version: 3
|
101
|
+
summary: The most awesomenest erlang skeleton and generator!
|
102
|
+
test_files: []
|
103
|
+
|