em-midori 0.1.9 → 0.1.10
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 +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
|