rake-subproject 0.0.6 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZjU1ZjYyZDg0ZGQzODYwZmQxNTAyMTMxN2RmZWRiYTdlYjg4NTAzYw==
5
- data.tar.gz: !binary |-
6
- ZTg4OTI4NTQzNzE5MzNhOGU4YzljM2YxZTExOTY2NzQwOWJlMjJiNw==
2
+ SHA1:
3
+ metadata.gz: a494a9b42330ff16a6b7f9f4e8f09eb1a1b29ccf
4
+ data.tar.gz: 6fcb305263de9491d6179479fa2bf1605f396814
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- OGYyYmExYWFiYjQ5M2JiMDEyYzRkZTU3ODEwZjhjODE4YTBhYTMwNWU4M2Mx
10
- NmZmMjRmYmUzNGFkZTA0NjgzZjhlMmY0M2Y4ZmEyYjYxMDYwM2JiOWJiYmU1
11
- NTI5N2FlNGRlNjZiYjY3ODk5Mzc0ODNiZjI0OGIyZjFkMWFmNzA=
12
- data.tar.gz: !binary |-
13
- ZTNlZjVlNmYxZmMxMzkwYTZjY2E5YzVmMzJkYjY2MWM1ZDU2MWU3ZTQ5ZjU1
14
- MmMzYjZjNjM0NWQ1MTFlNzgwMzQ5YzU2NzVmYWNmYzdlZjBjZGRiNGM5NjA2
15
- NjU3ZTA2ZjVkYzkzNTgyZmExOGYyMmM2ODlmOGQwNDZhMjI0MmI=
6
+ metadata.gz: 94f7057912fef453ab7413271c4b22d9bf0ecc374782bab64e33f1f1f02c56d57c55f28e12945e69b807f5610bafc9aec8a61a53337cbf1d4500f45afd9c6543
7
+ data.tar.gz: db6123de5ee1dfcee7f0864930530563775cf567b262de8ec5ed25f1b434084a2ffd5d99346d7efccc7c5d17386a5bcc52f0ce08d8a925dc9e0a29db49930e28
data/Rakefile CHANGED
@@ -13,11 +13,15 @@ task :default => :spec
13
13
  FileList["resources/network/*.rb"].each do |path|
14
14
  file "#{dir}/#{File.basename(path)}" => "lib/rake/subproject/#{name.downcase}" do |t|
15
15
  File.open(t.name, 'w') do |f|
16
- f.puts "module Rake ; module Subproject ; module #{name}"
17
- f.puts File.read(path)
18
- f.puts "end ; end ; end"
16
+ f.puts <<END
17
+ module Rake::Subproject
18
+ module #{name} #:nodoc: all
19
+ #{File.read(path)} end
20
+ end
21
+ END
19
22
  end
20
23
  end
24
+
21
25
  namespace :build do
22
26
  task :library => "#{dir}/#{File.basename(path)}"
23
27
  end
@@ -1,52 +1,54 @@
1
- module Rake ; module Subproject ; module Client
2
- class Port
3
- attr_accessor :name
4
-
5
- def self.open(fd, option)
6
- return unless block_given?
7
- IO.open(fd, option) do |io|
8
- yield port = self.new(io, "server")
9
- end
10
- end
1
+ module Rake::Subproject
2
+ module Client #:nodoc: all
3
+ class Port #:nodoc: all
4
+ attr_accessor :name
11
5
 
12
- DELIMITER = "\0"
6
+ def self.open(fd, option)
7
+ return unless block_given?
8
+ IO.open(fd, option) do |io|
9
+ yield port = self.new(io, "server")
10
+ end
11
+ end
13
12
 
14
- def initialize(io, name = nil)
15
- fail ArgumentError, "Requires an IO object" unless io.kind_of?(IO)
16
- @io = io
17
- self.name = name
18
- end
19
-
20
- def inspect
21
- "Port(#{self.name || @io.fileno})"
22
- end
23
-
24
- def read
25
- log "reading #{self.inspect}..."
26
- json_message = @io.readline(DELIMITER).chomp(DELIMITER)
27
- log "... #{self.inspect} received: #{json_message}"
28
- ::JSON.parse(json_message)
29
- end
30
-
31
- def write(object)
32
- json_message = ::JSON.generate(object)
33
- @io.print(json_message+DELIMITER)
34
- @io.flush
35
- log "#{self.inspect} wrote: #{json_message}"
36
- end
37
-
38
- def close
39
- log "closing #{self.inspect}"
40
- @io.close
41
- end
42
-
43
- def closed?
44
- @io.closed?
45
- end
46
-
47
- private
48
- def log(message)
49
- $stderr.print "#{message}\n" if false
13
+ DELIMITER = "\0"
14
+
15
+ def initialize(io, name = nil)
16
+ fail ArgumentError, "Requires an IO object" unless io.kind_of?(IO)
17
+ @io = io
18
+ self.name = name
19
+ end
20
+
21
+ def inspect
22
+ "Port(#{self.name || @io.fileno})"
23
+ end
24
+
25
+ def read
26
+ log "reading #{self.inspect}..."
27
+ json_message = @io.readline(DELIMITER).chomp(DELIMITER)
28
+ log "... #{self.inspect} received: #{json_message}"
29
+ ::JSON.parse(json_message)
30
+ end
31
+
32
+ def write(object)
33
+ json_message = ::JSON.generate(object)
34
+ @io.print(json_message+DELIMITER)
35
+ @io.flush
36
+ log "#{self.inspect} wrote: #{json_message}"
37
+ end
38
+
39
+ def close
40
+ log "closing #{self.inspect}"
41
+ @io.close
42
+ end
43
+
44
+ def closed?
45
+ @io.closed?
46
+ end
47
+
48
+ private
49
+ def log(message)
50
+ $stderr.print "#{message}\n" if false
51
+ end
52
+ end
50
53
  end
51
54
  end
52
- end ; end ; end
@@ -1,24 +1,26 @@
1
- module Rake ; module Subproject ; module Client
2
- class Session
3
- def initialize(manager, id = nil)
4
- @id = id
5
- @manager = manager
6
- end
7
-
8
- def id
9
- @id || object_id
10
- end
11
-
12
- def write(object)
13
- @manager.send(:write_session, self, object)
14
- end
1
+ module Rake::Subproject
2
+ module Client #:nodoc: all
3
+ class Session #:nodoc: all
4
+ def initialize(manager, id = nil)
5
+ @id = id
6
+ @manager = manager
7
+ end
15
8
 
16
- def read
17
- @manager.send(:read_session, self)
18
- end
19
-
20
- def close
21
- @manager.send(:close_session, self)
9
+ def id
10
+ @id || object_id
11
+ end
12
+
13
+ def write(object)
14
+ @manager.send(:write_session, self, object)
15
+ end
16
+
17
+ def read
18
+ @manager.send(:read_session, self)
19
+ end
20
+
21
+ def close
22
+ @manager.send(:close_session, self)
23
+ end
24
+ end
22
25
  end
23
26
  end
24
- end ; end ; end
@@ -1,101 +1,103 @@
1
- module Rake ; module Subproject ; module Client
2
- class SessionManager
1
+ module Rake::Subproject
2
+ module Client #:nodoc: all
3
+ class SessionManager #:nodoc: all
3
4
 
4
- def initialize(port)
5
- fail ArgumentError, "Requires a Port object" unless port.kind_of?(Port)
6
- @port = port
7
- @session_queues = {}
8
- end
9
-
10
- def self.with_each_session(port, &block)
11
- return unless block_given?
12
- session_manager = self.new(port)
13
- threads = Set.new
14
- mutex = Mutex.new
15
- session_manager.start do |session|
16
- mutex.synchronize do
17
- threads << thread = Thread.start do
18
- block.call(session)
19
- mutex.synchronize { threads.delete thread }
5
+ def initialize(port)
6
+ fail ArgumentError, "Requires a Port object" unless port.kind_of?(Port)
7
+ @port = port
8
+ @session_queues = {}
9
+ end
10
+
11
+ def self.with_each_session(port, &block)
12
+ return unless block_given?
13
+ session_manager = self.new(port)
14
+ threads = Set.new
15
+ mutex = Mutex.new
16
+ session_manager.start do |session|
17
+ mutex.synchronize do
18
+ threads << thread = Thread.start do
19
+ block.call(session)
20
+ mutex.synchronize { threads.delete thread }
21
+ end
22
+ end
20
23
  end
24
+ ensure
25
+ log "Waiting for #{threads.count} threads"
26
+ mutex.synchronize { threads.dup }.each(&:join)
27
+ session_manager.close
28
+ end
29
+
30
+ def start(&block)
31
+ log "starting read loop on #{@port.inspect}"
32
+ loop do
33
+ envelope = @port.read
34
+ fail "no 'message' tag in envelope" if (message = envelope['message']).nil?
35
+ fail "no 'session_id' tag in envelope" if (session_id = envelope['session_id']).nil? || session_id == "0"
36
+ session_id = session_id.to_i
37
+ fail "null(0) 'session_id' tag in envelope" if session_id == 0
38
+
39
+ case message
40
+ when 'create_session'
41
+ session = Session.new(self, session_id.to_i)
42
+ @session_queues[session.id] = Queue.new
43
+ block.call(session) unless block.nil?
44
+ when 'message_session'
45
+ fail "No session for #{session_id.to_i}" if (queue = @session_queues[session_id.to_i]).nil?
46
+ queue << envelope['payload']
47
+ else
48
+ fail "did not recognize message: '#{message}'" if (session_id = envelope['session_id']).nil? || session_id == 0
49
+ end
50
+
51
+ end
52
+ rescue EOFError => e
53
+ # log "#{e.message}\n#{e.backtrace.join("\n")}"
54
+ rescue IOError => e
55
+ # log "#{e.message}\n#{e.backtrace.join("\n")}"
56
+ # raise
57
+ end
58
+
59
+ def with_session
60
+ return unless block_given?
61
+ yield session = create_session
62
+ ensure
63
+ session.close unless session.nil?
21
64
  end
22
- end
23
- ensure
24
- log "Waiting for #{threads.count} threads"
25
- mutex.synchronize { threads.dup }.each(&:join)
26
- session_manager.close
27
- end
28
-
29
- def start(&block)
30
- log "starting read loop on #{@port.inspect}"
31
- loop do
32
- envelope = @port.read
33
- fail "no 'message' tag in envelope" if (message = envelope['message']).nil?
34
- fail "no 'session_id' tag in envelope" if (session_id = envelope['session_id']).nil? || session_id == "0"
35
- session_id = session_id.to_i
36
- fail "null(0) 'session_id' tag in envelope" if session_id == 0
37
65
 
38
- case message
39
- when 'create_session'
40
- session = Session.new(self, session_id.to_i)
66
+ def create_session
67
+ session = Session.send(:new, self)
68
+ @port.write(message: 'create_session', session_id: session.id)
41
69
  @session_queues[session.id] = Queue.new
42
- block.call(session) unless block.nil?
43
- when 'message_session'
44
- fail "No session for #{session_id.to_i}" if (queue = @session_queues[session_id.to_i]).nil?
45
- queue << envelope['payload']
46
- else
47
- fail "did not recognize message: '#{message}'" if (session_id = envelope['session_id']).nil? || session_id == 0
70
+ session
48
71
  end
49
-
50
- end
51
- rescue EOFError => e
52
- # log "#{e.message}\n#{e.backtrace.join("\n")}"
53
- rescue IOError => e
54
- # log "#{e.message}\n#{e.backtrace.join("\n")}"
55
- # raise
56
- end
57
-
58
- def with_session
59
- return unless block_given?
60
- yield session = create_session
61
- ensure
62
- session.close unless session.nil?
63
- end
64
-
65
- def create_session
66
- session = Session.send(:new, self)
67
- @port.write(message: 'create_session', session_id: session.id)
68
- @session_queues[session.id] = Queue.new
69
- session
70
- end
71
-
72
- def close
73
- log "session manager: closing #{@port.inspect}"
74
- end
75
72
 
76
- private
77
-
78
- def close_session(session)
79
- log "closing session: #{session.id} on #{@port.inspect}"
80
- @session_queues.delete(session.id)
81
- end
82
-
83
- def read_session(session)
84
- fail "No queue for #{session.inspect}" if (queue = @session_queues[session.id]).nil?
85
- fail EOFError if queue.empty? && @port.closed?
86
- queue.pop
87
- end
88
-
89
- def write_session(session, object)
90
- @port.write(message: 'message_session', session_id: session.id, payload: object)
91
- end
92
-
93
- private
94
- def self.log(message)
95
- $stderr.print "#{message}\n" if false
96
- end
97
- def log(message)
98
- self.class.log(message)
73
+ def close
74
+ log "session manager: closing #{@port.inspect}"
75
+ end
76
+
77
+ private
78
+
79
+ def close_session(session)
80
+ log "closing session: #{session.id} on #{@port.inspect}"
81
+ @session_queues.delete(session.id)
82
+ end
83
+
84
+ def read_session(session)
85
+ fail "No queue for #{session.inspect}" if (queue = @session_queues[session.id]).nil?
86
+ fail EOFError if queue.empty? && @port.closed?
87
+ queue.pop
88
+ end
89
+
90
+ def write_session(session, object)
91
+ @port.write(message: 'message_session', session_id: session.id, payload: object)
92
+ end
93
+
94
+ private
95
+ def self.log(message)
96
+ $stderr.print "#{message}\n" if false
97
+ end
98
+ def log(message)
99
+ self.class.log(message)
100
+ end
101
+ end
99
102
  end
100
103
  end
101
- end ; end ; end
@@ -1,5 +1,5 @@
1
1
  module Rake
2
- class Application
2
+ class Application #:nodoc: all
3
3
  prepend Subproject::TaskManager
4
4
  end
5
5
  end
@@ -1,4 +1,38 @@
1
1
  module Rake::DSL
2
+ # Bridges the subproject's tasks to within the current Rakefile.
3
+ # Tasks from the sub-project can be referenced in the super-project by
4
+ # prefixing the sub-project task with the namespace of its containing directory.
5
+ #
6
+ # For example, given a project in a subdirectory, '+foo+':
7
+ #
8
+ # +foo/Rakefile+:
9
+ # task :bar
10
+ #
11
+ # The super project can include it via the #subproject call and reference the
12
+ # subproject's tasks via a namespace or via a path:
13
+ #
14
+ # +Rakefile+:
15
+ #
16
+ # require 'rake/subproject'
17
+ #
18
+ # subproject 'foo'
19
+ #
20
+ # task :first => foo:bar # valid reference
21
+ # task :second => foo/bar # valid reference
22
+ #
23
+ # The +path+ parameter can be either a *directory* containing a valid Rakefile or a path
24
+ # to a specific *file*.
25
+ #
26
+ # Given a directory::
27
+ #
28
+ # It cannot be to a subdirectory whose superdirectory contains a Rakefile. The
29
+ # subdirectory itself must contain the Rakefile. The namespace is
30
+ # generated from the directory path.
31
+ #
32
+ # Given a file::
33
+ #
34
+ # The namespace is generated from the directory containing the file.
35
+ #
2
36
  def subproject(path)
3
37
  Rake.application.define_subproject(path)
4
38
  end
@@ -1,52 +1,54 @@
1
- module Rake ; module Subproject ; module Server
2
- class Port
3
- attr_accessor :name
4
-
5
- def self.open(fd, option)
6
- return unless block_given?
7
- IO.open(fd, option) do |io|
8
- yield port = self.new(io, "server")
9
- end
10
- end
1
+ module Rake::Subproject
2
+ module Server #:nodoc: all
3
+ class Port #:nodoc: all
4
+ attr_accessor :name
11
5
 
12
- DELIMITER = "\0"
6
+ def self.open(fd, option)
7
+ return unless block_given?
8
+ IO.open(fd, option) do |io|
9
+ yield port = self.new(io, "server")
10
+ end
11
+ end
13
12
 
14
- def initialize(io, name = nil)
15
- fail ArgumentError, "Requires an IO object" unless io.kind_of?(IO)
16
- @io = io
17
- self.name = name
18
- end
19
-
20
- def inspect
21
- "Port(#{self.name || @io.fileno})"
22
- end
23
-
24
- def read
25
- log "reading #{self.inspect}..."
26
- json_message = @io.readline(DELIMITER).chomp(DELIMITER)
27
- log "... #{self.inspect} received: #{json_message}"
28
- ::JSON.parse(json_message)
29
- end
30
-
31
- def write(object)
32
- json_message = ::JSON.generate(object)
33
- @io.print(json_message+DELIMITER)
34
- @io.flush
35
- log "#{self.inspect} wrote: #{json_message}"
36
- end
37
-
38
- def close
39
- log "closing #{self.inspect}"
40
- @io.close
41
- end
42
-
43
- def closed?
44
- @io.closed?
45
- end
46
-
47
- private
48
- def log(message)
49
- $stderr.print "#{message}\n" if false
13
+ DELIMITER = "\0"
14
+
15
+ def initialize(io, name = nil)
16
+ fail ArgumentError, "Requires an IO object" unless io.kind_of?(IO)
17
+ @io = io
18
+ self.name = name
19
+ end
20
+
21
+ def inspect
22
+ "Port(#{self.name || @io.fileno})"
23
+ end
24
+
25
+ def read
26
+ log "reading #{self.inspect}..."
27
+ json_message = @io.readline(DELIMITER).chomp(DELIMITER)
28
+ log "... #{self.inspect} received: #{json_message}"
29
+ ::JSON.parse(json_message)
30
+ end
31
+
32
+ def write(object)
33
+ json_message = ::JSON.generate(object)
34
+ @io.print(json_message+DELIMITER)
35
+ @io.flush
36
+ log "#{self.inspect} wrote: #{json_message}"
37
+ end
38
+
39
+ def close
40
+ log "closing #{self.inspect}"
41
+ @io.close
42
+ end
43
+
44
+ def closed?
45
+ @io.closed?
46
+ end
47
+
48
+ private
49
+ def log(message)
50
+ $stderr.print "#{message}\n" if false
51
+ end
52
+ end
50
53
  end
51
54
  end
52
- end ; end ; end
@@ -1,24 +1,26 @@
1
- module Rake ; module Subproject ; module Server
2
- class Session
3
- def initialize(manager, id = nil)
4
- @id = id
5
- @manager = manager
6
- end
7
-
8
- def id
9
- @id || object_id
10
- end
11
-
12
- def write(object)
13
- @manager.send(:write_session, self, object)
14
- end
1
+ module Rake::Subproject
2
+ module Server #:nodoc: all
3
+ class Session #:nodoc: all
4
+ def initialize(manager, id = nil)
5
+ @id = id
6
+ @manager = manager
7
+ end
15
8
 
16
- def read
17
- @manager.send(:read_session, self)
18
- end
19
-
20
- def close
21
- @manager.send(:close_session, self)
9
+ def id
10
+ @id || object_id
11
+ end
12
+
13
+ def write(object)
14
+ @manager.send(:write_session, self, object)
15
+ end
16
+
17
+ def read
18
+ @manager.send(:read_session, self)
19
+ end
20
+
21
+ def close
22
+ @manager.send(:close_session, self)
23
+ end
24
+ end
22
25
  end
23
26
  end
24
- end ; end ; end
@@ -1,101 +1,103 @@
1
- module Rake ; module Subproject ; module Server
2
- class SessionManager
1
+ module Rake::Subproject
2
+ module Server #:nodoc: all
3
+ class SessionManager #:nodoc: all
3
4
 
4
- def initialize(port)
5
- fail ArgumentError, "Requires a Port object" unless port.kind_of?(Port)
6
- @port = port
7
- @session_queues = {}
8
- end
9
-
10
- def self.with_each_session(port, &block)
11
- return unless block_given?
12
- session_manager = self.new(port)
13
- threads = Set.new
14
- mutex = Mutex.new
15
- session_manager.start do |session|
16
- mutex.synchronize do
17
- threads << thread = Thread.start do
18
- block.call(session)
19
- mutex.synchronize { threads.delete thread }
5
+ def initialize(port)
6
+ fail ArgumentError, "Requires a Port object" unless port.kind_of?(Port)
7
+ @port = port
8
+ @session_queues = {}
9
+ end
10
+
11
+ def self.with_each_session(port, &block)
12
+ return unless block_given?
13
+ session_manager = self.new(port)
14
+ threads = Set.new
15
+ mutex = Mutex.new
16
+ session_manager.start do |session|
17
+ mutex.synchronize do
18
+ threads << thread = Thread.start do
19
+ block.call(session)
20
+ mutex.synchronize { threads.delete thread }
21
+ end
22
+ end
20
23
  end
24
+ ensure
25
+ log "Waiting for #{threads.count} threads"
26
+ mutex.synchronize { threads.dup }.each(&:join)
27
+ session_manager.close
28
+ end
29
+
30
+ def start(&block)
31
+ log "starting read loop on #{@port.inspect}"
32
+ loop do
33
+ envelope = @port.read
34
+ fail "no 'message' tag in envelope" if (message = envelope['message']).nil?
35
+ fail "no 'session_id' tag in envelope" if (session_id = envelope['session_id']).nil? || session_id == "0"
36
+ session_id = session_id.to_i
37
+ fail "null(0) 'session_id' tag in envelope" if session_id == 0
38
+
39
+ case message
40
+ when 'create_session'
41
+ session = Session.new(self, session_id.to_i)
42
+ @session_queues[session.id] = Queue.new
43
+ block.call(session) unless block.nil?
44
+ when 'message_session'
45
+ fail "No session for #{session_id.to_i}" if (queue = @session_queues[session_id.to_i]).nil?
46
+ queue << envelope['payload']
47
+ else
48
+ fail "did not recognize message: '#{message}'" if (session_id = envelope['session_id']).nil? || session_id == 0
49
+ end
50
+
51
+ end
52
+ rescue EOFError => e
53
+ # log "#{e.message}\n#{e.backtrace.join("\n")}"
54
+ rescue IOError => e
55
+ # log "#{e.message}\n#{e.backtrace.join("\n")}"
56
+ # raise
57
+ end
58
+
59
+ def with_session
60
+ return unless block_given?
61
+ yield session = create_session
62
+ ensure
63
+ session.close unless session.nil?
21
64
  end
22
- end
23
- ensure
24
- log "Waiting for #{threads.count} threads"
25
- mutex.synchronize { threads.dup }.each(&:join)
26
- session_manager.close
27
- end
28
-
29
- def start(&block)
30
- log "starting read loop on #{@port.inspect}"
31
- loop do
32
- envelope = @port.read
33
- fail "no 'message' tag in envelope" if (message = envelope['message']).nil?
34
- fail "no 'session_id' tag in envelope" if (session_id = envelope['session_id']).nil? || session_id == "0"
35
- session_id = session_id.to_i
36
- fail "null(0) 'session_id' tag in envelope" if session_id == 0
37
65
 
38
- case message
39
- when 'create_session'
40
- session = Session.new(self, session_id.to_i)
66
+ def create_session
67
+ session = Session.send(:new, self)
68
+ @port.write(message: 'create_session', session_id: session.id)
41
69
  @session_queues[session.id] = Queue.new
42
- block.call(session) unless block.nil?
43
- when 'message_session'
44
- fail "No session for #{session_id.to_i}" if (queue = @session_queues[session_id.to_i]).nil?
45
- queue << envelope['payload']
46
- else
47
- fail "did not recognize message: '#{message}'" if (session_id = envelope['session_id']).nil? || session_id == 0
70
+ session
48
71
  end
49
-
50
- end
51
- rescue EOFError => e
52
- # log "#{e.message}\n#{e.backtrace.join("\n")}"
53
- rescue IOError => e
54
- # log "#{e.message}\n#{e.backtrace.join("\n")}"
55
- # raise
56
- end
57
-
58
- def with_session
59
- return unless block_given?
60
- yield session = create_session
61
- ensure
62
- session.close unless session.nil?
63
- end
64
-
65
- def create_session
66
- session = Session.send(:new, self)
67
- @port.write(message: 'create_session', session_id: session.id)
68
- @session_queues[session.id] = Queue.new
69
- session
70
- end
71
-
72
- def close
73
- log "session manager: closing #{@port.inspect}"
74
- end
75
72
 
76
- private
77
-
78
- def close_session(session)
79
- log "closing session: #{session.id} on #{@port.inspect}"
80
- @session_queues.delete(session.id)
81
- end
82
-
83
- def read_session(session)
84
- fail "No queue for #{session.inspect}" if (queue = @session_queues[session.id]).nil?
85
- fail EOFError if queue.empty? && @port.closed?
86
- queue.pop
87
- end
88
-
89
- def write_session(session, object)
90
- @port.write(message: 'message_session', session_id: session.id, payload: object)
91
- end
92
-
93
- private
94
- def self.log(message)
95
- $stderr.print "#{message}\n" if false
96
- end
97
- def log(message)
98
- self.class.log(message)
73
+ def close
74
+ log "session manager: closing #{@port.inspect}"
75
+ end
76
+
77
+ private
78
+
79
+ def close_session(session)
80
+ log "closing session: #{session.id} on #{@port.inspect}"
81
+ @session_queues.delete(session.id)
82
+ end
83
+
84
+ def read_session(session)
85
+ fail "No queue for #{session.inspect}" if (queue = @session_queues[session.id]).nil?
86
+ fail EOFError if queue.empty? && @port.closed?
87
+ queue.pop
88
+ end
89
+
90
+ def write_session(session, object)
91
+ @port.write(message: 'message_session', session_id: session.id, payload: object)
92
+ end
93
+
94
+ private
95
+ def self.log(message)
96
+ $stderr.print "#{message}\n" if false
97
+ end
98
+ def log(message)
99
+ self.class.log(message)
100
+ end
101
+ end
99
102
  end
100
103
  end
101
- end ; end ; end
@@ -15,7 +15,7 @@ Rake::Task.define_task(:'subproject:server:start', [:fd]) do |t, args|
15
15
  end
16
16
  end
17
17
 
18
- def log(message)
18
+ def log(message) #:nodoc: all
19
19
  $stderr.print "#{message}\n" if false
20
20
  end
21
21
 
@@ -43,7 +43,7 @@ Rake::Task.define_task(:'subproject:server:start', [:fd]) do |t, args|
43
43
  Rake::Task[task_name].invoke(*task_args['array'])
44
44
  log "#{task_name} complete!"
45
45
  session.write(message: 'task_complete')
46
- rescue RuntimeError => e
46
+ rescue StandardError => e
47
47
  session.write(message: 'task_failed', exception:{message: e.message, backtrace: e.backtrace})
48
48
  ensure
49
49
  session.close
@@ -1,5 +1,5 @@
1
1
  module Rake::Subproject
2
- module TaskManager
2
+ module TaskManager #:nodoc: all
3
3
 
4
4
  def define_subproject(path)
5
5
  raise "Subproject path '#{path}' does not exist" unless File.exist?(path)
@@ -1,6 +1,6 @@
1
1
  require 'json'
2
2
  module Rake::Subproject
3
- class TaskRunner
3
+ class TaskRunner #:nodoc: all
4
4
  attr_reader :directory
5
5
 
6
6
  include FileUtils
@@ -1,5 +1,5 @@
1
1
  module Rake
2
2
  module Subproject
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.9"
4
4
  end
5
5
  end
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
- # $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- require "#{lib}/rake/subproject/version"
5
+ require "rake/subproject/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "rake-subproject"
@@ -7,11 +7,10 @@ describe Rake::Subproject do
7
7
  Rake::Subproject::VERSION.should_not be_nil
8
8
  end
9
9
 
10
- it 'should do something useful' do
11
- false.should eq(true)
12
- end
13
-
14
10
  it "accepts the #subproject call" do
15
- subproject('test')
11
+ Dir.chdir("#{SUPPORT_DIR}/exceptions") do
12
+ load "Rakefile"
13
+ expect { Rake.application.lookup(:exception).invoke }.to raise_error(Rake::Subproject::Error)
14
+ end
16
15
  end
17
16
  end
@@ -1,2 +1,4 @@
1
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
2
  require 'rake/subproject'
3
+
4
+ SUPPORT_DIR = File.dirname(__FILE__)+"/support"
@@ -0,0 +1,5 @@
1
+ require 'rake/subproject'
2
+
3
+ subproject 'foo'
4
+
5
+ task :exception => 'foo:exception'
@@ -0,0 +1,6 @@
1
+ require 'rake/subproject'
2
+
3
+ subproject 'bar'
4
+
5
+ task :exception => 'bar:exception'
6
+
@@ -0,0 +1,4 @@
1
+ task :exception do
2
+ raise
3
+ end
4
+
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-subproject
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Bishop
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-06 00:00:00.000000000 Z
11
+ date: 2014-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.5'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.5'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ! '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ! '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description:
@@ -59,7 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
62
+ - ".gitignore"
63
63
  - Gemfile
64
64
  - LICENSE.txt
65
65
  - README.md
@@ -81,6 +81,9 @@ files:
81
81
  - rake-subproject.gemspec
82
82
  - spec/rake/subproject_spec.rb
83
83
  - spec/spec_helper.rb
84
+ - spec/support/exceptions/Rakefile
85
+ - spec/support/exceptions/foo/Rakefile
86
+ - spec/support/exceptions/foo/bar/Rakefile
84
87
  homepage: ''
85
88
  licenses:
86
89
  - MIT
@@ -91,12 +94,12 @@ require_paths:
91
94
  - lib
92
95
  required_ruby_version: !ruby/object:Gem::Requirement
93
96
  requirements:
94
- - - ~>
97
+ - - "~>"
95
98
  - !ruby/object:Gem::Version
96
99
  version: '2.0'
97
100
  required_rubygems_version: !ruby/object:Gem::Requirement
98
101
  requirements:
99
- - - ! '>='
102
+ - - ">="
100
103
  - !ruby/object:Gem::Version
101
104
  version: '0'
102
105
  requirements: []
@@ -108,3 +111,6 @@ summary: Allows bridging of sub-projects into super-projects
108
111
  test_files:
109
112
  - spec/rake/subproject_spec.rb
110
113
  - spec/spec_helper.rb
114
+ - spec/support/exceptions/Rakefile
115
+ - spec/support/exceptions/foo/Rakefile
116
+ - spec/support/exceptions/foo/bar/Rakefile