auser-skelerl 0.0.1 → 0.0.2
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/Manifest.txt +24 -1
- data/README.txt +4 -0
- data/Rakefile +6 -4
- data/app_generators/appfile/USAGE +5 -0
- data/app_generators/appfile/appfile_generator.rb +61 -0
- data/app_generators/appfile/templates/appfile.app +19 -0
- data/app_generators/gen_server/USAGE +7 -0
- data/app_generators/gen_server/gen_server_generator.rb +51 -0
- data/app_generators/gen_server/templates/gen_server.erl +0 -0
- data/bin/appfile +17 -0
- data/bin/erl_runner +26 -0
- data/bin/gen_server +17 -0
- data/config/requirements.rb +3 -3
- data/examples/example_runner.rb +24 -0
- data/lib/skelerl.rb +15 -3
- data/lib/skelerl/core/object.rb +27 -0
- data/lib/skelerl/erlpers/core/array.rb +10 -0
- data/lib/skelerl/erlpers/core/object.rb +34 -0
- data/lib/skelerl/erlpers/erl_mapper.rb +66 -0
- data/lib/skelerl/erlpers/mappers/command.rb +13 -0
- data/lib/skelerl/erlpers/mappers/context.rb +39 -0
- data/lib/skelerl/erlpers/mappers/namespace.rb +8 -0
- data/lib/skelerl/init.rb +3 -0
- data/script/generate +14 -0
- data/skelerl.gemspec +11 -10
- data/tasks/{skelerl.rake → build.rake} +41 -20
- data/tasks/deployment.rake +1 -1
- data/tasks/generate.rake +5 -0
- data/test/erlpers/erl_mapper_spec.rb +113 -0
- data/test/erlpers/object_spec.rb +26 -0
- data/test/helper.rb +10 -0
- metadata +31 -5
data/Manifest.txt
CHANGED
@@ -2,16 +2,39 @@ History.txt
|
|
2
2
|
Manifest.txt
|
3
3
|
README.txt
|
4
4
|
Rakefile
|
5
|
+
app_generators/appfile/USAGE
|
6
|
+
app_generators/appfile/appfile_generator.rb
|
7
|
+
app_generators/appfile/templates/appfile.app
|
8
|
+
app_generators/gen_server/USAGE
|
9
|
+
app_generators/gen_server/gen_server_generator.rb
|
10
|
+
app_generators/gen_server/templates/gen_server.erl
|
11
|
+
bin/appfile
|
5
12
|
bin/build-app
|
13
|
+
bin/erl_runner
|
14
|
+
bin/gen_server
|
6
15
|
config/hoe.rb
|
7
16
|
config/requirements.rb
|
8
17
|
ebin/packager.app
|
18
|
+
examples/example_runner.rb
|
9
19
|
include/empty
|
10
20
|
lib/skelerl.rb
|
21
|
+
lib/skelerl/core/object.rb
|
22
|
+
lib/skelerl/erlpers/core/array.rb
|
23
|
+
lib/skelerl/erlpers/core/object.rb
|
24
|
+
lib/skelerl/erlpers/erl_mapper.rb
|
25
|
+
lib/skelerl/erlpers/mappers/command.rb
|
26
|
+
lib/skelerl/erlpers/mappers/context.rb
|
27
|
+
lib/skelerl/erlpers/mappers/namespace.rb
|
28
|
+
lib/skelerl/init.rb
|
29
|
+
script/generate
|
11
30
|
setup.rb
|
12
31
|
skelerl.gemspec
|
13
32
|
src/packager.erl
|
33
|
+
tasks/build.rake
|
14
34
|
tasks/deployment.rake
|
15
35
|
tasks/environment.rake
|
16
|
-
tasks/
|
36
|
+
tasks/generate.rake
|
17
37
|
tasks/website.rake
|
38
|
+
test/erlpers/erl_mapper_spec.rb
|
39
|
+
test/erlpers/object_spec.rb
|
40
|
+
test/helper.rb
|
data/README.txt
CHANGED
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
require 'config/
|
3
|
-
|
4
|
-
|
1
|
+
begin
|
2
|
+
require 'config/requirements'
|
3
|
+
require 'config/hoe' # setup Hoe + all gem configuration
|
4
|
+
rescue Exception => e
|
5
|
+
end
|
5
6
|
|
7
|
+
Dir['tasks/**/*.rake'].each { |rake| load rake }
|
@@ -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,51 @@
|
|
1
|
+
class GenServerGenerator < 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.file "gen_server.erl"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
def banner
|
27
|
+
<<-EOS
|
28
|
+
Creates a skeleton gen_server
|
29
|
+
|
30
|
+
USAGE: #{spec.name} name
|
31
|
+
EOS
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_options!(opts)
|
35
|
+
opts.separator ''
|
36
|
+
opts.separator 'Options:'
|
37
|
+
# For each option below, place the default
|
38
|
+
# at the top of the file next to "default_options"
|
39
|
+
# opts.on("-a", "--author=\"Your Name\"", String,
|
40
|
+
# "Some comment about this option",
|
41
|
+
# "Default: none") { |options[:author]| }
|
42
|
+
opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
|
43
|
+
end
|
44
|
+
|
45
|
+
def extract_options
|
46
|
+
# for each option, extract it into a local variable (and create an "attr_reader :author" at the top)
|
47
|
+
# Templates can access these value via the attr_reader-generated methods, but not the
|
48
|
+
# raw instance variable value.
|
49
|
+
# @author = options[:author]
|
50
|
+
end
|
51
|
+
end
|
File without changes
|
data/bin/appfile
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 'appfile/version'
|
8
|
+
puts "#{File.basename($0)} #{Appfile::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 => 'appfile')
|
data/bin/erl_runner
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require "#{::File.dirname(__FILE__)}/../lib/skelerl"
|
3
|
+
require 'rubygems'
|
4
|
+
require 'optparse'
|
5
|
+
|
6
|
+
@opts = OptionParser.new
|
7
|
+
progname = File.basename(__FILE__, File.extname(__FILE__))
|
8
|
+
|
9
|
+
|
10
|
+
@opts.on('-v', '--verbose', 'Be verbose') { @verbose = true }
|
11
|
+
@opts.on('-t', '--test', 'Put in test mode') { @testing = true }
|
12
|
+
|
13
|
+
@opts.on_tail("-h", "--help", "Show this message") do
|
14
|
+
puts <<-EOP
|
15
|
+
Usage: #{progname} <filename> [options]
|
16
|
+
EOP
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
|
20
|
+
@opts.parse(ARGV.dup)
|
21
|
+
|
22
|
+
instance_eval open(ARGV.pop).read
|
23
|
+
|
24
|
+
mappers.each do |mapper|
|
25
|
+
@testing ? puts(mapper.realize(@testing)) : mapper.realize(@testing)
|
26
|
+
end
|
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/config/requirements.rb
CHANGED
@@ -6,9 +6,9 @@ require 'rubygems'
|
|
6
6
|
begin
|
7
7
|
require req_gem
|
8
8
|
rescue LoadError
|
9
|
-
puts "This Rakefile requires the '#{req_gem}' RubyGem."
|
10
|
-
puts "Installation: gem install #{req_gem} -y"
|
11
|
-
exit
|
9
|
+
# puts "This Rakefile requires the '#{req_gem}' RubyGem."
|
10
|
+
# puts "Installation: gem install #{req_gem} -y"
|
11
|
+
# exit
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)+"/../lib")
|
2
|
+
require "rubygems"
|
3
|
+
require "skelerl"
|
4
|
+
|
5
|
+
erlang do
|
6
|
+
testing true
|
7
|
+
|
8
|
+
options :path => "./ebin", :cookie => "chordjerl"
|
9
|
+
|
10
|
+
with_node(:node0, :stop => false) do
|
11
|
+
start
|
12
|
+
end
|
13
|
+
|
14
|
+
with_node(:node2) do
|
15
|
+
erlang_module.go
|
16
|
+
end
|
17
|
+
|
18
|
+
with_node(:node1) do
|
19
|
+
namespace :erlang_module do
|
20
|
+
start
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/skelerl.rb
CHANGED
@@ -1,10 +1,22 @@
|
|
1
|
-
|
2
|
-
$:.
|
1
|
+
[File.expand_path(File.dirname(__FILE__))].each do |dir|
|
2
|
+
$:.unshift(dir) unless $:.include?(dir)
|
3
|
+
end
|
4
|
+
|
5
|
+
require "rubygems"
|
6
|
+
%w(dslify rubigen).each do |gem|
|
7
|
+
begin;require "#{gem}";rescue Exception => e;puts "Error: #{e}";end
|
8
|
+
end
|
9
|
+
|
10
|
+
require "skelerl/init"
|
11
|
+
|
12
|
+
%w(build).each do |rake|
|
13
|
+
load "#{File.dirname(__FILE__)}/../tasks/#{rake}.rake"
|
14
|
+
end
|
3
15
|
|
4
16
|
module Skelerl
|
5
17
|
|
6
18
|
module VERSION
|
7
|
-
STRING = "0.0.
|
19
|
+
STRING = "0.0.2"
|
8
20
|
end
|
9
21
|
|
10
22
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Object
|
2
|
+
# The hidden singleton lurks behind everyone
|
3
|
+
def metaclass; class << self; self; end; end
|
4
|
+
def meta_eval &blk; metaclass.instance_eval &blk; end
|
5
|
+
|
6
|
+
# Adds methods to a metaclass
|
7
|
+
def meta_def name, &blk
|
8
|
+
meta_eval { define_method name, &blk }
|
9
|
+
end
|
10
|
+
|
11
|
+
def meta_undef name
|
12
|
+
meta_eval { remove_method name }
|
13
|
+
end
|
14
|
+
|
15
|
+
# Defines an instance method within a class
|
16
|
+
def class_def name, &blk
|
17
|
+
class_eval { define_method name, &blk }
|
18
|
+
end
|
19
|
+
|
20
|
+
def run_in_context(context=self, &block)
|
21
|
+
name="temp_#{self.class}_#{respond_to?(:parent) ? parent.to_s : Time.now.to_i}".to_sym
|
22
|
+
meta_def name, &block
|
23
|
+
self.send name, context
|
24
|
+
# self.instance_eval &block if block
|
25
|
+
meta_undef name rescue ""
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Object
|
2
|
+
# Erlang block where you can register map erlang directives
|
3
|
+
# Usage:
|
4
|
+
# erlang do
|
5
|
+
# with_node(:node0) do
|
6
|
+
# start
|
7
|
+
# end
|
8
|
+
# end
|
9
|
+
def erlang parent=self, &block
|
10
|
+
context_stack.push parent
|
11
|
+
mapper = block ? ErlMapper.new(&block) : nil
|
12
|
+
mappers << mapper
|
13
|
+
context_stack.pop
|
14
|
+
|
15
|
+
testing ? puts(mapper.realize(true)) : mapper.realize(false)
|
16
|
+
end
|
17
|
+
|
18
|
+
def testing bool=false
|
19
|
+
$testing ||= bool
|
20
|
+
end
|
21
|
+
|
22
|
+
def mappers
|
23
|
+
$mappers ||= []
|
24
|
+
end
|
25
|
+
|
26
|
+
# Context stack so we can keep track of the context
|
27
|
+
def context_stack
|
28
|
+
@@context_stack ||= []
|
29
|
+
end
|
30
|
+
|
31
|
+
def parent
|
32
|
+
@@context_stack.first
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
Dir["#{File.dirname(__FILE__)}/core/*.rb"].each {|f| require f if ::File.file? f}
|
2
|
+
|
3
|
+
class ErlMapper
|
4
|
+
include Dslify
|
5
|
+
|
6
|
+
def initialize(opts={}, &block)
|
7
|
+
@opts = opts
|
8
|
+
instance_eval &block if block
|
9
|
+
end
|
10
|
+
|
11
|
+
default_options({
|
12
|
+
:path => "./ebin",
|
13
|
+
:sname => "node0",
|
14
|
+
:cookie => nil,
|
15
|
+
:stop => true
|
16
|
+
})
|
17
|
+
|
18
|
+
def opts;@opts ||= {};end
|
19
|
+
|
20
|
+
def self.erl_methods(hash={})
|
21
|
+
hash.each {|k,v| define_method "erl_#{k}" do;"#{v}";end}
|
22
|
+
end
|
23
|
+
|
24
|
+
erl_methods(:path => "pa", :cookie => "setcookie")
|
25
|
+
|
26
|
+
def options(opts={}, &block)
|
27
|
+
set_vars_from_options opts
|
28
|
+
instance_eval &block if block
|
29
|
+
end
|
30
|
+
|
31
|
+
def contexts
|
32
|
+
@contexts ||= []
|
33
|
+
end
|
34
|
+
|
35
|
+
def namespace name, &block
|
36
|
+
Namespace.new(name, @opts, &block)
|
37
|
+
end
|
38
|
+
|
39
|
+
def with_node(name="node0", opts={}, &block)
|
40
|
+
returning MappingContext.new(name, __options.merge(opts), &block) do |mc|
|
41
|
+
contexts << mc
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def realize(force_testing=false)
|
46
|
+
contexts.collect {|mc| (force_testing || testing) ? mc.string : daemonize(mc.string) }
|
47
|
+
end
|
48
|
+
|
49
|
+
def daemonize(cmd, &block)
|
50
|
+
pid = fork do
|
51
|
+
Signal.trap('HUP', 'IGNORE') # Don't die upon logout
|
52
|
+
File.open("/dev/null", "r+") do |devnull|
|
53
|
+
$stdout.reopen(devnull)
|
54
|
+
$stderr.reopen(devnull)
|
55
|
+
$stdin.reopen(devnull) unless @use_stdin
|
56
|
+
end
|
57
|
+
Kernel.system cmd
|
58
|
+
block.call if block
|
59
|
+
end
|
60
|
+
Process.detach(pid)
|
61
|
+
pid
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
Dir["#{File.dirname(__FILE__)}/mappers/*.rb"].each {|f| require f if ::File.file? f}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class Command < Array
|
2
|
+
def initialize(name=nil, *args)
|
3
|
+
self << name.to_s
|
4
|
+
self << args unless args.empty?
|
5
|
+
end
|
6
|
+
def method_missing(m, *args, &block)
|
7
|
+
m = m.to_s
|
8
|
+
self << (args.empty? ? [m] : [m, args]).flatten
|
9
|
+
end
|
10
|
+
def to_s
|
11
|
+
self.flatten.join(" ")
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class MappingContext < ErlMapper
|
2
|
+
attr_accessor :sname, :parent
|
3
|
+
|
4
|
+
def initialize(name, opts={}, &block)
|
5
|
+
@__name = name
|
6
|
+
@opts = opts
|
7
|
+
instance_eval &block if block
|
8
|
+
@sname ||= @__name
|
9
|
+
end
|
10
|
+
|
11
|
+
def string
|
12
|
+
returning Array.new do |arr|
|
13
|
+
%w(build_string start_commands final_commands).each {|meth| arr << self.send(meth).strip }
|
14
|
+
end.join(" ").strip
|
15
|
+
end
|
16
|
+
|
17
|
+
def final_commands
|
18
|
+
returning Array.new do |arr|
|
19
|
+
arr << "-s init stop" if (opts.has_key?(:stop) && opts[:stop])
|
20
|
+
end.join(" ")
|
21
|
+
end
|
22
|
+
|
23
|
+
def build_string
|
24
|
+
@build_string ||=
|
25
|
+
"erl #{opts.map {|k,v| "-#{get_opt_name(k)} #{v}" if v && v.is_a?(String)}.join(" ")}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_opt_name(k);methods.include?("erl_#{k}") ? self.send("erl_#{k}".to_sym) : "#{k}";end
|
29
|
+
|
30
|
+
def start_commands;commands.map {|c| "-s #{c}"}.join(" ");end
|
31
|
+
def commands;@commands ||= [];end
|
32
|
+
def parent_string; parent ? parent.__name : nil; end
|
33
|
+
|
34
|
+
def method_missing(m, *args, &block)
|
35
|
+
command = Command.new(m, args).flatten
|
36
|
+
commands.include?(command) ? super : commands.push(command)
|
37
|
+
command
|
38
|
+
end
|
39
|
+
end
|
data/lib/skelerl/init.rb
ADDED
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/skelerl.gemspec
CHANGED
@@ -1,35 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
1
3
|
Gem::Specification.new do |s|
|
2
4
|
s.name = %q{skelerl}
|
3
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.2"
|
4
6
|
|
5
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
6
8
|
s.authors = ["Ari Lerner"]
|
7
|
-
s.date = %q{2009-
|
8
|
-
s.default_executable = %q{build-app}
|
9
|
+
s.date = %q{2009-02-04}
|
9
10
|
s.description = %q{This skeleton app takes care of everything you'd need in an erlang application, but don't want to do yourself... hopefully.}
|
10
11
|
s.email = ["arilerner@mac.com"]
|
11
|
-
s.executables = ["build-app"]
|
12
|
+
s.executables = ["appfile", "build-app", "erl_runner", "gen_server"]
|
12
13
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
|
13
|
-
s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/build-app", "config/hoe.rb", "config/requirements.rb", "ebin/packager.app", "include/empty", "lib/skelerl.rb", "setup.rb", "skelerl.gemspec", "src/packager.erl", "tasks/deployment.rake", "tasks/environment.rake", "tasks/
|
14
|
+
s.files = ["History.txt", "Manifest.txt", "README.txt", "Rakefile", "app_generators/appfile/USAGE", "app_generators/appfile/appfile_generator.rb", "app_generators/appfile/templates/appfile.app", "app_generators/gen_server/USAGE", "app_generators/gen_server/gen_server_generator.rb", "app_generators/gen_server/templates/gen_server.erl", "bin/appfile", "bin/build-app", "bin/erl_runner", "bin/gen_server", "config/hoe.rb", "config/requirements.rb", "ebin/packager.app", "examples/example_runner.rb", "include/empty", "lib/skelerl.rb", "lib/skelerl/core/object.rb", "lib/skelerl/erlpers/core/array.rb", "lib/skelerl/erlpers/core/object.rb", "lib/skelerl/erlpers/erl_mapper.rb", "lib/skelerl/erlpers/mappers/command.rb", "lib/skelerl/erlpers/mappers/context.rb", "lib/skelerl/erlpers/mappers/namespace.rb", "lib/skelerl/init.rb", "script/generate", "setup.rb", "skelerl.gemspec", "src/packager.erl", "tasks/build.rake", "tasks/deployment.rake", "tasks/environment.rake", "tasks/generate.rake", "tasks/website.rake", "test/erlpers/erl_mapper_spec.rb", "test/erlpers/object_spec.rb", "test/helper.rb"]
|
14
15
|
s.has_rdoc = true
|
15
16
|
s.homepage = %q{http://skelerl.rubyforge.org}
|
16
17
|
s.post_install_message = %q{}
|
17
18
|
s.rdoc_options = ["--main", "README.txt"]
|
18
19
|
s.require_paths = ["lib"]
|
19
20
|
s.rubyforge_project = %q{skelerl}
|
20
|
-
s.rubygems_version = %q{1.
|
21
|
+
s.rubygems_version = %q{1.3.1}
|
21
22
|
s.summary = %q{This skeleton app takes care of everything you'd need in an erlang application, but don't want to do yourself... hopefully.}
|
22
23
|
|
23
24
|
if s.respond_to? :specification_version then
|
24
25
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
25
26
|
s.specification_version = 2
|
26
27
|
|
27
|
-
if
|
28
|
-
s.add_development_dependency(%q<hoe>, [">= 1.8.
|
28
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
29
|
+
s.add_development_dependency(%q<hoe>, [">= 1.8.0"])
|
29
30
|
else
|
30
|
-
s.add_dependency(%q<hoe>, [">= 1.8.
|
31
|
+
s.add_dependency(%q<hoe>, [">= 1.8.0"])
|
31
32
|
end
|
32
33
|
else
|
33
|
-
s.add_dependency(%q<hoe>, [">= 1.8.
|
34
|
+
s.add_dependency(%q<hoe>, [">= 1.8.0"])
|
34
35
|
end
|
35
36
|
end
|
@@ -1,32 +1,62 @@
|
|
1
|
+
# modified from http://21ccw.blogspot.com/2008/04/using-rake-for-erlang-unit-testing.html
|
1
2
|
require 'rake/clean'
|
3
|
+
require 'pp'
|
2
4
|
|
3
|
-
INCLUDE
|
5
|
+
INCLUDE = File.dirname(__FILE__) + "/include"
|
4
6
|
ERLC_FLAGS = "-I#{INCLUDE} +warn_unused_vars +warn_unused_import"
|
5
7
|
|
6
|
-
SRC
|
7
|
-
|
8
|
-
|
8
|
+
SRC = FileList['src/*.erl']
|
9
|
+
SRC_OBJ = SRC.pathmap("%{src,ebin}X.beam")
|
10
|
+
|
11
|
+
TEST = FileList['test/src/*.erl']
|
12
|
+
TEST_OBJ = TEST.pathmap("%{src,ebin}X.beam")
|
13
|
+
|
14
|
+
CLEAN.include("ebin/*.beam", "test/ebin/*.beam")
|
9
15
|
|
10
16
|
directory 'ebin'
|
17
|
+
directory 'test/ebin'
|
18
|
+
|
19
|
+
rule( ".beam" => ["%{ebin,src}X.erl"] ) do |t|
|
20
|
+
testing = t.source =~ /test\// ? true : false
|
21
|
+
eunit = testing ? "-D EUNIT " : ""
|
22
|
+
ebin_dir = testing ? "test/ebin" : "ebin"
|
23
|
+
cmd = "erlc #{eunit}-pa ebin -W #{ERLC_FLAGS} -o #{ebin_dir} #{t.source}"
|
24
|
+
puts cmd
|
25
|
+
sh cmd
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Compile everything"
|
29
|
+
task :compile => ["src:compile", "test:compile"]
|
30
|
+
task :recompile => ["clean", "src:compile", "test:compile"]
|
11
31
|
|
12
|
-
|
13
|
-
|
32
|
+
namespace :src do
|
33
|
+
desc "Compile src"
|
34
|
+
task :compile => ['ebin'] + SRC_OBJ
|
14
35
|
end
|
15
36
|
|
16
|
-
|
37
|
+
namespace :test do
|
38
|
+
desc "Compile tests"
|
39
|
+
task :compile => ['test/ebin'] + TEST_OBJ
|
40
|
+
end
|
17
41
|
|
18
|
-
desc "Run
|
19
|
-
task :run_tests =>
|
20
|
-
|
42
|
+
desc "Run all tests"
|
43
|
+
task :run_tests => :compile do
|
44
|
+
puts "Modules under test:"
|
45
|
+
TEST_OBJ.each do |obj|
|
21
46
|
obj[%r{.*/(.*).beam}]
|
22
47
|
mod = $1
|
23
|
-
|
48
|
+
test_cmd = "erl -pa ebin -pa test/ebin -run #{mod} test -run init stop"
|
49
|
+
test_output = `#{test_cmd}`
|
50
|
+
|
51
|
+
puts test_output if Rake.application.options.trace
|
24
52
|
|
25
53
|
if /\*failed\*/ =~ test_output
|
26
54
|
test_output[/(Failed.*Aborted.*Skipped.*Succeeded.*$)/]
|
27
55
|
else
|
28
56
|
test_output[/1>\s*(.*)\n/]
|
29
57
|
end
|
58
|
+
|
59
|
+
puts "#{mod}: #{$1}"
|
30
60
|
end
|
31
61
|
end
|
32
62
|
|
@@ -39,9 +69,6 @@ end
|
|
39
69
|
desc "Recompile the sources"
|
40
70
|
task :recompile => [:clean, :compile]
|
41
71
|
|
42
|
-
desc "Compile all the sources"
|
43
|
-
task :compile => ['ebin'] + OBJ
|
44
|
-
|
45
72
|
desc "Compile with the DEBUG flag set to true"
|
46
73
|
task :compile_debug do
|
47
74
|
Dir["#{::File.dirname(__FILE__)}/src/*.erl"].each do |t|
|
@@ -65,10 +92,4 @@ desc "Rebuild and repackage"
|
|
65
92
|
task :repackage => [:build_boot_scripts] do
|
66
93
|
cmd = "erl -pa ./ebin -s packager start -s init stop"
|
67
94
|
Kernel.system cmd
|
68
|
-
end
|
69
|
-
|
70
|
-
desc "Install messenger"
|
71
|
-
task :install_messenger do
|
72
|
-
cmd = "erl -pa ./ebin/ -run packager install_messenger #{@version} -run init stop -noshell"
|
73
|
-
Kernel.system cmd
|
74
95
|
end
|
data/tasks/deployment.rake
CHANGED
@@ -34,7 +34,7 @@ namespace :manifest do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
desc "Generate gemspec"
|
37
|
-
task :gemspec => [:"manifest:refresh"
|
37
|
+
task :gemspec => [:"manifest:refresh"] do |t|
|
38
38
|
res = %x[rake debug_gem]
|
39
39
|
res = res.split("\n")[1..-1].join("\n")
|
40
40
|
::File.open("#{GEM_NAME.downcase}.gemspec", "w+") do |f|
|
data/tasks/generate.rake
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../helper"
|
2
|
+
|
3
|
+
class ErlMapperTest < Test::Unit::TestCase
|
4
|
+
context "ErlMapper" do
|
5
|
+
context "methods" do
|
6
|
+
|
7
|
+
context "options" do
|
8
|
+
|
9
|
+
setup do;@mapper = ErlMapper.new do;a "a";b = nil;end;end
|
10
|
+
describe "passed in with a hash" do
|
11
|
+
it "should set the option on the ErlMapper" do;@mapper.a.should == "a";end
|
12
|
+
it "should not set the option when passed a nil value" do;@mapper.b.should == nil;end
|
13
|
+
end
|
14
|
+
describe "passed in on the block" do
|
15
|
+
it "should set the option on the ErlMapper" do;@mapper.a.should == "a";end
|
16
|
+
it "should not set the option when passed a nil value" do;@mapper.b.should == nil;end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with_node" do
|
21
|
+
setup do;@mapper = ErlMapper.new do;with_node(:node0) do; "hi";end;end;end
|
22
|
+
describe "on call" do
|
23
|
+
it "should create a MappingContext" do
|
24
|
+
assert_equal @mapper.with_node(:node0).class, MappingContext
|
25
|
+
end
|
26
|
+
it "should store the MappingContext's name" do
|
27
|
+
assert_equal @mapper.with_node(:node0).sname, :node0
|
28
|
+
end
|
29
|
+
it "should append the name to the MappingContext's string" do
|
30
|
+
assert_equal @mapper.with_node(:node0).build_string.strip, "erl -sname node0 -pa ./ebin"
|
31
|
+
end
|
32
|
+
|
33
|
+
context "context" do
|
34
|
+
setup do;@context = @mapper.with_node(:node0) do;start;end;end
|
35
|
+
|
36
|
+
describe "with start_commands" do
|
37
|
+
it "should have the start_commands on the MappingContext" do
|
38
|
+
assert_equal @context.commands.flatten, ["start"]
|
39
|
+
end
|
40
|
+
it "should have multiple when multiple are called" do
|
41
|
+
@context.instance_eval do
|
42
|
+
chordjerl_srv.start_link
|
43
|
+
end
|
44
|
+
assert_equal ["start","chordjerl_srv","start_link"], @context.commands.flatten
|
45
|
+
end
|
46
|
+
it "should include arguments" do
|
47
|
+
@context = @mapper.with_node(:node0) do
|
48
|
+
dark.and_stormy "night"
|
49
|
+
end
|
50
|
+
assert_equal [["dark",["and_stormy","night"]]], @context.commands
|
51
|
+
end
|
52
|
+
it "should build the commands with 1 -s" do
|
53
|
+
@context = @mapper.with_node(:node0, :stop => false) do
|
54
|
+
everything.but_the "sink"
|
55
|
+
end
|
56
|
+
assert_equal "erl -sname node0 -pa ./ebin -s everything but_the sink", @context.string
|
57
|
+
end
|
58
|
+
it "should build the commands without an argument" do
|
59
|
+
@context = @mapper.with_node(:node0, :stop => false) do
|
60
|
+
once.in_a_lifetime
|
61
|
+
end
|
62
|
+
assert_equal "erl -sname node0 -pa ./ebin -s once in_a_lifetime", @context.string
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "with final_commands" do
|
67
|
+
it "should have the default final_commands as -s init stop" do
|
68
|
+
assert_equal @context.final_commands, "-s init stop"
|
69
|
+
end
|
70
|
+
it "should not have the final_commands with stop if stop is false" do
|
71
|
+
cont = MappingContext.new :node1, {:stop => false} do
|
72
|
+
end
|
73
|
+
assert_equal cont.final_commands, ""
|
74
|
+
end
|
75
|
+
it "with stop if stop is true" do
|
76
|
+
cont = MappingContext.new :node2, {:stop => true} do
|
77
|
+
end
|
78
|
+
assert_equal cont.final_commands, "-s init stop"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "Namespace" do
|
89
|
+
setup do
|
90
|
+
@namespace = Namespace.new("chordjerl_srv") do
|
91
|
+
start
|
92
|
+
end
|
93
|
+
end
|
94
|
+
it "should keep the namespace on the command" do
|
95
|
+
assert_equal "erl -s chordjerl_srv:start", @namespace.string
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "Called from an object" do
|
100
|
+
setup do
|
101
|
+
@o = Object.new
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should not fail" do
|
105
|
+
blk = Proc.new {}
|
106
|
+
lambda {@o.erlang(&blk)}.should_not raise_error
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/../helper"
|
2
|
+
|
3
|
+
class ObjectTest < Test::Unit::TestCase
|
4
|
+
context "Object" do
|
5
|
+
setup do
|
6
|
+
@o = Object.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "for method erlang" do
|
10
|
+
should "respond to :erlang" do
|
11
|
+
assert_respond_to @o, :erlang
|
12
|
+
end
|
13
|
+
|
14
|
+
should "create a new ErlMapper" do
|
15
|
+
blk = Proc.new {}
|
16
|
+
assert_equal ErlMapper, @o.erlang(&blk).class
|
17
|
+
end
|
18
|
+
|
19
|
+
should "not create a new ErlMapper if there is no block passed" do
|
20
|
+
assert_equal @o.erlang, nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/test/helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auser-skelerl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ari Lerner
|
@@ -9,8 +9,8 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
13
|
-
default_executable:
|
12
|
+
date: 2009-02-04 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: hoe
|
@@ -19,13 +19,16 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.8.
|
22
|
+
version: 1.8.0
|
23
23
|
version:
|
24
24
|
description: This skeleton app takes care of everything you'd need in an erlang application, but don't want to do yourself... hopefully.
|
25
25
|
email:
|
26
26
|
- arilerner@mac.com
|
27
27
|
executables:
|
28
|
+
- appfile
|
28
29
|
- build-app
|
30
|
+
- erl_runner
|
31
|
+
- gen_server
|
29
32
|
extensions: []
|
30
33
|
|
31
34
|
extra_rdoc_files:
|
@@ -37,19 +40,42 @@ files:
|
|
37
40
|
- Manifest.txt
|
38
41
|
- README.txt
|
39
42
|
- Rakefile
|
43
|
+
- app_generators/appfile/USAGE
|
44
|
+
- app_generators/appfile/appfile_generator.rb
|
45
|
+
- app_generators/appfile/templates/appfile.app
|
46
|
+
- app_generators/gen_server/USAGE
|
47
|
+
- app_generators/gen_server/gen_server_generator.rb
|
48
|
+
- app_generators/gen_server/templates/gen_server.erl
|
49
|
+
- bin/appfile
|
40
50
|
- bin/build-app
|
51
|
+
- bin/erl_runner
|
52
|
+
- bin/gen_server
|
41
53
|
- config/hoe.rb
|
42
54
|
- config/requirements.rb
|
43
55
|
- ebin/packager.app
|
56
|
+
- examples/example_runner.rb
|
44
57
|
- include/empty
|
45
58
|
- lib/skelerl.rb
|
59
|
+
- lib/skelerl/core/object.rb
|
60
|
+
- lib/skelerl/erlpers/core/array.rb
|
61
|
+
- lib/skelerl/erlpers/core/object.rb
|
62
|
+
- lib/skelerl/erlpers/erl_mapper.rb
|
63
|
+
- lib/skelerl/erlpers/mappers/command.rb
|
64
|
+
- lib/skelerl/erlpers/mappers/context.rb
|
65
|
+
- lib/skelerl/erlpers/mappers/namespace.rb
|
66
|
+
- lib/skelerl/init.rb
|
67
|
+
- script/generate
|
46
68
|
- setup.rb
|
47
69
|
- skelerl.gemspec
|
48
70
|
- src/packager.erl
|
71
|
+
- tasks/build.rake
|
49
72
|
- tasks/deployment.rake
|
50
73
|
- tasks/environment.rake
|
51
|
-
- tasks/
|
74
|
+
- tasks/generate.rake
|
52
75
|
- tasks/website.rake
|
76
|
+
- test/erlpers/erl_mapper_spec.rb
|
77
|
+
- test/erlpers/object_spec.rb
|
78
|
+
- test/helper.rb
|
53
79
|
has_rdoc: true
|
54
80
|
homepage: http://skelerl.rubyforge.org
|
55
81
|
post_install_message: ""
|