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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 44777e7d5978bba6e8fd91c8cc640ef40270a7f3
4
- data.tar.gz: dd69a2679cf440bc4ea7a29f52b6e0652d917b7c
3
+ metadata.gz: d8f1764aac74f15dee72578e5dcc216e5afe34be
4
+ data.tar.gz: 82d47b7a7b1a1eb822bd8ee3eba631d8527dcfb1
5
5
  SHA512:
6
- metadata.gz: f9716b1feb7f5f7609eae2c662bff23b1bc4900024f02124faf4b4200803a9e91dec19f851d2a68a5504c0ae4bb2a731aa0fd35c88401b0fa59adebb8597e73e
7
- data.tar.gz: ddbb5d354658e519d9a8c4c29b134e24e28e1fa2e0ff2d2b35878f08fc9047b7510fade34e331699b827115359869e65acf6e5569d2010ee75a0a7d21ee840c7
6
+ metadata.gz: b27d592dbb83a83fd75e83825ecb24d8aed3548a641df1a97b4d659b461600c6db19cc421bb12bd1c3c19f250bd1fcb6012c2046838941a569f5d474313b73bb
7
+ data.tar.gz: b32db3e3fc35dff0f2f4669c435fbfe03bb46a6f2fee5e8e74f587b8c50dca7f0f20a1fdeb2eb97f68a5364010008379d7434f13487711212f950b6828c4612e
@@ -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'
@@ -45,8 +45,6 @@ module Kernel
45
45
  # @example
46
46
  # result = await SQL.query('SELECT * FROM hello')
47
47
  def await(promise)
48
- result = Fiber.yield promise
49
- raise result.raw_exception if result.is_a?PromiseException
50
- result
48
+ Fiber.yield promise
51
49
  end
52
50
  end
@@ -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
@@ -1,5 +1,5 @@
1
1
  # Midori Module
2
2
  module Midori
3
3
  # Current Version Code
4
- VERSION = '0.1.9'.freeze
4
+ VERSION = '0.1.10'.freeze
5
5
  end
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.9
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-18 00:00:00.000000000 Z
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/.gitkeep
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