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 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: ""