em-midori 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/midori.rb +0 -1
- data/lib/midori/core_ext/promise.rb +1 -3
- data/lib/midori/extension/file.rb +40 -0
- data/lib/midori/extension/hiredis.rb +47 -0
- data/lib/midori/extension/sequel/postgres.rb +33 -0
- data/lib/midori/version.rb +1 -1
- metadata +5 -4
- data/lib/midori/core_ext/promise_exception.rb +0 -13
- data/lib/midori/extension/.gitkeep +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d8f1764aac74f15dee72578e5dcc216e5afe34be
|
4
|
+
data.tar.gz: 82d47b7a7b1a1eb822bd8ee3eba631d8527dcfb1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b27d592dbb83a83fd75e83825ecb24d8aed3548a641df1a97b4d659b461600c6db19cc421bb12bd1c3c19f250bd1fcb6012c2046838941a569f5d474313b73bb
|
7
|
+
data.tar.gz: b32db3e3fc35dff0f2f4669c435fbfe03bb46a6f2fee5e8e74f587b8c50dca7f0f20a1fdeb2eb97f68a5364010008379d7434f13487711212f950b6828c4612e
|
data/lib/midori.rb
CHANGED
@@ -11,7 +11,6 @@ require_relative 'midori/core_ext/configurable'
|
|
11
11
|
require_relative 'midori/core_ext/string'
|
12
12
|
require_relative 'midori/core_ext/event_loop'
|
13
13
|
require_relative 'midori/core_ext/promise'
|
14
|
-
require_relative 'midori/core_ext/promise_exception'
|
15
14
|
require_relative 'midori/core_ext/define_class'
|
16
15
|
require_relative 'midori/core_ext/proc'
|
17
16
|
require_relative 'midori/core_ext/safe_require'
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Midori::File
|
2
|
+
def initialize(*args)
|
3
|
+
@file = File.new(*args)
|
4
|
+
end
|
5
|
+
|
6
|
+
def read
|
7
|
+
await(Promise.new do |resolve|
|
8
|
+
data = ''
|
9
|
+
EventLoop.register(@file, :r) do
|
10
|
+
if @file.eof?
|
11
|
+
EventLoop.unregister(@file)
|
12
|
+
resolve.call(data)
|
13
|
+
else
|
14
|
+
data << @file.read_nonblock(16384)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end)
|
18
|
+
end
|
19
|
+
|
20
|
+
def write(data)
|
21
|
+
await(Promise.new do |resolve|
|
22
|
+
written = 0
|
23
|
+
EventLoop.register(@file, :w) do
|
24
|
+
written += @file.write_nonblock(data[written..-1])
|
25
|
+
if written == data.size
|
26
|
+
EventLoop.unregister(@file)
|
27
|
+
resolve.call(written)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end)
|
31
|
+
end
|
32
|
+
|
33
|
+
def raw
|
34
|
+
@file
|
35
|
+
end
|
36
|
+
|
37
|
+
def close
|
38
|
+
@file.close
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Hiredis
|
2
|
+
require 'hiredis/connection'
|
3
|
+
# Overwrite with ruby implementation to hook IO
|
4
|
+
require 'hiredis/ruby/connection'
|
5
|
+
require 'hiredis/ruby/reader'
|
6
|
+
Connection = Ruby::Connection
|
7
|
+
Reader = Ruby::Reader
|
8
|
+
end
|
9
|
+
|
10
|
+
module Hiredis
|
11
|
+
module Ruby
|
12
|
+
class Connection
|
13
|
+
def _write(_sock, data, _timeout)
|
14
|
+
await(Promise.new do |resolve|
|
15
|
+
data.force_encoding('binary') if data.respond_to?(:force_encoding)
|
16
|
+
written = 0
|
17
|
+
EventLoop.register(@sock, :w) do
|
18
|
+
written += @sock.write_nonblock(data[written..-1])
|
19
|
+
if written == string_size(data)
|
20
|
+
EventLoop.unregister(@sock)
|
21
|
+
resolve.call
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end)
|
25
|
+
end
|
26
|
+
|
27
|
+
def read
|
28
|
+
raise 'not connected' unless connected?
|
29
|
+
await(Promise.new do |resolve|
|
30
|
+
EventLoop.register(@sock, :r) do
|
31
|
+
@reader.feed @sock.read_nonblock(1024)
|
32
|
+
reply = @reader.gets
|
33
|
+
if reply
|
34
|
+
EventLoop.unregister(@sock)
|
35
|
+
resolve.call(reply)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end)
|
39
|
+
rescue ::EOFError
|
40
|
+
# :nocov:
|
41
|
+
# Error Handler Copied from HiRedis driver itself
|
42
|
+
raise Errno::ECONNRESET
|
43
|
+
# :nocov:
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
safe_require 'sequel', 'gem install sequel'
|
2
|
+
require 'sequel/adapters/postgres'
|
3
|
+
|
4
|
+
##
|
5
|
+
# Midori Extension of sequel postgres through meta programming
|
6
|
+
class Sequel::Postgres::Adapter
|
7
|
+
# Call a sql request asynchronously
|
8
|
+
# @param [String] sql sql request
|
9
|
+
# @param [Array] args args to send
|
10
|
+
# @return [Array] sql query result
|
11
|
+
def execute_query(sql, args)
|
12
|
+
@db.log_connection_yield(sql, self, args) do
|
13
|
+
socket_object = IO.for_fd(socket)
|
14
|
+
await(Promise.new do |resolve|
|
15
|
+
EventLoop.register(socket_object, :w) do
|
16
|
+
EventLoop.unregister(socket_object)
|
17
|
+
until is_busy
|
18
|
+
send_query(sql)
|
19
|
+
resolve.call
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end)
|
23
|
+
|
24
|
+
await(Promise.new do |resolve|
|
25
|
+
consume_input
|
26
|
+
EventLoop.register(socket_object, :r) do
|
27
|
+
EventLoop.unregister(socket_object)
|
28
|
+
resolve.call(get_result)
|
29
|
+
end
|
30
|
+
end)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/midori/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-midori
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HeckPsi Lab
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-02-
|
11
|
+
date: 2017-02-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nio4r
|
@@ -72,12 +72,13 @@ files:
|
|
72
72
|
- lib/midori/core_ext/event_loop.rb
|
73
73
|
- lib/midori/core_ext/proc.rb
|
74
74
|
- lib/midori/core_ext/promise.rb
|
75
|
-
- lib/midori/core_ext/promise_exception.rb
|
76
75
|
- lib/midori/core_ext/safe_require.rb
|
77
76
|
- lib/midori/core_ext/string.rb
|
78
77
|
- lib/midori/eventsource.rb
|
79
78
|
- lib/midori/exception.rb
|
80
|
-
- lib/midori/extension
|
79
|
+
- lib/midori/extension/file.rb
|
80
|
+
- lib/midori/extension/hiredis.rb
|
81
|
+
- lib/midori/extension/sequel/postgres.rb
|
81
82
|
- lib/midori/middleware.rb
|
82
83
|
- lib/midori/request.rb
|
83
84
|
- lib/midori/response.rb
|
@@ -1,13 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# A special error as containers of errors inside [Promise]
|
3
|
-
# @attr [StandardError] raw_exception raw exception raised
|
4
|
-
class PromiseException < StandardError
|
5
|
-
attr_reader :raw_exception
|
6
|
-
|
7
|
-
# Init PromiseException
|
8
|
-
# @param [StandardError] raw_exception raw exception raised
|
9
|
-
def initialize(raw_exception)
|
10
|
-
super(nil)
|
11
|
-
@raw_exception = raw_exception
|
12
|
-
end
|
13
|
-
end
|
File without changes
|