angelo 0.2.4 → 0.3.0

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: 646a618bdb4cb30cd3ec05c4dd4e372380c830e5
4
- data.tar.gz: 16eaadba88f497055b6dc1114f5c2accf6317ab3
3
+ metadata.gz: ebbf63326421673b1352e779ea177d5f7b43c610
4
+ data.tar.gz: c1e169dd0f1d88a64bdc70df502edd24533a187d
5
5
  SHA512:
6
- metadata.gz: 310b0831c924fd91bac9ddf2815c2b4cb3697d037b362b1b7efbd37cee529fe44ce99d78af0d4e77b5fc6caa9d75f47a3470307b1d027def5e2260a5456c23d1
7
- data.tar.gz: d62dee4947455350ed4234b503718b83e32bdc773cb3be122bfd98943591dc30f174757478244dca57c8f7937b6b9259ea0bd489ce132bdc1493b17ad38eb2e4
6
+ metadata.gz: 823587abc0ddec2fd5ffd496feb3c0295f5aa331882bad9314895a329d487ab7c823aa106b617fe447e135bf73ba50e9a0eb2ccebaa4c958590e441af60bba2f
7
+ data.tar.gz: e6972e20b9b724331d0873b809e8ebb7f5dbbb571ddd59e1694c56083ef7fcd5d49a4d755a4c4b90986af819bbddbb58648ecfeb714f80752055b1070b10c66a
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  changelog
2
2
  =========
3
3
 
4
+ ### 0.3.0 10 nov 2014
5
+
6
+ thanks: @mighe
7
+
8
+ * refactor bind address, port, log level and error reporting setting into top level DSLish methods
9
+ * set bind address with `addr '0.0.0.0'`
10
+ * set bind port with `port 4567`
11
+ * set log level with `log_level ::Logger::DEBUG`
12
+ * set error reporting with `report_errors!`
13
+ * bind address and port can still be specified on `.run` or `.run!` calls
14
+ * remove command line option parsing completely
15
+
4
16
  ### 0.2.4 4 nov 2014 totally voted
5
17
 
6
18
  thanks: @mighe
data/lib/angelo/base.rb CHANGED
@@ -6,23 +6,7 @@ module Angelo
6
6
 
7
7
  extend Forwardable
8
8
  def_delegators :@responder, :content_type, :headers, :redirect, :request, :transfer_encoding
9
- def_delegators :@klass, :websockets, :sses, :sse_event, :sse_message
10
-
11
- @@addr = DEFAULT_ADDR
12
- @@port = DEFAULT_PORT
13
-
14
- @@ping_time = DEFAULT_PING_TIME
15
- @@log_level = DEFAULT_LOG_LEVEL
16
-
17
- @@report_errors = false
18
-
19
- if ARGV.any? and not Kernel.const_defined?('Minitest')
20
- require 'optparse'
21
- OptionParser.new { |op|
22
- op.on('-p port', 'set the port (default is 4567)') { |val| @@port = Integer(val) }
23
- op.on('-o addr', "set the host (default is #{@@addr})") { |val| @@addr = val }
24
- }.parse!(ARGV.dup)
25
- end
9
+ def_delegators :@klass, :report_errors?, :sse_event, :sse_message, :sses, :websockets
26
10
 
27
11
  attr_accessor :responder
28
12
 
@@ -40,6 +24,12 @@ module Angelo
40
24
  #
41
25
  subclass.class_eval 'class RequestError < Angelo::RequestError; end'
42
26
 
27
+ subclass.addr DEFAULT_ADDR
28
+ subclass.port DEFAULT_PORT
29
+
30
+ subclass.ping_time DEFAULT_PING_TIME
31
+ subclass.log_level DEFAULT_LOG_LEVEL
32
+
43
33
  class << subclass
44
34
 
45
35
  def root
@@ -60,6 +50,34 @@ module Angelo
60
50
 
61
51
  end
62
52
 
53
+ def addr a = nil
54
+ @addr = a if a
55
+ @addr
56
+ end
57
+
58
+ def log_level ll = nil
59
+ @log_level = ll if ll
60
+ @log_level
61
+ end
62
+
63
+ def ping_time pt = nil
64
+ @ping_time = pt if pt
65
+ @ping_time
66
+ end
67
+
68
+ def port p = nil
69
+ @port = p if p
70
+ @port
71
+ end
72
+
73
+ def report_errors!
74
+ @report_errors = true
75
+ end
76
+
77
+ def report_errors?
78
+ !!@report_errors
79
+ end
80
+
63
81
  def compile! name, &block
64
82
  define_method name, &block
65
83
  method = instance_method name
@@ -144,13 +162,13 @@ module Angelo
144
162
  Responder.content_type type
145
163
  end
146
164
 
147
- def run! addr = @@addr, port = @@port
148
- run addr, port, true
165
+ def run! _addr = addr, _port = port
166
+ run _addr, _port, true
149
167
  end
150
168
 
151
- def run addr = @@addr, port = @@port, blocking = false
152
- Celluloid.logger.level = @@log_level
153
- @server = Angelo::Server.new self, addr, port
169
+ def run _addr = addr, _port = port, blocking = false
170
+ Celluloid.logger.level = log_level
171
+ @server = Angelo::Server.new self, _addr, _port
154
172
  @server.async.ping_websockets
155
173
  if blocking
156
174
  trap "INT" do
@@ -226,7 +244,7 @@ module Angelo
226
244
  end
227
245
 
228
246
  task :ping_websockets do
229
- every(@@ping_time) do
247
+ every(@base.ping_time) do
230
248
  websockets.all_each do |ws|
231
249
  ws.socket << ::WebSocket::Message.ping.to_data
232
250
  end
@@ -238,7 +256,7 @@ module Angelo
238
256
  block[socket]
239
257
  rescue Reel::SocketError, IOError, SystemCallError => e
240
258
  # probably closed on client
241
- warn e.message if @@report_errors
259
+ warn e.message if report_errors
242
260
  socket.close unless socket.closed?
243
261
  rescue => e
244
262
  error e.inspect
@@ -298,10 +316,6 @@ module Angelo
298
316
  halt 200, :sse
299
317
  end
300
318
 
301
- def report_errors?
302
- @@report_errors
303
- end
304
-
305
319
  def sleep time
306
320
  Celluloid.sleep time
307
321
  end
@@ -13,7 +13,10 @@ module Angelo
13
13
 
14
14
  before do
15
15
  app = Class.new Angelo::Base
16
- app.class_eval { content_type :html } # reset
16
+
17
+ app.class_eval { content_type :html } # reset
18
+ Celluloid.logger.level = ::Logger::ERROR # see spec_helper.rb:9
19
+
17
20
  app.class_eval &block
18
21
  @server = Angelo::Server.new app
19
22
  app.server = @server
data/lib/angelo/server.rb CHANGED
@@ -9,11 +9,15 @@ module Angelo
9
9
 
10
10
  def_delegators :@base, :websockets, :sses
11
11
 
12
- def initialize base, host = '127.0.0.1', port = 4567
12
+ attr_reader :base
13
+
14
+ def initialize base, addr = nil, port = nil
13
15
  @base = base
16
+ addr ||= @base.addr
17
+ port ||= @base.port
14
18
  info "Angelo #{VERSION}"
15
- info "listening on #{host}:#{port}"
16
- super host, port, &method(:on_connection)
19
+ info "listening on #{addr}:#{port}"
20
+ super addr, port, &method(:on_connection)
17
21
  end
18
22
 
19
23
  def on_connection connection
@@ -1,3 +1,3 @@
1
1
  module Angelo
2
- VERSION = '0.2.4'
2
+ VERSION = '0.3.0'
3
3
  end
data/test/angelo_spec.rb CHANGED
@@ -442,4 +442,73 @@ describe Angelo::Base do
442
442
 
443
443
  end
444
444
 
445
+ describe 'dsl configs' do
446
+
447
+ describe 'addr' do
448
+
449
+ define_app do
450
+ addr '0.0.0.0'
451
+ get('/'){ 'hi' }
452
+ end
453
+
454
+ it 'binds to the specified addr' do
455
+ ->{ TCPServer.new '0.0.0.0', 4567 }.must_raise Errno::EADDRINUSE
456
+ end
457
+
458
+ end
459
+
460
+ describe 'port' do
461
+
462
+ define_app do
463
+ port 3000
464
+ get('/'){ 'hi' }
465
+ end
466
+
467
+ it 'binds to the specified port' do
468
+ ->{ TCPServer.new Angelo::DEFAULT_ADDR, 3000 }.must_raise Errno::EADDRINUSE
469
+ end
470
+
471
+ end
472
+
473
+ describe 'log_level' do
474
+
475
+ define_app do
476
+ log_level Logger::FATAL
477
+ get('/'){ 'hi' }
478
+ end
479
+
480
+ it 'sets the logging level' do
481
+ @server.base.log_level.must_equal Logger::FATAL
482
+ end
483
+
484
+ end
485
+
486
+ describe 'ping_time' do
487
+
488
+ define_app do
489
+ ping_time 3
490
+ get('/'){ 'hi' }
491
+ end
492
+
493
+ it 'sets the websocket ping time' do
494
+ @server.base.ping_time.must_equal 3
495
+ end
496
+
497
+ end
498
+
499
+ describe 'report_errors!' do
500
+
501
+ define_app do
502
+ report_errors!
503
+ get('/'){ 'hi' }
504
+ end
505
+
506
+ it 'sets flag for reporting error traces in the log' do
507
+ assert @server.base.report_errors?
508
+ end
509
+
510
+ end
511
+
512
+ end
513
+
445
514
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: angelo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenichi Nakamura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-04 00:00:00.000000000 Z
11
+ date: 2014-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: reel