rake-subproject 0.0.6 → 0.0.9

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.
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