em-midori 0.1.6.1 → 0.1.7

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: c9711cdf1917e423b09aaaa2d9aa793b3c81d2ea
4
- data.tar.gz: e4a6120b6433adc0ec32d8f27bed05fc87985b52
3
+ metadata.gz: 4b8f1d0f52bac821c37368d97470d9babb3a5666
4
+ data.tar.gz: 50c9efd29749da9a5f12eaf3b769169b754d7024
5
5
  SHA512:
6
- metadata.gz: 3118eb4484e68d3f01bcf9f3237c6e4f630e0cb55361bd06a4758ff03440fd1142fc5bc9471adfafb8a641ea97f2a4f583d119fb995d105366036519eb1295cd
7
- data.tar.gz: e5af8ebdffd3d14733ab8c6d82b73458c073b7ad31f9dec7485c2cedd7c5e374b946d0ea2cccb3dc82847a193a9a68cbcb939e5903f16c1a0210b98b2d12376c
6
+ metadata.gz: 539fd19c14ec8a1bfbde7f4c2f8d01c41f29db187377ec8e7c0b56ab60aec097d4957067c43fb1525ed8b55c85da5315e20f73be02ba69903cf3b4c49d91ab44
7
+ data.tar.gz: 112bb41011fc2bf23aaf83ec10f92433f7b9bc29b7fd2b57b877dd4fad0cbf414cc1cde2717edde005403ec8c3924a96a96ee315031d720055b2687a482b9cd2
data/lib/midori/api.rb CHANGED
@@ -2,7 +2,14 @@
2
2
  # This class provides methods to be inherited as route definition.
3
3
  class Midori::API
4
4
  class << self
5
+ # @!attribute routes
6
+ # @return [Hash] merged routes defined in the instance
7
+ # @!attribute scope_middlewares
8
+ # @return [Array] global middlewares under the scope
5
9
  attr_accessor :routes, :scope_middlewares
10
+
11
+ # Init private variables of class
12
+ # @return [ nil ] nil
6
13
  def class_initialize
7
14
  @routes = {
8
15
  GET: [],
@@ -18,6 +25,7 @@ class Midori::API
18
25
  }
19
26
  @scope_middlewares = []
20
27
  @temp_middlewares = []
28
+ nil
21
29
  end
22
30
 
23
31
  # Add GET method as a DSL for route definition
@@ -109,16 +117,26 @@ class Midori::API
109
117
  def eventsource(path, &block) end
110
118
 
111
119
  # Mount a route prefix with another API defined
112
- # @param [String] prefix prefix of the route String
113
- # @param [Class] api inherited from Midori::API
114
- # @return [nil] nil
120
+ # @param [ String ] prefix prefix of the route String
121
+ # @param [ Class ] api inherited from Midori::API
122
+ # @return [ nil ] nil
115
123
  def mount(prefix, api)
116
124
  raise ArgumentError if prefix == '/' # Cannot mount route API
117
125
  @routes[:MOUNT] << [prefix, api]
126
+ nil
118
127
  end
119
128
 
129
+ # Definitions for global error handler
130
+ # @param [ Class ] error Error class, must be inherited form StandardError
131
+ # @yield what to do to deal with error
132
+ # @yieldparam [ StandardError ] e the detailed error
133
+ # @example Basic Usage
134
+ # capture Midori::InternalError do |e|
135
+ # Midori::Response(500, {}, e.backtrace)
136
+ # end
120
137
  def capture(error, &block)
121
138
  Midori::Sandbox.add_rule(error, block)
139
+ nil
122
140
  end
123
141
 
124
142
  # Implementation of route DSL
@@ -149,6 +167,9 @@ class Midori::API
149
167
  nil
150
168
  end
151
169
 
170
+ # Use a middleware in the next route
171
+ # @param [Class] middleware Inherited from +Midori::Middleware+
172
+ # @return [nil] nil
152
173
  def filter(middleware, *args)
153
174
  middleware = middleware.new(*args)
154
175
  @temp_middlewares << middleware
@@ -169,7 +190,7 @@ class Midori::API
169
190
  end
170
191
  end
171
192
 
172
- private_class_method :add_route
193
+ private_class_method :add_route, :inherited
173
194
 
174
195
  # Constants of supported methods in route definition
175
196
  METHODS = %w(get post put delete options link unlink websocket eventsource).freeze
@@ -1,5 +1,12 @@
1
+ ##
2
+ # Merge and manage all APIs.
3
+ # @attr [ Hash ] routes A hash of all routes merged
1
4
  class Midori::APIEngine
2
5
  attr_accessor :routes
6
+
7
+ # Init an API Engine
8
+ # @param [ Class ] root_api API inherited from [ Midori::API ]
9
+ # @param [ Symbol ] type type mustermann support
3
10
  def initialize(root_api, type = :sinatra)
4
11
  @routes = {
5
12
  GET: [],
@@ -23,8 +30,8 @@ class Midori::APIEngine
23
30
  end
24
31
  end
25
32
 
33
+ # Merge all routes with a Depth-first search
26
34
  def merge(prefix, root_api, middlewares)
27
- # Merge all routes with a Depth-first search
28
35
  root_api.routes[:MOUNT].each do |mount|
29
36
  root_api.routes.merge!(merge(mount[0], mount[1], root_api.scope_middlewares)) do |_key, old_val, new_val|
30
37
  old_val + new_val
@@ -81,4 +88,6 @@ class Midori::APIEngine
81
88
  header['Sec-WebSocket-Accept'] = Digest::SHA1.base64digest(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
82
89
  header
83
90
  end
91
+
92
+ private :merge
84
93
  end
@@ -6,6 +6,8 @@
6
6
  # @attr [Midori::Request] request HTTP request
7
7
  class Midori::CleanRoom
8
8
  attr_accessor :status, :header, :body, :request
9
+
10
+ # Init a Cleanroom for running
9
11
  # @param [Midori::Request] request HTTP request
10
12
  def initialize(request)
11
13
  @status = 200
@@ -1,8 +1,13 @@
1
+ ##
2
+ # Meta-programming Proc for Syntactic Sugars
1
3
  class Proc
2
- # @note Converting {Proc} to {Lambda} may have incorrect behaviours on corner cases.
4
+ # Convert [ Proc ] to [ Lambda ]
5
+ # @param [ Object ] instance the context
6
+ # @return [ Lambda ] Lambda converted
7
+ # @note Converting [Proc] to [Lambda] may have incorrect behaviours on corner cases.
3
8
  # @note See {Ruby Language Issues}[https://bugs.ruby-lang.org/issues/7314] for more details.
4
9
  def to_lambda (instance = Object.new)
5
10
  instance.define_singleton_method(:_, &self)
6
11
  instance.method(:_).to_proc
7
12
  end
8
- end
13
+ end
@@ -2,21 +2,25 @@
2
2
  # Meta-programming String for Syntactic Sugars
3
3
  # Referenced from {Qiita}[http://qiita.com/south37/items/99a60345b22ef395d424]
4
4
  class Promise
5
- # @param [Proc] callback an async method
5
+ # Init a Promise
6
+ # @param [ Proc ] callback an async method
6
7
  def initialize(callback)
7
8
  @callback = callback
8
9
  end
9
10
 
10
11
  # Define what to do after a method callbacks
11
- # @param [Proc] resolve what on callback
12
- # @param [Proc] reject what on callback failed
13
- # @return [nil] nil
12
+ # @param [ Proc ] resolve what on callback
13
+ # @param [ Proc ] reject what on callback failed
14
+ # @return [ nil ] nil
14
15
  def then(resolve = ->() {}, reject = ->() {})
15
16
  @callback.call(resolve, reject)
16
17
  end
17
18
  end
18
19
 
20
+ # A Syntactic Sugar for Promise
19
21
  class DeferPromise < Promise
22
+ # A Syntactic Sugar for Promise
23
+ # @param [ proc ] deffered To do what asynchronous
20
24
  def initialize(deffered)
21
25
  super(->(resolve, _reject){
22
26
  EventMachine.defer(proc {
@@ -32,7 +36,7 @@ end
32
36
 
33
37
  module Kernel
34
38
  # Logic dealing of async method
35
- # @param [Fiber] fiber a fiber to call
39
+ # @param [ Fiber ] fiber a fiber to call
36
40
  def async_internal(fiber)
37
41
  chain = lambda do |result|
38
42
  return unless result.is_a?Promise
@@ -44,7 +48,7 @@ module Kernel
44
48
  end
45
49
 
46
50
  # Define an async method
47
- # @param [Symbol] method_name method name
51
+ # @param [ Symbol ] method_name method name
48
52
  # @yield async method
49
53
  # @example
50
54
  # async :hello do
@@ -56,12 +60,15 @@ module Kernel
56
60
  }
57
61
  end
58
62
 
63
+ # Shortcut to init [ DeferPromise ]
64
+ # @yield To do what asynchronous
65
+ # @return [ DerferPromise ] instance
59
66
  def defer(&block)
60
67
  DeferPromise.new(block)
61
68
  end
62
69
 
63
70
  # Block the I/O to wait for async method response
64
- # @param [Promise] promise promise method
71
+ # @param [ Promise ] promise promise method
65
72
  # @example
66
73
  # result = await SQL.query('SELECT * FROM hello')
67
74
  def await(promise)
@@ -1,7 +1,13 @@
1
+ ##
2
+ # A special error as containers of errors inside [ Promise ]
3
+ # @attr [ StandardError ] raw_exception raw execption raised
1
4
  class PromiseException < StandardError
2
5
  attr_reader :raw_exception
6
+
7
+ # Init PromiseException
8
+ # @param [ StandardError ] raw_exception raw execption raised
3
9
  def initialize(raw_exception)
4
10
  super(nil)
5
11
  @raw_exception = raw_exception
6
12
  end
7
- end
13
+ end
@@ -1,4 +1,7 @@
1
1
  module Kernel
2
+ # Raise error if Load Failed
3
+ # @param [ String ] file file to Load
4
+ # @param [ String ] prompt To prompt what when load error
2
5
  def safe_require(file, prompt)
3
6
  begin
4
7
  require file
@@ -6,4 +9,4 @@ module Kernel
6
9
  raise prompt
7
10
  end
8
11
  end
9
- end
12
+ end
@@ -4,6 +4,7 @@
4
4
  class Midori::EventSource
5
5
  attr_accessor :connection
6
6
 
7
+ # Init a EventSource instance with a connection
7
8
  # @param [EM::Connection] connection the connection instance of EventMachine
8
9
  def initialize(connection)
9
10
  @connection = connection
@@ -1,9 +1,15 @@
1
+ ##
2
+ # Midori Extension of File reading and writing
1
3
  class Midori::File
2
4
  class << self
5
+ # Same APIs as File.read
6
+ # @param [ Array ] args args of File.read
3
7
  def read(*args)
4
8
  await(defer{File.read(*args)})
5
9
  end
6
10
 
11
+ # Same APIs as File.write
12
+ # @param [ Array ] args args of File.write
7
13
  def write(*args)
8
14
  await(defer{File.write(*args)})
9
15
  end
@@ -1,5 +1,10 @@
1
- safe_require 'redic', 'gem install redic'
1
+ safe_require 'ohm', 'gem install ohm'
2
+
3
+ ##
4
+ # Midori Extension of ohm through meta programming Redic
2
5
  class Redic
6
+ # Call a redis request asynchronously
7
+ # @param [ Array ] args args of Redic.call
3
8
  def call(*args)
4
9
  await(defer{
5
10
  @client.connect do
@@ -9,4 +14,3 @@ class Redic
9
14
  })
10
15
  end
11
16
  end
12
- safe_require 'ohm', 'gem install ohm'
@@ -1,13 +1,23 @@
1
1
  safe_require 'postgres-pr/message', 'gem install postgres-pr'
2
2
 
3
+ ##
4
+ # Midori Extension for Postgres Driver
5
+ # @attr [ Fixnum ] connected Connection Status
3
6
  class Midori::Postgres
4
7
  attr_reader :connected
5
8
 
9
+ # Init a Postgres Connection
10
+ # @param [ Array ] args args of EM.connect
6
11
  def initialize(*args)
7
12
  @connected = false
8
13
  @db = EM.connect(*args, EM::P::Postgres3)
9
14
  end
10
15
 
16
+ # Connect the Postgres server
17
+ # @param [ String ] db_name database name
18
+ # @param [ String ] username username
19
+ # @param [ password ] password password
20
+ # @return [ nil ] nil
11
21
  def connect(db_name, username, password)
12
22
  await(Promise.new(->(resolve, _reject) {
13
23
  @db.connect(db_name, username, password).callback do |status|
@@ -17,6 +27,9 @@ class Midori::Postgres
17
27
  }))
18
28
  end
19
29
 
30
+ # Make SQL query
31
+ # @param [ String ] sql sql query
32
+ # @return [ Midori::Postgres::Result ] query result
20
33
  def query(sql)
21
34
  await(Promise.new(->(resolve, _reject) {
22
35
  begin
@@ -29,8 +42,16 @@ class Midori::Postgres
29
42
  end
30
43
  end
31
44
 
45
+ ##
46
+ # Postgres Result for Midori Postgres Driver Extension
47
+ # @attr [ Array ] result result if success
48
+ # @attr [ Array ] errors exceptions met
32
49
  class Midori::Postgres::Result
33
50
  attr_reader :result, :errors
51
+
52
+ # Init a Postgres Result
53
+ # @param [ Array ] result result if success
54
+ # @param [ Array ] errors exceptions met
34
55
  def initialize(result, errors)
35
56
  @result = result
36
57
  @errors = errors
@@ -1,10 +1,19 @@
1
1
  safe_require 'em-hiredis', 'gem install em-hiredis'
2
+
3
+ ##
4
+ # Midori Extension for Redis Driver
2
5
  class Midori::Redis
6
+
7
+ # Init a Redis Connection
8
+ # @param [ Array ] args args EM::Hiredis.connect
3
9
  def initialize(*args)
4
10
  @connection = EM::Hiredis.connect(*args)
5
11
  @connection
6
12
  end
7
13
 
14
+ # Call a redis request asynchronously
15
+ # @param [ String ] sys method name
16
+ # @param [ Array ] args args of the method calling
8
17
  def method_missing(sys, *args)
9
18
  await(Promise.new(->(resolve, _reject) {
10
19
  @connection.send(sys, *args).callback do |*ret_args|
@@ -13,6 +22,8 @@ class Midori::Redis
13
22
  }))
14
23
  end
15
24
 
25
+ # Return raw pubsub mode
26
+ # @return [ EM::Hiredis::Pubsub ] raw pubsub
16
27
  def pubsub
17
28
  @connection.pubsub
18
29
  end
@@ -1,14 +1,16 @@
1
1
  safe_require 'sequel', 'gem install sequel'
2
2
  require 'sequel/adapters/postgres'
3
3
 
4
- module Sequel
5
- module Postgres
6
- class Adapter < ::PGconn
7
- def execute_query(sql, args)
8
- @db.log_connection_yield(sql, self, args) do
9
- args ? await(defer{async_exec(sql, args)}) : await(defer{async_exec(sql)})
10
- end
11
- end
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
+ args ? await(defer{async_exec(sql, args)}) : await(defer{async_exec(sql)})
12
14
  end
13
15
  end
14
- end
16
+ end
@@ -20,6 +20,9 @@ class Midori::Middleware
20
20
  response
21
21
  end
22
22
 
23
+ # Dynamically generate a method to use inside router
24
+ # @param [ Symbol ] name name of the method
25
+ # @yield the block to run
23
26
  def self.helper(name, &block)
24
27
  Midori::CleanRoom.class_exec do
25
28
  define_method(name, &block)
@@ -3,11 +3,13 @@
3
3
  # @attr [String] ip client ip address
4
4
  # @attr [Fixnum] port client port
5
5
  # @attr [String] protocol protocol version of HTTP request
6
+ # @attr [String] method HTTP method
6
7
  # @attr [String] path request path
7
8
  # @attr [String] query_string request query string
8
9
  # @attr [Hash] header request header
9
10
  # @attr [String] body request body
10
11
  # @attr [Boolean] parsed whether the request parsed
12
+ # @attr [Hash] params params in the url
11
13
  class Midori::Request
12
14
  attr_accessor :ip, :port,
13
15
  :protocol, :method, :path, :query_string,
@@ -29,7 +31,9 @@ class Midori::Request
29
31
  end
30
32
  end
31
33
 
32
- # Init an request with StringIO data
34
+ # Init an request with String data
35
+ # @param [ String ] data
36
+ # @return [ nil ] nil
33
37
  def parse(data)
34
38
 
35
39
  offset = @parser << data
@@ -1,14 +1,15 @@
1
1
  ##
2
2
  # Class for midori response
3
- # @attr [String] HTTP response status
4
- # @attr [Hash] HTTP response header
5
- # @attr [String] HTTP response body
3
+ # @attr [String] status HTTP response status
4
+ # @attr [Hash] header HTTP response header
5
+ # @attr [String] body HTTP response body
6
6
  class Midori::Response
7
7
  attr_accessor :status, :header, :body
8
8
 
9
9
  # @param [Fixnum] code HTTP response code
10
10
  # @param [Hash] header HTTP response header
11
11
  # @param [String] body HTTP response body
12
+ # Init a Response
12
13
  def initialize(code = 200, header = Midori::Const::DEFAULT_HEADER.clone, body = '')
13
14
  @status = Midori::Const::STATUS_CODE[code]
14
15
  @header = header
data/lib/midori/route.rb CHANGED
@@ -3,9 +3,11 @@
3
3
  # @attr [String] method HTTP method
4
4
  # @attr [Regexp] path regex to match
5
5
  # @attr [Proc] function what to do after matched
6
+ # @attr [Array<Class>] middlewares middlewares used in the route
6
7
  class Midori::Route
7
8
  attr_accessor :method, :path, :function, :middlewares
8
9
 
10
+ # Define a route
9
11
  # @param [String] method HTTP method
10
12
  # @param [Regexp] path regex to match
11
13
  # @param [Proc] function what to do after matched
data/lib/midori/runner.rb CHANGED
@@ -1,8 +1,13 @@
1
1
  ##
2
2
  # Abstract runner class to control instance of Midori Server
3
+ # @attr [ String ] bind the address to bind
4
+ # @attr [ Fixnum ] port the port to bind
3
5
  class Midori::Runner
4
6
  attr_reader :bind, :port
5
7
 
8
+ # Define status of a runner
9
+ # @param [ Class ] api inherited from [ Midori::API ]
10
+ # @param [ Class ] configure inherited from [ Midori::Configure ]
6
11
  def initialize(api, configure = Midori::Configure)
7
12
  @logger = configure.logger
8
13
  @bind = configure.bind
@@ -1,3 +1,5 @@
1
+ ##
2
+ # Sandbox for global error capture
1
3
  class Midori::Sandbox
2
4
  class << self
3
5
  def class_initialize
@@ -6,10 +8,18 @@ class Midori::Sandbox
6
8
  @handlers[Midori::Exception::NotFound] = proc {|_e| Midori::Response.new(404, {}, '404 Not Found')}
7
9
  end
8
10
 
11
+ # Add a rule to Sandbox
12
+ # @param [ Class ] class_name the class to capture
13
+ # @param [ Proc ] block what to do when captured
14
+ # @return [ nil ] nil
9
15
  def add_rule(class_name, block)
10
16
  @handlers[class_name] = block
17
+ nil
11
18
  end
12
19
 
20
+ # Detect what to run with given error
21
+ # @param [ StandardError ] error the error captured
22
+ # @return [ nil ] nil
13
23
  def capture(error)
14
24
  if @handlers[error.class].nil?
15
25
  @handlers[Midori::Exception::InternalError].call(error)
@@ -18,6 +28,10 @@ class Midori::Sandbox
18
28
  end
19
29
  end
20
30
 
31
+ # Run sandbox inside given clean room
32
+ # @param [ Midori::CleanRoom ] clean_room Clean room to run
33
+ # @param [ Proc ] function the block to run
34
+ # @return [ nil ] nil
21
35
  def run(clean_room, function, *args)
22
36
  begin
23
37
  function.to_lambda(clean_room).call(*args)
@@ -26,5 +40,7 @@ class Midori::Sandbox
26
40
  end
27
41
  end
28
42
  end
43
+
44
+ private_class_method :class_initialize
29
45
  class_initialize
30
46
  end
data/lib/midori/server.rb CHANGED
@@ -1,12 +1,17 @@
1
1
  ##
2
2
  # Logic to EventMachine TCP Server, running inside +EM::Connection+
3
- # @attr [Midori::Request] request
4
- # @attr [Class] api inherited from Midori::API
5
- # @attr [Midori::WebSocket] websocket websocket instance
6
- # @attr [Midori::EventSource] eventsource eventsource instance
7
3
  module Midori::Server
4
+ # @!attribute request
5
+ # @return [ Midori::Request ] raw request
6
+ # @!attribute api
7
+ # @return [ Class ] inherited from Midori::API
8
+ # @!attribute websocket
9
+ # @return [ Midori::WebSocket ] defined websocket instance
10
+ # @!attribute eventsource
11
+ # @return [ Midori::EventSource] defined eventsource instance
8
12
  attr_accessor :request, :api, :websocket, :eventsource
9
13
 
14
+ # Define server behaviour
10
15
  # @param [Class] api inherited from Midori::API
11
16
  # @param [Logger] logger global logger
12
17
  def initialize(api, logger)
@@ -1,5 +1,5 @@
1
1
  # Midori Module
2
2
  module Midori
3
3
  # Current Version Code
4
- VERSION = '0.1.6.1'.freeze
4
+ VERSION = '0.1.7'.freeze
5
5
  end
@@ -1,20 +1,22 @@
1
1
  ##
2
2
  # This class provides methods for WebSocket connection instance.
3
- # @attr [Array<Fixnum>, String] msg message send from client
4
- # @attr [Fixnum] opcode operation code of WebSocket
5
- # @attr [Hash] events response for different event
6
- # @attr [EM::Connection] connection raw EventMachine connection
3
+ # @attr [ Array<Fixnum>, String ] msg message send from client
4
+ # @attr [ Fixnum ] opcode operation code of WebSocket
5
+ # @attr [ Hash ] events response for different event
6
+ # @attr [ EM::Connection ] connection raw EventMachine connection
7
+ # @attr [ Midori::Request ] request raw request
7
8
  class Midori::WebSocket
8
9
  attr_accessor :msg, :opcode, :events, :connection, :request
9
10
 
10
- # @param [EM::Connection] connection raw EventMachine connection
11
+ # Init a WebSocket instance with a connection
12
+ # @param [ EM::Connection ] connection raw EventMachine connection
11
13
  def initialize(connection)
12
14
  @events = {}
13
15
  @connection = connection
14
16
  end
15
17
 
16
18
  # Decode raw data send from client
17
- # @param [StringIO] data raw data
19
+ # @param [ StringIO ] data raw data
18
20
  def decode(data)
19
21
  # Fin and Opcode
20
22
  byte_tmp = data.getbyte
@@ -29,7 +31,7 @@ class Midori::WebSocket
29
31
  end
30
32
 
31
33
  # Decode masked message send from client
32
- # @param [StringIO] data raw data
34
+ # @param [ StringIO ] data raw data
33
35
  def decode_mask(data)
34
36
  # Mask
35
37
  byte_tmp = data.getbyte
@@ -48,7 +50,7 @@ class Midori::WebSocket
48
50
  end
49
51
 
50
52
  # API definition for events
51
- # @param [Symbol] event event name(open, message, close, ping, pong)
53
+ # @param [ Symbol ] event event name(open, message, close, ping, pong)
52
54
  # @yield what to do after event matched
53
55
  # @example
54
56
  # websocket '/websocket' do |ws|
@@ -61,7 +63,7 @@ class Midori::WebSocket
61
63
  end
62
64
 
63
65
  # Send data
64
- # @param [Array<Fixnum>, String] msg data to send
66
+ # @param [ Array<Fixnum>, String ] msg data to send
65
67
  def send(msg)
66
68
  output = []
67
69
  if msg.is_a?String
@@ -77,20 +79,20 @@ class Midori::WebSocket
77
79
  end
78
80
 
79
81
  # Send a Ping request
80
- # @param [String] str string to send
82
+ # @param [ String ] str string to send
81
83
  def ping(str)
82
84
  heartbeat(0b10001001, str)
83
85
  end
84
86
 
85
87
  # Send a Pong request
86
- # @param [String] str string to send
88
+ # @param [ String ] str string to send
87
89
  def pong(str)
88
90
  heartbeat(0b10001010, str)
89
91
  end
90
92
 
91
93
  # Ancestor of ping pong
92
- # @param [Fixnum] method opcode
93
- # @param [String] str string to send
94
+ # @param [ Fixnum ] method opcode
95
+ # @param [ String ] str string to send
94
96
  def heartbeat(method, str)
95
97
  raise Midori::Exception::PingPongSizeTooLarge if str.size > 125
96
98
  @connection.send_data [method, str.size, str].pack("CCA#{str.size}")
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.6.1
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - HeckPsi Lab
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-21 00:00:00.000000000 Z
11
+ date: 2016-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine