jubilee 2.1.0.rc1-java → 3.0.0.beta2-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -14
- data/Guardfile +24 -0
- data/README.md +34 -66
- data/Rakefile +1 -1
- data/examples/chatapp/Gemfile +2 -1
- data/examples/chatapp/Gemfile.lock +2 -2
- data/examples/chatapp/README.md +2 -14
- data/examples/chatapp/app.rb +19 -11
- data/examples/chatapp/public/assets/javascripts/application.js +1 -1
- data/examples/chatapp/public/assets/javascripts/vertxbus.js +60 -48
- data/examples/client/vertxbus.js +60 -48
- data/examples/shims_example/log/development.log +0 -0
- data/jars/hazelcast-3.5.2.jar +0 -0
- data/jars/jackson-annotations-2.6.0.jar +0 -0
- data/jars/jackson-core-2.6.1.jar +0 -0
- data/jars/jackson-databind-2.6.1.jar +0 -0
- data/jars/netty-buffer-4.0.33.Final.jar +0 -0
- data/jars/netty-codec-4.0.33.Final.jar +0 -0
- data/jars/netty-codec-http-4.0.33.Final.jar +0 -0
- data/jars/netty-common-4.0.33.Final.jar +0 -0
- data/jars/netty-handler-4.0.33.Final.jar +0 -0
- data/jars/netty-transport-4.0.33.Final.jar +0 -0
- data/jars/vertx-auth-common-3.2.1.jar +0 -0
- data/jars/vertx-core-3.2.1.jar +0 -0
- data/jars/vertx-hazelcast-3.2.1.jar +0 -0
- data/jars/vertx-lang-ruby-3.2.1.jar +0 -0
- data/jars/vertx-web-3.2.1.jar +0 -0
- data/jubilee.gemspec +40 -42
- data/lib/jubilee.rb +7 -2
- data/lib/jubilee/cli.rb +4 -4
- data/lib/jubilee/jubilee.jar +0 -0
- data/lib/jubilee/response.rb +1 -1
- data/lib/jubilee/version.rb +3 -3
- data/pom.xml +10 -94
- data/spec/apps/rails4/basic/Gemfile +2 -2
- data/spec/apps/rails4/basic/Gemfile.lock +5 -6
- data/src/main/java/org/jruby/jubilee/Const.java +1 -4
- data/src/main/java/org/jruby/jubilee/JubileeVerticle.java +41 -46
- data/src/main/java/org/jruby/jubilee/RackApplication.java +37 -57
- data/src/main/java/org/jruby/jubilee/RackEnvironment.java +38 -35
- data/src/main/java/org/jruby/jubilee/RackEnvironmentHash.java +1 -7
- data/src/main/java/org/jruby/jubilee/RubyHttpServerResponse.java +12 -6
- data/src/main/java/org/jruby/jubilee/RubyNetSocket.java +9 -12
- data/src/main/java/org/jruby/jubilee/RubyPlatformManager.java +39 -43
- data/src/main/java/org/jruby/jubilee/impl/RubyIORackInput.java +2 -1
- data/src/main/java/org/jruby/jubilee/vertx/JubileeVertx.java +1 -1
- metadata +30 -54
- data/examples/chatapp/config.json +0 -4
- data/jars/annotations-1.3.2.jar +0 -0
- data/jars/hazelcast-3.2.3.jar +0 -0
- data/jars/jackson-annotations-2.2.2.jar +0 -0
- data/jars/jackson-core-2.2.2.jar +0 -0
- data/jars/jackson-databind-2.2.2.jar +0 -0
- data/jars/lang-jruby-2.1.0-final.jar +0 -0
- data/jars/log4j-1.2.16.jar +0 -0
- data/jars/netty-all-4.0.20.Final.jar +0 -0
- data/jars/slf4j-api-1.6.2.jar +0 -0
- data/jars/vertx-core-2.1.2.jar +0 -0
- data/jars/vertx-hazelcast-2.1.2.jar +0 -0
- data/jars/vertx-platform-2.1.2.jar +0 -0
- data/lib/container.rb +0 -117
- data/lib/core/buffer.rb +0 -251
- data/lib/core/datagram.rb +0 -280
- data/lib/core/dns.rb +0 -143
- data/lib/core/event_bus.rb +0 -277
- data/lib/core/file_system.rb +0 -479
- data/lib/core/http.rb +0 -1307
- data/lib/core/net.rb +0 -251
- data/lib/core/network_support.rb +0 -77
- data/lib/core/parsetools.rb +0 -105
- data/lib/core/shared_data.rb +0 -214
- data/lib/core/sock_js.rb +0 -116
- data/lib/core/ssl_support.rb +0 -163
- data/lib/core/streams.rb +0 -183
- data/lib/core/tcp_support.rb +0 -136
- data/lib/core/timers.rb +0 -73
- data/lib/core/vertx_require.rb +0 -25
- data/lib/core/wrapped_handler.rb +0 -28
- data/lib/jubilee/jubilee_require.rb +0 -24
- data/lib/test_utils.rb +0 -66
- data/lib/vertx.rb +0 -30
- data/lib/vertx_tests.rb +0 -8
- data/src/main/assembly/mod.xml +0 -21
- data/src/main/java/org/jruby/jubilee/JubileeVerticleFactory.java +0 -258
- data/src/main/java/org/jruby/jubilee/RubyCallable.java +0 -52
- data/src/main/resources/META-INF/services/org.vertx.java.deploy.impl.jruby.JubileeVerticleFactory +0 -1
- data/src/main/resources/mod.json +0 -11
- data/vertx_classpath.txt +0 -12
data/lib/core/dns.rb
DELETED
@@ -1,143 +0,0 @@
|
|
1
|
-
# Copyright 2013 the original author or authors.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'core/wrapped_handler'
|
16
|
-
require 'socket'
|
17
|
-
|
18
|
-
module Vertx
|
19
|
-
|
20
|
-
MxRecord = Struct.new(:priority, :name)
|
21
|
-
SrvRecord = Struct.new(:priority, :weight, :port, :name, :protocol, :service, :target)
|
22
|
-
|
23
|
-
# An async DNS Client
|
24
|
-
#
|
25
|
-
# @author Norman Maurer
|
26
|
-
class DnsClient
|
27
|
-
def initialize(*servers)
|
28
|
-
@j_dns = org.vertx.java.platform.impl.JRubyVerticleFactory.vertx.createDnsClient(
|
29
|
-
servers.map { |value| java.net.InetSocketAddress.new(value.ip_address, value.ip_port) }.to_java(java.net.InetSocketAddress))
|
30
|
-
end
|
31
|
-
|
32
|
-
# Try to lookup the A (ipv4) or AAAA (ipv6) record for the given name. The first found will be used.
|
33
|
-
# The handler will be notified once the lookup completes.
|
34
|
-
# @param [Block] hndlr A block to be used as the handler
|
35
|
-
def lookup(name, &hndlr)
|
36
|
-
@j_dns.lookup(name, ARWrappedHandler.new(hndlr) { |addr| addr.getHostAddress()})
|
37
|
-
self
|
38
|
-
end
|
39
|
-
|
40
|
-
# Try to lookup the A (ipv4) record for the given name. The first found will be used.
|
41
|
-
# The handler will be notified once the lookup completes.
|
42
|
-
# @param [Block] hndlr A block to be used as the handler
|
43
|
-
def lookup_4(name, &hndlr)
|
44
|
-
@j_dns.lookup4(name, ARWrappedHandler.new(hndlr) { |addr| addr.getHostAddress()})
|
45
|
-
self
|
46
|
-
end
|
47
|
-
|
48
|
-
# Try to AAAA (ipv6) record for the given name. The first found will be used.
|
49
|
-
# The handler will be notified once the lookup completes.
|
50
|
-
# @param [Block] hndlr A block to be used as the handler
|
51
|
-
def lookup_6(name, &hndlr)
|
52
|
-
@j_dns.lookup6(name, ARWrappedHandler.new(hndlr) { |addr| addr.getHostAddress()})
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
# Try to resolve all A records for the given name.
|
57
|
-
# The handler will be notified once the operation completes.
|
58
|
-
# @param [Block] hndlr A block to be used as the handler
|
59
|
-
def resolve_a(name, &hndlr)
|
60
|
-
@j_dns.resolveA(name, ARWrappedHandler.new(hndlr) { |j_list|
|
61
|
-
j_list.map { |item|
|
62
|
-
item.getHostAddress()
|
63
|
-
}
|
64
|
-
})
|
65
|
-
self
|
66
|
-
end
|
67
|
-
|
68
|
-
# Try to resolve all AAAA records for the given name.
|
69
|
-
# The handler will be notified once the operation completes.
|
70
|
-
# @param [Block] hndlr A block to be used as the handler
|
71
|
-
def resolve_aaaa(name, &hndlr)
|
72
|
-
@j_dns.resolveAAAA(name, ARWrappedHandler.new(hndlr) { |j_list|
|
73
|
-
j_list.map { |item|
|
74
|
-
item.getHostAddress()
|
75
|
-
}
|
76
|
-
})
|
77
|
-
self
|
78
|
-
end
|
79
|
-
|
80
|
-
# Try to resolve all CNAME records for the given name.
|
81
|
-
# The handler will be notified once the operation completes.
|
82
|
-
# @param [Block] hndlr A block to be used as the handler
|
83
|
-
def resolve_cname(name, &hndlr)
|
84
|
-
@j_dns.resolveCNAME(name, ARWrappedHandler.new(hndlr))
|
85
|
-
self
|
86
|
-
end
|
87
|
-
|
88
|
-
# Try to resolve all MX records for the given name.
|
89
|
-
# The handler will be notified once the operation completes.
|
90
|
-
# @param [Block] hndlr A block to be used as the handler
|
91
|
-
def resolve_mx(name, &hndlr)
|
92
|
-
@j_dns.resolveMX(name, ARWrappedHandler.new(hndlr) { |j_list|
|
93
|
-
j_list.map { |item|
|
94
|
-
MxRecord.new(item.priority(), item.name())
|
95
|
-
}
|
96
|
-
})
|
97
|
-
self
|
98
|
-
end
|
99
|
-
|
100
|
-
# Try to resolve the PTR record for the given name.
|
101
|
-
# The handler will be notified once the operation completes.
|
102
|
-
# @param [Block] hndlr A block to be used as the handler
|
103
|
-
def resolve_ptr(name, &hndlr)
|
104
|
-
@j_dns.resolvePTR(name, ARWrappedHandler.new(hndlr))
|
105
|
-
self
|
106
|
-
end
|
107
|
-
|
108
|
-
# Try to resolve all NS records for the given name.
|
109
|
-
# The handler will be notified once the operation completes.
|
110
|
-
# @param [Block] hndlr A block to be used as the handler
|
111
|
-
def resolve_ns(name, &hndlr)
|
112
|
-
@j_dns.resolveNS(name, ARWrappedHandler.new(hndlr))
|
113
|
-
self
|
114
|
-
end
|
115
|
-
|
116
|
-
def resolve_txt(name, &hndlr)
|
117
|
-
@j_dns.resolveTXT(name, ARWrappedHandler.new(hndlr))
|
118
|
-
self
|
119
|
-
end
|
120
|
-
|
121
|
-
# Try to resolve all SRV records for the given name.
|
122
|
-
# The handler will be notified once the operation completes.
|
123
|
-
# @param [Block] hndlr A block to be used as the handler
|
124
|
-
def resolve_srv(name, &hndlr)
|
125
|
-
@j_dns.resolveSRV(name, ARWrappedHandler.new(hndlr) { |j_list|
|
126
|
-
j_list.map { |item|
|
127
|
-
SrvRecord.new(item.priority(), item.weight(), item.port(), item.name(), item.protocol(), item.service(), item.target())
|
128
|
-
}
|
129
|
-
})
|
130
|
-
self
|
131
|
-
end
|
132
|
-
|
133
|
-
# Try to do a reverse lookup of an ipaddress. This is basically the same as doing trying to resolve a PTR record
|
134
|
-
# but allows you to just pass in the ipaddress and not a valid ptr query string.
|
135
|
-
# The handler will be notified once the operation completes.
|
136
|
-
# @param [Block] hndlr A block to be used as the handler
|
137
|
-
def reverse_lookup(name, &hndlr)
|
138
|
-
@j_dns.reverseLookup(name, ARWrappedHandler.new(hndlr) { |addr| addr.getHostName()})
|
139
|
-
self
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|
143
|
-
end
|
data/lib/core/event_bus.rb
DELETED
@@ -1,277 +0,0 @@
|
|
1
|
-
# Copyright 2011 the original author or authors.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'rubygems'
|
16
|
-
require 'json'
|
17
|
-
|
18
|
-
module Vertx
|
19
|
-
|
20
|
-
# This class represents a distributed lightweight event bus which can encompass multiple vert.x instances.
|
21
|
-
# It is very useful for otherwise isolated vert.x application instances to communicate with each other.
|
22
|
-
#
|
23
|
-
# The event bus implements both publish / subscribe network and point to point messaging.
|
24
|
-
#
|
25
|
-
# For publish / subscribe, messages can be published to an address using one of the publish methods. An
|
26
|
-
# address is a simple String instance. Handlers are registered against an address. There can be multiple handlers
|
27
|
-
# registered against each address, and a particular handler can be registered against multiple addresses.
|
28
|
-
# The event bus will route a sent message to all handlers which are registered against that address.
|
29
|
-
|
30
|
-
# For point to point messaging, messages can be sent to an address using the send method.
|
31
|
-
# The messages will be delivered to a single handler, if one is registered on that address. If more than one
|
32
|
-
# handler is registered on the same address, Vert.x will choose one and deliver the message to that. Vert.x will
|
33
|
-
# aim to fairly distribute messages in a round-robin way, but does not guarantee strict round-robin under all
|
34
|
-
# circumstances.
|
35
|
-
#
|
36
|
-
# All messages sent over the bus are transient. On event of failure of all or part of the event bus messages
|
37
|
-
# may be lost. Applications should be coded to cope with lost messages, e.g. by resending them,
|
38
|
-
# and making application services idempotent.
|
39
|
-
#
|
40
|
-
# The order of messages received by any specific handler from a specific sender should match the order of messages
|
41
|
-
# sent from that sender.
|
42
|
-
#
|
43
|
-
# When sending a message, a reply handler can be provided. If so, it will be called when the reply from the receiver
|
44
|
-
# has been received. Reply messages can also be replied to, etc, ad infinitum.
|
45
|
-
#
|
46
|
-
# Different event bus instances can be clustered together over a network, to give a single logical event bus.
|
47
|
-
#
|
48
|
-
# When receiving a message in a handler the received object is an instance of EventBus::Message - this contains
|
49
|
-
# the actual message plus a reply method which can be used to reply to it.
|
50
|
-
#
|
51
|
-
# @author {http://tfox.org Tim Fox}
|
52
|
-
class EventBus
|
53
|
-
|
54
|
-
@@handler_map = {}
|
55
|
-
|
56
|
-
@@j_eventbus = org.vertx.java.platform.impl.JRubyVerticleFactory.vertx.eventBus()
|
57
|
-
|
58
|
-
# Send a message on the event bus
|
59
|
-
# @param message [Hash] The message to send
|
60
|
-
# @param reply_handler [Block] An optional reply handler.
|
61
|
-
# @param [Integer] timeout if specified sends the message
|
62
|
-
# It will be called when the reply from a receiver is received.
|
63
|
-
def EventBus.send(address, message, timeout = nil, &reply_handler)
|
64
|
-
|
65
|
-
if timeout.nil?
|
66
|
-
EventBus.send_or_pub(true, address, message, reply_handler)
|
67
|
-
else
|
68
|
-
EventBus.send_or_pub(true, address, message, reply_handler, timeout)
|
69
|
-
end
|
70
|
-
|
71
|
-
self
|
72
|
-
end
|
73
|
-
|
74
|
-
# Sets a default timeout, in ms, for replies. If a messages is sent specify a reply handler
|
75
|
-
# but without specifying a timeout, then the reply handler is timed out, i.e. it is automatically unregistered
|
76
|
-
# if a message hasn't been received before timeout.
|
77
|
-
# The default value for default send timeout is -1, which means "never timeout".
|
78
|
-
# @param timeout
|
79
|
-
def EventBus.default_reply_timeout=(timeout)
|
80
|
-
@@j_eventbus.setDefaultReplyTimeout(timeout)
|
81
|
-
self
|
82
|
-
end
|
83
|
-
|
84
|
-
# Gets the default reply timeout value
|
85
|
-
def EventBus.default_reply_timeout
|
86
|
-
@@j_eventbus.getDefaultReplyTimeout
|
87
|
-
end
|
88
|
-
|
89
|
-
# Publish a message on the event bus
|
90
|
-
# @param message [Hash] The message to publish
|
91
|
-
def EventBus.publish(address, message)
|
92
|
-
EventBus.send_or_pub(false, address, message)
|
93
|
-
self
|
94
|
-
end
|
95
|
-
|
96
|
-
# @private
|
97
|
-
def EventBus.send_or_pub(send, address, message, reply_handler = nil, timeout = nil)
|
98
|
-
raise "An address must be specified" if !address
|
99
|
-
raise "A message must be specified" if message == nil
|
100
|
-
message = convert_msg(message)
|
101
|
-
if send
|
102
|
-
if reply_handler != nil
|
103
|
-
if timeout != nil
|
104
|
-
@@j_eventbus.send_with_timeout address, message, timeout, AsyncInternalHandler.new(reply_handler)
|
105
|
-
else
|
106
|
-
@@j_eventbus.send(address, message, InternalHandler.new(reply_handler))
|
107
|
-
end
|
108
|
-
else
|
109
|
-
@@j_eventbus.send(address, message)
|
110
|
-
end
|
111
|
-
else
|
112
|
-
@@j_eventbus.publish(address, message)
|
113
|
-
end
|
114
|
-
self
|
115
|
-
end
|
116
|
-
|
117
|
-
# Register a handler.
|
118
|
-
# @param address [String] The address to register for. Messages sent to that address will be
|
119
|
-
# received by the handler. A single handler can be registered against many addresses.
|
120
|
-
# @param local_only [Boolean] If true then handler won't be propagated across cluster
|
121
|
-
# @param message_hndlr [Block] The handler
|
122
|
-
# @return [FixNum] id of the handler which can be used in {EventBus.unregister_handler}
|
123
|
-
def EventBus.register_handler(address, local_only = false, &message_hndlr)
|
124
|
-
raise "An address must be specified" if !address
|
125
|
-
raise "A message handler must be specified" if !message_hndlr
|
126
|
-
internal = InternalHandler.new(message_hndlr)
|
127
|
-
if local_only
|
128
|
-
@@j_eventbus.registerLocalHandler(address, internal)
|
129
|
-
else
|
130
|
-
@@j_eventbus.registerHandler(address, internal)
|
131
|
-
end
|
132
|
-
id = java.util.UUID.randomUUID.toString
|
133
|
-
@@handler_map[id] = [address, internal]
|
134
|
-
id
|
135
|
-
end
|
136
|
-
|
137
|
-
# Registers a handler against a uniquely generated address, the address is returned as the id
|
138
|
-
# received by the handler. A single handler can be registered against many addresses.
|
139
|
-
# @param local_only [Boolean] If true then handler won't be propagated across cluster
|
140
|
-
# @param message_hndlr [Block] The handler
|
141
|
-
# @return [FixNum] id of the handler which can be used in {EventBus.unregister_handler}
|
142
|
-
def EventBus.register_simple_handler(local_only = false, &message_hndlr)
|
143
|
-
raise "A message handler must be specified" if !message_hndlr
|
144
|
-
internal = InternalHandler.new(message_hndlr)
|
145
|
-
id = java.util.UUID.randomUUID.toString
|
146
|
-
if local_only
|
147
|
-
@@j_eventbus.registerLocalHandler(id, internal)
|
148
|
-
else
|
149
|
-
@@j_eventbus.registerHandler(id, internal)
|
150
|
-
end
|
151
|
-
@@handler_map[id] = [id, internal]
|
152
|
-
id
|
153
|
-
end
|
154
|
-
|
155
|
-
# Unregisters a handler
|
156
|
-
# @param handler_id [FixNum] The id of the handler to unregister. Returned from {EventBus.register_handler}
|
157
|
-
def EventBus.unregister_handler(handler_id)
|
158
|
-
raise "A handler_id must be specified" if !handler_id
|
159
|
-
tuple = @@handler_map.delete(handler_id)
|
160
|
-
raise "Cannot find handler for id #{handler_id}" if !tuple
|
161
|
-
@@j_eventbus.unregisterHandler(tuple.first, tuple.last)
|
162
|
-
self
|
163
|
-
end
|
164
|
-
|
165
|
-
# @private
|
166
|
-
def EventBus.convert_msg(message)
|
167
|
-
if message.is_a? Hash
|
168
|
-
message = org.vertx.java.core.json.JsonObject.new(JSON.generate(message))
|
169
|
-
elsif message.is_a? Buffer
|
170
|
-
message = message._to_java_buffer
|
171
|
-
elsif message.is_a? Fixnum
|
172
|
-
message = java.lang.Long.new(message)
|
173
|
-
elsif message.is_a? Float
|
174
|
-
message = java.lang.Double.new(message)
|
175
|
-
end
|
176
|
-
message
|
177
|
-
end
|
178
|
-
|
179
|
-
end
|
180
|
-
|
181
|
-
# @private
|
182
|
-
class InternalHandler
|
183
|
-
include org.vertx.java.core.Handler
|
184
|
-
|
185
|
-
def initialize(hndlr)
|
186
|
-
@hndlr = hndlr
|
187
|
-
end
|
188
|
-
|
189
|
-
def handle(message)
|
190
|
-
@hndlr.call(Message.new(message))
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
|
195
|
-
# Represents a message received from the event bus
|
196
|
-
# @author {http://tfox.org Tim Fox}
|
197
|
-
class Message
|
198
|
-
|
199
|
-
attr_reader :body
|
200
|
-
|
201
|
-
# @private
|
202
|
-
def initialize(message)
|
203
|
-
|
204
|
-
@j_del = message
|
205
|
-
if message.body.is_a? org.vertx.java.core.json.JsonObject
|
206
|
-
@body = JSON.parse(message.body.encode)
|
207
|
-
elsif message.body.is_a? org.vertx.java.core.buffer.Buffer
|
208
|
-
@body = Buffer.new(message.body)
|
209
|
-
else
|
210
|
-
@body = message.body
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
# Reply to this message. If the message was sent specifying a receipt handler, that handler will be
|
215
|
-
# called when it has received a reply. If the message wasn't sent specifying a receipt handler
|
216
|
-
# this method does nothing.
|
217
|
-
# Replying to a message this way is equivalent to sending a message to an address which is the same as the message id
|
218
|
-
# of the original message.
|
219
|
-
# @param [Hash] Message send as reply
|
220
|
-
def reply(reply, timeout = nil, &reply_handler)
|
221
|
-
raise "A reply message must be specified" if reply == nil
|
222
|
-
reply = EventBus.convert_msg(reply)
|
223
|
-
if reply_handler != nil
|
224
|
-
if timeout != nil
|
225
|
-
@j_del.reply_with_timeout reply, timeout, AsyncInternalHandler.new(reply_handler)
|
226
|
-
else
|
227
|
-
@j_del.reply(reply, InternalHandler.new(reply_handler))
|
228
|
-
end
|
229
|
-
else
|
230
|
-
@j_del.reply(reply)
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
# Gets the address the message was sent to
|
235
|
-
# @return [String] The recipient's address
|
236
|
-
def address
|
237
|
-
@j_del.address
|
238
|
-
end
|
239
|
-
|
240
|
-
def fail(failure_code, message)
|
241
|
-
@j_del.fail failure_code, message
|
242
|
-
end
|
243
|
-
|
244
|
-
end
|
245
|
-
|
246
|
-
|
247
|
-
# Error when the event bus use timeout and doesn't reply in time
|
248
|
-
# Copied from mod-lang-jython
|
249
|
-
class ReplyError
|
250
|
-
|
251
|
-
TIMEOUT = 0
|
252
|
-
NO_HANDLERS = 1
|
253
|
-
RECIPIENT_FAILURE = 2
|
254
|
-
|
255
|
-
def initialize(exception)
|
256
|
-
@exception = exception
|
257
|
-
end
|
258
|
-
def type
|
259
|
-
@exception.failureType().toInt()
|
260
|
-
end
|
261
|
-
end
|
262
|
-
|
263
|
-
# Copied from mod-lang-jython
|
264
|
-
class AsyncInternalHandler
|
265
|
-
include org.vertx.java.core.AsyncResultHandler
|
266
|
-
def initialize(hndlr)
|
267
|
-
@hndlr = hndlr
|
268
|
-
end
|
269
|
-
def handle(result)
|
270
|
-
if result.failed?
|
271
|
-
@hndlr.call(ReplyError.new(result.cause))
|
272
|
-
else
|
273
|
-
@hndlr.call(Message.new(result.result))
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
data/lib/core/file_system.rb
DELETED
@@ -1,479 +0,0 @@
|
|
1
|
-
# Copyright 2011 the original author or authors.
|
2
|
-
#
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
# you may not use this file except in compliance with the License.
|
5
|
-
# You may obtain a copy of the License at
|
6
|
-
#
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
#
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
# See the License for the specific language governing permissions and
|
13
|
-
# limitations under the License.
|
14
|
-
|
15
|
-
require 'core/streams'
|
16
|
-
require 'core/wrapped_handler.rb'
|
17
|
-
|
18
|
-
module Vertx
|
19
|
-
|
20
|
-
# Represents the properties of a file on the file system
|
21
|
-
# @author {http://tfox.org Tim Fox}
|
22
|
-
class FileProps
|
23
|
-
|
24
|
-
# @private
|
25
|
-
def initialize(j_props)
|
26
|
-
@j_props = j_props
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [Time] The creation time of the file.
|
30
|
-
def creation_time
|
31
|
-
Time.at(@j_props.creationTime.getTime() / 1000)
|
32
|
-
end
|
33
|
-
|
34
|
-
# @return [Time] The last access time of the file.
|
35
|
-
def last_access_time
|
36
|
-
Time.at(@j_props.lastAccessTime.getTime() / 1000)
|
37
|
-
end
|
38
|
-
|
39
|
-
# @return [Time] The last modified time of the file.
|
40
|
-
def last_modified_time
|
41
|
-
Time.at(@j_props.lastModifiedTime.getTime() / 1000)
|
42
|
-
end
|
43
|
-
|
44
|
-
# @return [Boolean] Is the file a directory?
|
45
|
-
def directory?
|
46
|
-
@j_props.isDirectory
|
47
|
-
end
|
48
|
-
|
49
|
-
# @return [Boolean] Is the file some other file type?
|
50
|
-
def other?
|
51
|
-
@j_props.isOther
|
52
|
-
end
|
53
|
-
|
54
|
-
# @return [Boolean] Is it a regular file?
|
55
|
-
def regular_file?
|
56
|
-
@j_props.isRegularFile
|
57
|
-
end
|
58
|
-
|
59
|
-
# @return [Boolean] Is it a symbolic link?
|
60
|
-
def symbolic_link?
|
61
|
-
@j_props.isSymbolicLink
|
62
|
-
end
|
63
|
-
|
64
|
-
# @return [FixNum] The size of the file, in bytes.
|
65
|
-
def size
|
66
|
-
@j_props.size
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
# Represents the properties of a file system
|
72
|
-
# @author {http://tfox.org Tim Fox}
|
73
|
-
class FSProps
|
74
|
-
|
75
|
-
# @private
|
76
|
-
def initialize(j_props)
|
77
|
-
@j_props = j_props
|
78
|
-
end
|
79
|
-
|
80
|
-
# @return [FixNum] The total space on the file system, in bytes.
|
81
|
-
def total_space
|
82
|
-
@j_props.totalSpace
|
83
|
-
end
|
84
|
-
|
85
|
-
# @return [FixNum] Unallocated space on the file system, in bytes.
|
86
|
-
def unallocated_space
|
87
|
-
@j_props.unallocatedSpace
|
88
|
-
end
|
89
|
-
|
90
|
-
# @return [FixNum] Usable space on the file system, in bytes.
|
91
|
-
def usable_space
|
92
|
-
@j_props.usableSpace
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
# Represents a file on the file-system which can be read from, or written to asynchronously.
|
98
|
-
# The class also includes {ReadStream} and {WriteStream} - this allows the data to be pumped to and from
|
99
|
-
# other streams, e.g. an {HttpClientRequest} instance, using the {Pump} class
|
100
|
-
# @author {http://tfox.org Tim Fox}
|
101
|
-
class AsyncFile
|
102
|
-
|
103
|
-
include ReadStream, WriteStream
|
104
|
-
|
105
|
-
# @private
|
106
|
-
def initialize(j_file)
|
107
|
-
@j_del = j_file
|
108
|
-
end
|
109
|
-
|
110
|
-
# Close the file, asynchronously.
|
111
|
-
def close(&block)
|
112
|
-
@j_del.close(ARWrappedHandler.new(block))
|
113
|
-
end
|
114
|
-
|
115
|
-
# Write a {Buffer} to the file, asynchronously.
|
116
|
-
# When multiple writes are invoked on the same file
|
117
|
-
# there are no guarantees as to order in which those writes actually occur.
|
118
|
-
# @param [Buffer] buffer The buffer to write
|
119
|
-
# @param [FixNum] position The position in the file where to write the buffer. Position is measured in bytes and
|
120
|
-
# starts with zero at the beginning of the file.
|
121
|
-
def write_at_pos(buffer, position, &block)
|
122
|
-
@j_del.write(buffer._to_java_buffer, position, ARWrappedHandler.new(block))
|
123
|
-
self
|
124
|
-
end
|
125
|
-
|
126
|
-
# Reads some data from a file into a buffer, asynchronously.
|
127
|
-
# When multiple reads are invoked on the same file
|
128
|
-
# there are no guarantees as to order in which those reads actually occur.
|
129
|
-
# @param [Buffer] buffer The buffer into which the data which is read is written.
|
130
|
-
# @param [FixNum] offset The position in the buffer where to start writing the data.
|
131
|
-
# @param [FixNum] position The position in the file where to read the data.
|
132
|
-
# @param [FixNum] length The number of bytes to read.
|
133
|
-
def read_at_pos(buffer, offset, position, length, &block)
|
134
|
-
@j_del.read(buffer._to_java_buffer, offset, position, length, ARWrappedHandler.new(block) { |j_buff| Buffer.new(j_buff) })
|
135
|
-
self
|
136
|
-
end
|
137
|
-
|
138
|
-
# Flush any writes made to this file to underlying persistent storage, asynchronously.
|
139
|
-
# If the file was opened with flush set to true then calling this method will have no effect.
|
140
|
-
# @param [Block] hndlr a block representing the handler which is called on completion.
|
141
|
-
def flush
|
142
|
-
Future.new(@j_del.flush)
|
143
|
-
self
|
144
|
-
end
|
145
|
-
|
146
|
-
end
|
147
|
-
|
148
|
-
|
149
|
-
# Represents the file-system and contains a broad set of operations for manipulating files.
|
150
|
-
# An asynchronous and a synchronous version of each operation is provided.
|
151
|
-
# The asynchronous versions take a handler as a final argument which is
|
152
|
-
# called when the operation completes or an error occurs. The handler is called
|
153
|
-
# with two arguments; the first an exception, this will be nil if the operation has
|
154
|
-
# succeeded. The second is the result - this will be nil if the operation failed or
|
155
|
-
# there was no result to return.
|
156
|
-
# The synchronous versions return the results, or throw exceptions directly.
|
157
|
-
# @author {http://tfox.org Tim Fox}
|
158
|
-
class FileSystem
|
159
|
-
|
160
|
-
@@j_fs = org.vertx.java.platform.impl.JRubyVerticleFactory.vertx.fileSystem()
|
161
|
-
|
162
|
-
# Copy a file, asynchronously. The copy will fail if from does not exist, or if to already exists.
|
163
|
-
# @param [String] from Path of file to copy
|
164
|
-
# @param [String] to Path of file to copy to
|
165
|
-
# @param [Block] hndlr a block representing the handler which is called on completion.
|
166
|
-
def FileSystem.copy(from, to, &block)
|
167
|
-
@@j_fs.copy(from, to, ARWrappedHandler.new(block))
|
168
|
-
self
|
169
|
-
end
|
170
|
-
|
171
|
-
# Synchronous version of {#FileSystem.copy}
|
172
|
-
def FileSystem.copy_sync(from, to)
|
173
|
-
@@j_fs.copySync(from, to)
|
174
|
-
self
|
175
|
-
end
|
176
|
-
|
177
|
-
# Copy a file recursively, asynchronously. The copy will fail if from does not exist, or if to already exists and is not empty.
|
178
|
-
# If the source is a directory all contents of the directory will be copied recursively, i.e. the entire directory
|
179
|
-
# tree is copied.
|
180
|
-
# @param [String] from Path of file to copy
|
181
|
-
# @param [String] to Path of file to copy to
|
182
|
-
def FileSystem.copy_recursive(from, to, &block)
|
183
|
-
@@j_fs.copy(from, to, true, ARWrappedHandler.new(block))
|
184
|
-
self
|
185
|
-
end
|
186
|
-
|
187
|
-
# Synchronous version of {#FileSystem.copy_recursive}
|
188
|
-
def FileSystem.copy_recursive_sync(from, to)
|
189
|
-
@@j_fs.copySync(from, to, true)
|
190
|
-
self
|
191
|
-
end
|
192
|
-
|
193
|
-
# Move a file, asynchronously. The move will fail if from does not exist, or if to already exists.
|
194
|
-
# @param [String] from Path of file to move
|
195
|
-
# @param [String] to Path of file to move to
|
196
|
-
def FileSystem.move(from, to, &block)
|
197
|
-
@@j_fs.move(from, to, ARWrappedHandler.new(block))
|
198
|
-
self
|
199
|
-
end
|
200
|
-
|
201
|
-
# Synchronous version of {#FileSystem.move}
|
202
|
-
def FileSystem.move_sync(from, to)
|
203
|
-
@@j_fs.moveSync(from, to)
|
204
|
-
self
|
205
|
-
end
|
206
|
-
|
207
|
-
# Truncate a file, asynchronously. The move will fail if path does not exist.
|
208
|
-
# @param [String] path Path of file to truncate
|
209
|
-
# @param [FixNum] len Length to truncate file to. Will fail if len < 0. If len > file size then will do nothing.
|
210
|
-
def FileSystem.truncate(path, len, &block)
|
211
|
-
@@j_fs.truncate(path, len, ARWrappedHandler.new(block))
|
212
|
-
self
|
213
|
-
end
|
214
|
-
|
215
|
-
# Synchronous version of {#FileSystem.truncate}
|
216
|
-
def FileSystem.truncate_sync(path, len)
|
217
|
-
@@j_fs.truncateSync(path, len)
|
218
|
-
self
|
219
|
-
end
|
220
|
-
|
221
|
-
# Change the permissions on a file, asynchronously. If the file is directory then all contents will also have their permissions changed recursively.
|
222
|
-
# @param [String] path Path of file to change permissions
|
223
|
-
# @param [String] perms A permission string of the form rwxr-x--- as specified in
|
224
|
-
# {http://download.oracle.com/javase/7/docs/api/java/nio/file/attribute/PosixFilePermissions.html}. This is
|
225
|
-
# used to set the permissions for any regular files (not directories).
|
226
|
-
# @param [String] dir_perms A permission string of the form rwxr-x---. Used to set permissions for regular files.
|
227
|
-
def FileSystem.chmod(path, perms, dir_perms = nil, &block)
|
228
|
-
@@j_fs.chmod(path, perms, dir_perms, ARWrappedHandler.new(block))
|
229
|
-
self
|
230
|
-
end
|
231
|
-
|
232
|
-
|
233
|
-
# Synchronous version of {#FileSystem.chmod}
|
234
|
-
def FileSystem.chmod_sync(path, perms, dir_perms = nil)
|
235
|
-
@@j_fs.chmodSync(path, perms, dir_perms)
|
236
|
-
self
|
237
|
-
end
|
238
|
-
|
239
|
-
# Change the ownership of a file, asynchronously.
|
240
|
-
# @param [String] path Path of the file
|
241
|
-
# @param [String] user the user to set the ownership to
|
242
|
-
# @param [String] group the group to set the ownership to
|
243
|
-
def FileSystem.chown(path, user, group, &block)
|
244
|
-
@@j_fs.chown(path, user, group, ARWrappedHandler.new(block))
|
245
|
-
self
|
246
|
-
end
|
247
|
-
|
248
|
-
# Synchronous version of {#FileSystem.chown}
|
249
|
-
def FileSystem.chown_sync(path, user, group)
|
250
|
-
@@j_fs.chownSync(path, user, group)
|
251
|
-
self
|
252
|
-
end
|
253
|
-
|
254
|
-
# Get file properties for a file, asynchronously.
|
255
|
-
# @param [String] path Path to file
|
256
|
-
def FileSystem.props(path, &block)
|
257
|
-
@@j_fs.props(path, ARWrappedHandler.new(block) { |j_props| FileProps.new(j_props) })
|
258
|
-
self
|
259
|
-
end
|
260
|
-
|
261
|
-
# Synchronous version of {#FileSystem.props}
|
262
|
-
def FileSystem.props_sync(path)
|
263
|
-
j_props = @@j_fs.propsSync(path)
|
264
|
-
FileProps.new(j_props)
|
265
|
-
end
|
266
|
-
|
267
|
-
# Create a hard link, asynchronously..
|
268
|
-
# @param [String] link Path of the link to create.
|
269
|
-
# @param [String] existing Path of where the link points to.
|
270
|
-
def FileSystem.link(link, existing, &block)
|
271
|
-
@@j_fs.link(link, existing, ARWrappedHandler.new(block))
|
272
|
-
self
|
273
|
-
end
|
274
|
-
|
275
|
-
# Synchronous version of {#FileSystem.link}
|
276
|
-
def FileSystem.link_sync(link, existing)
|
277
|
-
@@j_fs.linkSync(link, existing)
|
278
|
-
self
|
279
|
-
end
|
280
|
-
|
281
|
-
# Create a symbolic link, asynchronously.
|
282
|
-
# @param [String] link Path of the link to create.
|
283
|
-
# @param [String] existing Path of where the link points to.
|
284
|
-
def FileSystem.symlink(link, existing, &block)
|
285
|
-
@@j_fs.symlink(link, existing, ARWrappedHandler.new(block))
|
286
|
-
self
|
287
|
-
end
|
288
|
-
|
289
|
-
# Synchronous version of {#FileSystem.symlink}
|
290
|
-
def FileSystem.symlink_sync(link, existing)
|
291
|
-
@@j_fs.symlinkSync(link, existing)
|
292
|
-
self
|
293
|
-
end
|
294
|
-
|
295
|
-
# Unlink a hard link.
|
296
|
-
# @param [String] link Path of the link to unlink.
|
297
|
-
def FileSystem.unlink(link, &block)
|
298
|
-
@@j_fs.unlink(link, ARWrappedHandler.new(block))
|
299
|
-
self
|
300
|
-
end
|
301
|
-
|
302
|
-
# Synchronous version of {#FileSystem.unlink}
|
303
|
-
def FileSystem.unlinkSync(link)
|
304
|
-
@@j_fs.unlinkSync(link)
|
305
|
-
self
|
306
|
-
end
|
307
|
-
|
308
|
-
# Read a symbolic link, asynchronously. I.e. tells you where the symbolic link points.
|
309
|
-
# @param [String] link Path of the link to read.
|
310
|
-
def FileSystem.read_symlink(link, &block)
|
311
|
-
@@j_fs.readSymlink(link, ARWrappedHandler.new(block))
|
312
|
-
self
|
313
|
-
end
|
314
|
-
|
315
|
-
# Synchronous version of {#FileSystem.read_symlink}
|
316
|
-
def FileSystem.read_symlink_sync(link)
|
317
|
-
@@j_fs.readSymlinkSync(link)
|
318
|
-
end
|
319
|
-
|
320
|
-
# Delete a file on the file system, asynchronously.
|
321
|
-
# The delete will fail if the file does not exist, or is a directory and is not empty.
|
322
|
-
# @param [String] path Path of the file to delete.
|
323
|
-
def FileSystem.delete(path, &block)
|
324
|
-
@@j_fs.delete(path, ARWrappedHandler.new(block))
|
325
|
-
self
|
326
|
-
end
|
327
|
-
|
328
|
-
# Synchronous version of {#FileSystem.delete}
|
329
|
-
def FileSystem.delete_sync(path)
|
330
|
-
@@j_fs.deleteSync(path)
|
331
|
-
self
|
332
|
-
end
|
333
|
-
|
334
|
-
# Delete a file on the file system recursively, asynchronously.
|
335
|
-
# The delete will fail if the file does not exist. If the file is a directory the entire directory contents
|
336
|
-
# will be deleted recursively.
|
337
|
-
# @param [String] path Path of the file to delete.
|
338
|
-
def FileSystem.delete_recursive(path, &block)
|
339
|
-
@@j_fs.delete(path, true, ARWrappedHandler.new(block))
|
340
|
-
self
|
341
|
-
end
|
342
|
-
|
343
|
-
# Synchronous version of {#FileSystem.delete_recursive}
|
344
|
-
def FileSystem.delete_recursive_sync(path)
|
345
|
-
@@j_fs.deleteSync(path, true)
|
346
|
-
self
|
347
|
-
end
|
348
|
-
|
349
|
-
# Create a directory, asynchronously.
|
350
|
-
# The create will fail if the directory already exists, or if it contains parent directories which do not already
|
351
|
-
# exist.
|
352
|
-
# @param [String] path Path of the directory to create.
|
353
|
-
# @param [String] perms. A permission string of the form rwxr-x--- to give directory.
|
354
|
-
def FileSystem.mkdir(path, perms = nil, &block)
|
355
|
-
@@j_fs.mkdir(path, perms, ARWrappedHandler.new(block))
|
356
|
-
self
|
357
|
-
end
|
358
|
-
|
359
|
-
# Synchronous version of {#FileSystem.mkdir}
|
360
|
-
def FileSystem.mkdir_sync(path, perms = nil)
|
361
|
-
@@j_fs.mkdirSync(path, perms)
|
362
|
-
self
|
363
|
-
end
|
364
|
-
|
365
|
-
# Create a directory, and create all it's parent directories if they do not already exist, asynchronously.
|
366
|
-
# The create will fail if the directory already exists.
|
367
|
-
# @param [String] path Path of the directory to create.
|
368
|
-
# @param [String] perms. A permission string of the form rwxr-x--- to give the created directory(ies).
|
369
|
-
def FileSystem.mkdir_with_parents(path, perms = nil, &block)
|
370
|
-
@@j_fs.mkdir(path, perms, true, ARWrappedHandler.new(block))
|
371
|
-
self
|
372
|
-
end
|
373
|
-
|
374
|
-
# Synchronous version of {#FileSystem.mkdir_with_parents}
|
375
|
-
def FileSystem.mkdir_with_parents_sync(path, perms = nil)
|
376
|
-
@@j_fs.mkdirSync(path, perms, true)
|
377
|
-
self
|
378
|
-
end
|
379
|
-
|
380
|
-
# Read a directory, i.e. list it's contents, asynchronously.
|
381
|
-
# The read will fail if the directory does not exist.
|
382
|
-
# @param [String] path Path of the directory to read.
|
383
|
-
# @param [String] filter A regular expression to filter out the contents of the directory. If the filter is not nil
|
384
|
-
# then only files which match the filter will be returned.
|
385
|
-
def FileSystem.read_dir(path, filter = nil, &block)
|
386
|
-
@@j_fs.readDir(path, filter, ARWrappedHandler.new(block))
|
387
|
-
self
|
388
|
-
end
|
389
|
-
|
390
|
-
# Synchronous version of {#FileSystem.read_dir}
|
391
|
-
def FileSystem.read_dir_sync(path, filter = nil)
|
392
|
-
@@j_fs.readDirSync(path, filter)
|
393
|
-
end
|
394
|
-
|
395
|
-
# Read the contents of an entire file as a {Buffer}, asynchronously.
|
396
|
-
# @param [String] path Path of the file to read.
|
397
|
-
def FileSystem.read_file_as_buffer(path, &block)
|
398
|
-
@@j_fs.readFile(path, ARWrappedHandler.new(block) { |j_buff| Buffer.new(j_buff)})
|
399
|
-
self
|
400
|
-
end
|
401
|
-
|
402
|
-
# Synchronous version of {#FileSystem.read_file_as_buffer}
|
403
|
-
def FileSystem.read_file_as_buffer_sync(path)
|
404
|
-
@@j_fs.readFileSync(path)
|
405
|
-
end
|
406
|
-
|
407
|
-
# Write a [Buffer] as the entire contents of a file, asynchronously.
|
408
|
-
# @param [String] path Path of the file to write.
|
409
|
-
# @param [String] buffer The Buffer to write
|
410
|
-
def FileSystem.write_buffer_to_file(path, buffer, &block)
|
411
|
-
@@j_fs.writeFile(path, buffer, ARWrappedHandler.new(block))
|
412
|
-
self
|
413
|
-
end
|
414
|
-
|
415
|
-
# Synchronous version of {#FileSystem.write_buffer_to_file}
|
416
|
-
def FileSystem.write_buffer_to_file_sync(path, buffer)
|
417
|
-
@@j_fs.writeFileSync(path, buffer)
|
418
|
-
self
|
419
|
-
end
|
420
|
-
|
421
|
-
# Open a file on the file system, asynchronously.
|
422
|
-
# @param [String] path Path of the file to open.
|
423
|
-
# @param [String] perms If the file does not exist and create_new is true, then the file will be created with these permissions.
|
424
|
-
# @param [Boolean] read Open the file for reading?
|
425
|
-
# @param [Boolean] write Open the file for writing?
|
426
|
-
# @param [Boolean] create_new Create the file if it doesn't already exist?
|
427
|
-
# @param [Boolean] flush Whenever any data is written to the file, flush all changes to permanent storage immediately?
|
428
|
-
def FileSystem.open(path, perms = nil, read = true, write = true, create_new = true, flush = false, &block)
|
429
|
-
@@j_fs.open(path, perms, read, write, create_new, flush, ARWrappedHandler.new(block){ |j_file| AsyncFile.new(j_file)})
|
430
|
-
self
|
431
|
-
end
|
432
|
-
|
433
|
-
# Synchronous version of {#FileSystem.open}
|
434
|
-
def FileSystem.open_sync(path, perms = nil, read = true, write = true, create_new = true, flush = false)
|
435
|
-
j_af = @@j_fs.open(path, perms, read, write, create_new, flush)
|
436
|
-
AsyncFile.new(j_af)
|
437
|
-
end
|
438
|
-
|
439
|
-
# Create a new empty file, asynchronously.
|
440
|
-
# @param [String] path Path of the file to create.
|
441
|
-
# @param [String] perms The file will be created with these permissions.
|
442
|
-
def FileSystem.create_file(path, perms = nil, &block)
|
443
|
-
@@j_fs.createFile(path, perms, ARWrappedHandler.new(block))
|
444
|
-
self
|
445
|
-
end
|
446
|
-
|
447
|
-
# Synchronous version of {#FileSystem.create_file}
|
448
|
-
def FileSystem.create_file_sync(path, perms = nil)
|
449
|
-
@@j_fs.createFileSync(path, perms)
|
450
|
-
self
|
451
|
-
end
|
452
|
-
|
453
|
-
# Check if a file exists, asynchronously.
|
454
|
-
# @param [String] path Path of the file to check.
|
455
|
-
def FileSystem.exists?(path, &block)
|
456
|
-
@@j_fs.exists(path, ARWrappedHandler.new(block))
|
457
|
-
self
|
458
|
-
end
|
459
|
-
|
460
|
-
# Synchronous version of {#FileSystem.exists?}
|
461
|
-
def FileSystem.exists_sync?(path)
|
462
|
-
@@j_fs.existsSync(path)
|
463
|
-
end
|
464
|
-
|
465
|
-
# Get properties for the file system, asynchronously.
|
466
|
-
# @param [String] path Path in the file system.
|
467
|
-
def FileSystem.fs_props(path, &block)
|
468
|
-
@@j_fs.fsProps(path, ARWrappedHandler.new(block) { |j_props| FSProps.new(j_props)})
|
469
|
-
self
|
470
|
-
end
|
471
|
-
|
472
|
-
# Synchronous version of {#FileSystem.fs_props}
|
473
|
-
def FileSystem.fs_props_sync(path)
|
474
|
-
j_fsprops = @@j_fs.fsPropsSync(path)
|
475
|
-
FSProps.new(j_fsprops)
|
476
|
-
end
|
477
|
-
|
478
|
-
end
|
479
|
-
end
|