crap_server 0.0.2.1 → 0.0.2.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fec671da6d4ad0911a4471409620d7fb6de1d25b
4
- data.tar.gz: 18b77248eb31818771cf374ba71b6bac2d6db5c6
3
+ metadata.gz: 636e155531fe01738c575fc3d23dcd24557cd866
4
+ data.tar.gz: eb2b425befbd907828b6bdf55d1981643ef4f05d
5
5
  SHA512:
6
- metadata.gz: 0468c1a3e10ec024543ad56a5d8a948a0b6313e0d58e7a9e780d099787ccf1cbd33e10f771cf31b0c0fd08539df033cb837186556ed8d687d87fd3072ce37af7
7
- data.tar.gz: 12fd50db239ae0fdc63ff31086baaeece7cfbb96798cc1c6b8b488069fc8a120a790b8eaf47b8d96977da42941117ffa9db04ae7487eaaeca23e9b5a9f5bb86e
6
+ metadata.gz: 07230fa972fdf9f4b9fc5cf10043a0a4593fee1811012d9f1d93785dd585b82eb03bf02d7b225478bfb3b553286bfac0b54438ceb2f71f4effffb61d81e5c3fc
7
+ data.tar.gz: a3e470a6d2e4c3043b2c872da4e8cbfca3166e28f7795c8008d4cb50bf67b4ea6a8514e9b184c5e704cb534c02f2d4d2bb89fba4517daf008532ca938be50add
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # CrapServer
2
+ [![Gem Version](https://badge.fury.io/rb/crap_server.svg)](http://badge.fury.io/rb/crap_server)
2
3
  [![Code Climate](https://codeclimate.com/github/anga/crap_server/badges/gpa.svg)](https://codeclimate.com/github/anga/crap_server)
3
4
 
4
- Really thin and non intuitive ruby server and framework. Made to be fast and ready for really heavy servers (not only http server).
5
+ Really thin and non intuitive ruby server. Made to be fast and ready for really heavy servers (not only http server).
5
6
 
6
7
  # Another one?
7
8
 
data/crap_server.gemspec CHANGED
@@ -6,10 +6,10 @@ require 'crap_server/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'crap_server'
8
8
  spec.version = CrapServer::VERSION
9
- spec.authors = ['Andres Joser Borek']
9
+ spec.authors = ['Andres Jose Borek']
10
10
  spec.email = ['andres.b.dev@gmail.com']
11
- spec.summary = %q{Really thin a non intuitive ruby server and framework.}
12
- spec.description = %q{Really thin and non intuitive ruby server and framework. Made to be fast and ready for really heavy servers (not only http server).}
11
+ spec.summary = %q{Really thin a non intuitive ruby server.}
12
+ spec.description = %q{Really thin and non intuitive ruby server. Made to be fast and ready for really heavy servers (not only http server).}
13
13
  spec.homepage = 'https://rubygems.org/gems/crap_server'
14
14
  spec.license = 'MIT'
15
15
 
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.required_ruby_version = '>= 1.9.2'
22
22
  spec.add_development_dependency 'bundler', '~> 1.6'
23
+ spec.add_development_dependency 'rspec', '>= 3.0'
23
24
  # celluloid is for future use. Right now is not used
24
25
  # spec.add_dependency "celluloid", '~> 0.15.2'
25
26
  end
@@ -185,7 +185,7 @@ module CrapServer
185
185
  # Main configuration.
186
186
  # See Crap::Configure
187
187
  def config
188
- @config
188
+ @config ||= CrapServer::Configure.new
189
189
  end
190
190
 
191
191
  def logger=(value)
@@ -195,7 +195,7 @@ module CrapServer
195
195
  def logger
196
196
  if not @logger
197
197
  @logger = Logger.new(config.log_file)
198
- @logger.level = @config.log_level
198
+ @logger.level = config.log_level
199
199
  end
200
200
  @logger
201
201
  end
@@ -27,6 +27,8 @@ module CrapServer
27
27
  attr_accessor :log_file
28
28
  # The log level used
29
29
  attr_accessor :log_level
30
+ # The timeout using when we use non-blocking method
31
+ attr_accessor :timeout
30
32
  def initialize
31
33
  @port = 7331
32
34
  @manual_read = false
@@ -36,6 +38,7 @@ module CrapServer
36
38
  @auto_close_connection = true
37
39
  @log_file = STDOUT
38
40
  @log_level = Logger::DEBUG
41
+ @timeout = nil # By default, no timeout. Used to allow persistent connections.
39
42
  end
40
43
  end
41
44
  end
@@ -26,10 +26,14 @@ module CrapServer
26
26
 
27
27
  # Write to the client the given string
28
28
  def write(string)
29
- if @method == :normal or @method == :partial
30
- @socket.write(string)
31
- elsif @method == :non_blocking
32
- @socket.write_nonblock(string)
29
+ begin
30
+ if @method == :normal or @method == :partial
31
+ @socket.write(string)
32
+ elsif @method == :non_blocking
33
+ @socket.write_nonblock(string)
34
+ end
35
+ rescue IO::WaitWritable, Errno::EINTR
36
+ IO.select(nil, [@socket], nil, config.timeout)
33
37
  end
34
38
  end
35
39
 
@@ -50,7 +54,7 @@ module CrapServer
50
54
  @socket.read_nonblock(config.read_buffer_size)
51
55
  end
52
56
  rescue Errno::EAGAIN
53
- IO.select([connection])
57
+ IO.select([connection],nil,nil, config.timeout)
54
58
  retry
55
59
  end
56
60
  end
@@ -1,3 +1,3 @@
1
1
  module CrapServer
2
- VERSION = '0.0.2.1'
2
+ VERSION = '0.0.2.2'
3
3
  end
@@ -0,0 +1,58 @@
1
+ require 'spec_helper'
2
+ describe CrapServer::Application do
3
+ before do
4
+ # Reset to nil the configuration
5
+ CrapServer::Application.class_eval do
6
+ @config = nil
7
+ end
8
+ # Reset the logger to nil
9
+ CrapServer::Application.class_eval do
10
+ @logger = Dummy
11
+ end
12
+ end
13
+ context 'run!' do
14
+
15
+ it 'should accept a block' do
16
+ expect(CrapServer::Application.method(:run!).parameters[-1][0]).to eq(:block)
17
+ end
18
+
19
+ context 'without loop' do
20
+ before do
21
+ # We don't want to block the specs because the sockets
22
+ allow(Socket).to receive(:accept_loop).and_return(nil)
23
+ allow(Socket).to receive(:new) do |*args|
24
+ Dummy
25
+ end
26
+ end
27
+
28
+ it 'should bind IPv4 and IPv6' do
29
+ @v4 = false
30
+ @v6 = false
31
+ allow(Socket).to receive(:new) do |*args|
32
+ @v4 = true if args[0] == :INET and args[1] == :STREAM and args.size == 2
33
+ @v6 = true if args[0] == :INET and args[1] == :STREAM and args.size == 2
34
+ Dummy
35
+ end
36
+ CrapServer::Application.run! do
37
+ end
38
+ expect(@v4).to eq(true)
39
+ expect(@v6).to eq(true)
40
+ end
41
+
42
+ it 'if the user does not configure the app, should start the default configuration' do
43
+ expect(CrapServer::Configure).to receive(:new) do
44
+ Dummy
45
+ end
46
+ CrapServer::Application.run! do
47
+ end
48
+ end
49
+
50
+ it 'should bump to the maximum allowed opened files' do
51
+ expect(Process).to receive(:setrlimit).with(:NOFILE, Process.getrlimit(:NOFILE)[1])
52
+ CrapServer::Application.run! do
53
+ end
54
+ end
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,12 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'crap_server' # and any other gems you need
5
+
6
+ RSpec.configure do |config|
7
+ end
8
+
9
+ class Dummy
10
+ def self.method_missing(method, *args, &blk)
11
+ end
12
+ end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: crap_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.1
4
+ version: 0.0.2.2
5
5
  platform: ruby
6
6
  authors:
7
- - Andres Joser Borek
7
+ - Andres Jose Borek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
@@ -24,8 +24,22 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.6'
27
- description: Really thin and non intuitive ruby server and framework. Made to be fast
28
- and ready for really heavy servers (not only http server).
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ description: Really thin and non intuitive ruby server. Made to be fast and ready
42
+ for really heavy servers (not only http server).
29
43
  email:
30
44
  - andres.b.dev@gmail.com
31
45
  executables: []
@@ -44,6 +58,8 @@ files:
44
58
  - lib/crap_server/connection_instance.rb
45
59
  - lib/crap_server/helpers/socket_reader.rb
46
60
  - lib/crap_server/version.rb
61
+ - spec/application_spec.rb
62
+ - spec/spec_helper.rb
47
63
  homepage: https://rubygems.org/gems/crap_server
48
64
  licenses:
49
65
  - MIT
@@ -67,5 +83,7 @@ rubyforge_project:
67
83
  rubygems_version: 2.2.2
68
84
  signing_key:
69
85
  specification_version: 4
70
- summary: Really thin a non intuitive ruby server and framework.
71
- test_files: []
86
+ summary: Really thin a non intuitive ruby server.
87
+ test_files:
88
+ - spec/application_spec.rb
89
+ - spec/spec_helper.rb