auser-skelerl 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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/skelerl.rake
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
@@ -14,6 +14,10 @@ h2. Building an application
14
14
  3. Type: ./bin/build-app [name] [version]
15
15
  4. There is no fourth step
16
16
 
17
+ Erlang start script in ruby
18
+
19
+ Example coming shortly
20
+
17
21
  == INSTALL:
18
22
 
19
23
  sudo gem install auser-skelerl
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
- require 'config/requirements'
2
- require 'config/hoe' # setup Hoe + all gem configuration
3
-
4
- Dir['tasks/**/*.rake'].each { |rake| load rake }
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,5 @@
1
+ Description:
2
+ Create a basic .app file for erlang. This is just a quick generator to help get your .app file built
3
+
4
+ Usage:
5
+ ./script/generate appfile <name>
@@ -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,7 @@
1
+ Description:
2
+
3
+ Create a skeleton gen_server file
4
+
5
+ Usage:
6
+
7
+ ./script/generate gen_server <name>
@@ -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
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')
@@ -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
- $:.unshift(File.dirname(__FILE__)) unless
2
- $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
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.1"
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,10 @@
1
+ class Array
2
+
3
+ def to_s
4
+ self.join(" ")
5
+ end
6
+ def strip
7
+ self.to_s.strip
8
+ end
9
+
10
+ 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
@@ -0,0 +1,8 @@
1
+ class Namespace < MappingContext
2
+ def namespace_string
3
+ @__name ? @__name : parent_string
4
+ end
5
+ def start_commands
6
+ commands.map {|c| "-s #{namespace_string}:#{c}"}
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ %w(core erlpers).each do |dir|
2
+ Dir["#{File.dirname(__FILE__)}/#{dir}/*.rb"].each {|f| require f if ::File.file? f}
3
+ end
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.1"
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-01-21}
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/skelerl.rake", "tasks/website.rake"]
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.2.0}
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 current_version >= 3 then
28
- s.add_development_dependency(%q<hoe>, [">= 1.8.2"])
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.2"])
31
+ s.add_dependency(%q<hoe>, [">= 1.8.0"])
31
32
  end
32
33
  else
33
- s.add_dependency(%q<hoe>, [">= 1.8.2"])
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 = "include"
5
+ INCLUDE = File.dirname(__FILE__) + "/include"
4
6
  ERLC_FLAGS = "-I#{INCLUDE} +warn_unused_vars +warn_unused_import"
5
7
 
6
- SRC = FileList['src/*.erl']
7
- OBJ = SRC.pathmap("%{src,ebin}X.beam")
8
- CLEAN.include("ebin/*.beam")
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
- rule ".beam" => ["%{ebin,src}X.erl"] do |t|
13
- sh "erlc -pa ebin -W #{ERLC_FLAGS} -o ebin #{t.source}"
32
+ namespace :src do
33
+ desc "Compile src"
34
+ task :compile => ['ebin'] + SRC_OBJ
14
35
  end
15
36
 
16
- task :default => :compile
37
+ namespace :test do
38
+ desc "Compile tests"
39
+ task :compile => ['test/ebin'] + TEST_OBJ
40
+ end
17
41
 
18
- desc "Run the tests"
19
- task :run_tests => [:compile] do
20
- OBJ.each do |obj|
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
- test_output = `erl -pa ebin -run #{mod} test -run init stop`
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
@@ -34,7 +34,7 @@ namespace :manifest do
34
34
  end
35
35
 
36
36
  desc "Generate gemspec"
37
- task :gemspec => [:"manifest:refresh", :package] do |t|
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|
@@ -0,0 +1,5 @@
1
+ desc "Generate a basic app file"
2
+ task :appfile do
3
+ @name = ENV["NAME"].empty? ? ::File.basename(::File.dirname( root_dir )) : ENV["NAME"]
4
+ Kernel.system "#{::File.dirname(__FILE__)}/../bin/appfile #{@name}"
5
+ end
@@ -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
@@ -0,0 +1,10 @@
1
+ $:.unshift "#{::File.dirname(__FILE__)}/../lib"
2
+ require "rubygems"
3
+
4
+ require 'test/unit'
5
+ require 'matchy'
6
+ require 'context'
7
+
8
+ require "skelerl"
9
+
10
+ testing true
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.1
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-01-21 00:00:00 -08:00
13
- default_executable: build-app
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.2
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/skelerl.rake
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: ""