knjappserver 0.0.15 → 0.0.16
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.
- data/Gemfile +4 -2
- data/Gemfile.lock +24 -10
- data/README.rdoc +298 -1
- data/VERSION +1 -1
- data/bin/check_running.rb +2 -2
- data/knjappserver.gemspec +23 -5
- data/lib/files/database_schema.rb +124 -111
- data/lib/include/class_customio.rb +19 -5
- data/lib/include/class_erbhandler.rb +5 -22
- data/lib/include/class_httpresp.rb +66 -28
- data/lib/include/class_httpserver.rb +27 -14
- data/lib/include/class_httpsession.rb +161 -212
- data/lib/include/class_httpsession_contentgroup.rb +144 -0
- data/lib/include/class_httpsession_knjengine.rb +33 -68
- data/lib/include/class_httpsession_mongrel.rb +1 -1
- data/lib/include/class_httpsession_webrick.rb +1 -1
- data/lib/include/class_knjappserver.rb +105 -130
- data/lib/include/class_knjappserver_cleaner.rb +20 -13
- data/lib/include/class_knjappserver_cmdline.rb +44 -0
- data/lib/include/class_knjappserver_errors.rb +4 -1
- data/lib/include/class_knjappserver_logging.rb +48 -8
- data/lib/include/class_knjappserver_mailing.rb +36 -14
- data/lib/include/class_knjappserver_sessions.rb +78 -0
- data/lib/include/class_knjappserver_threadding.rb +18 -45
- data/lib/include/class_knjappserver_threadding_timeout.rb +78 -0
- data/lib/include/class_knjappserver_translations.rb +30 -0
- data/lib/include/class_knjappserver_web.rb +55 -3
- data/lib/include/class_log.rb +31 -3
- data/lib/include/class_log_access.rb +0 -15
- data/lib/include/class_log_data.rb +0 -15
- data/lib/include/class_log_data_link.rb +1 -14
- data/lib/include/class_log_data_value.rb +5 -17
- data/lib/include/class_session.rb +6 -18
- data/lib/include/magic_methods.rb +12 -14
- data/lib/pages/benchmark.rhtml +0 -0
- data/lib/pages/benchmark_print.rhtml +14 -0
- data/lib/pages/benchmark_simple.rhtml +3 -0
- data/lib/pages/benchmark_threadded_content.rhtml +21 -0
- data/lib/pages/spec.rhtml +26 -0
- data/lib/pages/spec_test_multiple_clients.rhtml +3 -0
- data/lib/pages/spec_threadded_content.rhtml +38 -0
- data/lib/scripts/benchmark.rb +65 -0
- data/spec/knjappserver_spec.rb +87 -43
- metadata +54 -20
data/lib/pages/spec.rhtml
CHANGED
@@ -1,9 +1,35 @@
|
|
1
1
|
<%
|
2
|
+
if _get["choice"] == "test_cookie"
|
3
|
+
_kas.cookie(
|
4
|
+
"name" => "TestCookie",
|
5
|
+
"value" => "TestValue",
|
6
|
+
"expires" => Time.new + 3600 #add an hour
|
7
|
+
)
|
8
|
+
_kas.cookie(
|
9
|
+
"name" => "TestCookie2",
|
10
|
+
"value" => "TestValue2",
|
11
|
+
"expires" => Time.new + 7200 #add an hour
|
12
|
+
)
|
13
|
+
_kas.cookie(
|
14
|
+
"name" => "TestCookie3",
|
15
|
+
"value" => "TestValue 3 ",
|
16
|
+
"expires" => Time.new + 1200
|
17
|
+
)
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
if _get["choice"] == "get_cookies"
|
22
|
+
print Knj::Php.json_encode(_cookie)
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
|
2
26
|
_kas.header("TestHeader", "NormalHeader")
|
3
27
|
_kas.header_raw("TestRaw: RawHeader")
|
4
28
|
|
5
29
|
if _meta["REQUEST_METHOD"] == "POST"
|
6
30
|
print _post["postdata"]
|
31
|
+
elsif _get["choice"] == "check_get_parse"
|
32
|
+
print _get["value"]
|
7
33
|
else
|
8
34
|
print "Test"
|
9
35
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<%
|
2
|
+
_kas.threadded_content do
|
3
|
+
sleep 0.2
|
4
|
+
print "1"
|
5
|
+
end
|
6
|
+
|
7
|
+
print "2"
|
8
|
+
|
9
|
+
_kas.threadded_content do
|
10
|
+
sleep 0.1
|
11
|
+
|
12
|
+
_kas.threadded_content do
|
13
|
+
sleep 0.1
|
14
|
+
print "3"
|
15
|
+
|
16
|
+
sleep 0.1
|
17
|
+
|
18
|
+
_kas.threadded_content do
|
19
|
+
print "4"
|
20
|
+
sleep 0.1
|
21
|
+
print "5"
|
22
|
+
end
|
23
|
+
|
24
|
+
_kas.threadded_content do
|
25
|
+
print "6"
|
26
|
+
print "7"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
print "8"
|
31
|
+
end
|
32
|
+
|
33
|
+
_kas.threadded_content do
|
34
|
+
print "9"
|
35
|
+
end
|
36
|
+
|
37
|
+
print "10"
|
38
|
+
%>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby1.9.1
|
2
|
+
|
3
|
+
Dir.chdir(File.dirname(__FILE__))
|
4
|
+
require "rubygems"
|
5
|
+
require "../knjappserver.rb"
|
6
|
+
require "knjrbfw"
|
7
|
+
require "erubis"
|
8
|
+
require "sqlite3" if RUBY_ENGINE != "jruby"
|
9
|
+
require "knj/autoload"
|
10
|
+
|
11
|
+
begin
|
12
|
+
args = {
|
13
|
+
:filename => "benchmark.rhtml"
|
14
|
+
}
|
15
|
+
|
16
|
+
OptionParser.new do |opts|
|
17
|
+
opts.banner = "Usage: benchmark.rb [options]"
|
18
|
+
|
19
|
+
opts.on("-f FILENAME", "--file FILENAME", "The filename that should be requested from the server.") do |t|
|
20
|
+
args[:filename] = t
|
21
|
+
end
|
22
|
+
end.parse!
|
23
|
+
end
|
24
|
+
|
25
|
+
db_path = "#{File.dirname(__FILE__)}/benchmark_db.sqlite3"
|
26
|
+
|
27
|
+
appsrv = Knjappserver.new(
|
28
|
+
:debug => false,
|
29
|
+
:port => 15081,
|
30
|
+
:doc_root => "#{File.dirname(__FILE__)}/../pages",
|
31
|
+
:db_args => {
|
32
|
+
:type => "sqlite3",
|
33
|
+
:path => db_path,
|
34
|
+
:return_keys => "symbols"
|
35
|
+
}
|
36
|
+
)
|
37
|
+
appsrv.start
|
38
|
+
|
39
|
+
count_requests = 0
|
40
|
+
1.upto(100) do |count_thread|
|
41
|
+
Knj::Thread.new(count_thread) do |count_thread|
|
42
|
+
print "Thread #{count_thread} started.\n"
|
43
|
+
|
44
|
+
http = Knj::Http2.new(
|
45
|
+
:host => "localhost",
|
46
|
+
:port => 15081,
|
47
|
+
:user_agent => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1; debugid:#{count_thread}) Gecko/20060111 Firefox/3.6.0.1",
|
48
|
+
:debug => false
|
49
|
+
)
|
50
|
+
|
51
|
+
loop do
|
52
|
+
resp = http.get(args[:filename])
|
53
|
+
count_requests += 1
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
loop do
|
59
|
+
last_count = count_requests
|
60
|
+
sleep 1
|
61
|
+
counts_betw = count_requests - last_count
|
62
|
+
print "#{counts_betw} /sec\n"
|
63
|
+
end
|
64
|
+
|
65
|
+
appsrv.join
|
data/spec/knjappserver_spec.rb
CHANGED
@@ -11,70 +11,57 @@ describe "Knjappserver" do
|
|
11
11
|
File.unlink(db_path) if File.exists?(db_path)
|
12
12
|
|
13
13
|
require "knj/knjdb/libknjdb.rb"
|
14
|
-
require "sqlite3"
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
require "sqlite3" if RUBY_ENGINE != "jruby"
|
15
|
+
|
16
|
+
begin
|
17
|
+
db = Knj::Db.new(
|
18
|
+
:type => "sqlite3",
|
19
|
+
:path => db_path,
|
20
|
+
:return_keys => "symbols"
|
21
|
+
)
|
22
|
+
rescue => e
|
23
|
+
STDOUT.puts e.inspect
|
24
|
+
STDOUT.puts e.backtrace
|
25
|
+
|
26
|
+
raise e
|
27
|
+
end
|
20
28
|
|
21
29
|
erbhandler = Knjappserver::ERBHandler.new
|
22
30
|
|
31
|
+
if RUBY_ENGINE == "jruby"
|
32
|
+
mail_require = false
|
33
|
+
else
|
34
|
+
mail_require = true
|
35
|
+
end
|
36
|
+
|
23
37
|
$appserver = Knjappserver.new(
|
24
38
|
:debug => false,
|
25
39
|
:autorestart => false,
|
26
|
-
:
|
27
|
-
:verbose => false,
|
28
|
-
:title => "knjTasks",
|
40
|
+
:title => "SpecTest",
|
29
41
|
:port => 1515,
|
30
|
-
:host => "0.0.0.0",
|
31
|
-
:default_page => "index.rhtml",
|
32
42
|
:doc_root => "#{File.dirname(__FILE__)}/../lib/pages",
|
33
|
-
:hostname => false,
|
34
|
-
:default_filetype => "text/html",
|
35
|
-
:engine_knjengine => true,
|
36
43
|
:locales_gettext_funcs => true,
|
37
44
|
:locale_default => "da_DK",
|
38
|
-
:
|
39
|
-
:
|
40
|
-
:jpg => "image/jpeg",
|
41
|
-
:gif => "image/gif",
|
42
|
-
:png => "image/png",
|
43
|
-
:html => "text/html",
|
44
|
-
:htm => "text/html",
|
45
|
-
:rhtml => "text/html",
|
46
|
-
:css => "text/css",
|
47
|
-
:xml => "text/xml",
|
48
|
-
:js => "text/javascript"
|
49
|
-
},
|
50
|
-
:handlers => [
|
51
|
-
{
|
52
|
-
:file_ext => "rhtml",
|
53
|
-
:callback => erbhandler.method(:erb_handler)
|
54
|
-
},{
|
55
|
-
:path => "/fckeditor",
|
56
|
-
:mount => "/usr/share/fckeditor"
|
57
|
-
}
|
58
|
-
],
|
59
|
-
:db => db
|
45
|
+
:db => db,
|
46
|
+
:mail_require => mail_require
|
60
47
|
)
|
61
48
|
|
62
49
|
$appserver.vars[:test] = "kasper"
|
63
50
|
$appserver.define_magic_var(:_testvar1, "Kasper")
|
64
51
|
$appserver.define_magic_var(:_testvar2, "Johansen")
|
65
|
-
$appserver.update_db
|
66
52
|
$appserver.start
|
67
53
|
end
|
68
54
|
|
69
|
-
it "should be able to mount FCKeditor dir to /usr/share/fckeditor" do
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
55
|
it "should be able to handle a GET-request." do
|
56
|
+
#Check that we are able to perform a simple GET request and get the correct data back.
|
74
57
|
require "knj/http"
|
75
58
|
$http = Knj::Http.new("host" => "localhost", "port" => 1515)
|
76
59
|
data = $http.get("/spec.rhtml")
|
77
|
-
raise "Unexpected HTML: '#{data["data"]}'." if data["data"].to_s
|
60
|
+
raise "Unexpected HTML: '#{data["data"]}'." if data["data"].to_s != "Test"
|
61
|
+
|
62
|
+
#Check that URL-decoding are being done.
|
63
|
+
data = $http.get("/spec.rhtml?choice=check_get_parse&value=#{Knj::Php.urlencode("gfx/nopic.png")}")
|
64
|
+
raise "Unexpected HTML: '#{data["data"]}'." if data["data"].to_s != "gfx/nopic.png"
|
78
65
|
end
|
79
66
|
|
80
67
|
it "should be able to handle a HEAD-request." do
|
@@ -100,12 +87,69 @@ describe "Knjappserver" do
|
|
100
87
|
end
|
101
88
|
end
|
102
89
|
|
103
|
-
it "
|
90
|
+
it "should be able to use the header-methods." do
|
104
91
|
data = $http.get("/spec.rhtml")
|
105
92
|
raise "Normal header data could not be detected." if data["response"].header["testheader"] != "NormalHeader"
|
106
93
|
raise "Raw header data could not be detected." if data["response"].header["testraw"]!= "RawHeader"
|
107
94
|
end
|
108
95
|
|
96
|
+
it "should be able to set and get multiple cookies at the same time." do
|
97
|
+
require "json"
|
98
|
+
|
99
|
+
data = $http.get("/spec.rhtml?choice=test_cookie")
|
100
|
+
raise data["data"] if data["data"].to_s.length > 0
|
101
|
+
|
102
|
+
data = $http.get("/spec.rhtml?choice=get_cookies")
|
103
|
+
parsed = Knj::Php.json_decode(data["data"])
|
104
|
+
|
105
|
+
raise "Unexpected value for 'TestCookie': '#{parsed["TestCookie"]}'." if parsed["TestCookie"] != "TestValue"
|
106
|
+
raise "Unexpected value for 'TestCookie2': '#{parsed["TestCookie2"]}'." if parsed["TestCookie2"] != "TestValue2"
|
107
|
+
raise "Unexpected value for 'TestCookie3': '#{parsed["TestCookie3"]}'." if parsed["TestCookie3"] != "TestValue 3 "
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should be able to run the rspec_threadded_content test correctly." do
|
111
|
+
data = $http.get("/spec_threadded_content.rhtml")
|
112
|
+
|
113
|
+
if data["data"] != "12345678910"
|
114
|
+
raise data["data"].to_s
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should be able to add a timeout." do
|
119
|
+
$break_timeout = false
|
120
|
+
timeout = $appserver.timeout(:time => 1) do
|
121
|
+
$break_timeout = true
|
122
|
+
end
|
123
|
+
|
124
|
+
Timeout.timeout(2) do
|
125
|
+
loop do
|
126
|
+
break if $break_timeout
|
127
|
+
sleep 0.1
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
it "should be able to stop a timeout." do
|
133
|
+
$timeout_runned = false
|
134
|
+
timeout = $appserver.timeout(:time => 1) do
|
135
|
+
$timeout_runned = true
|
136
|
+
end
|
137
|
+
|
138
|
+
sleep 0.5
|
139
|
+
timeout.stop
|
140
|
+
|
141
|
+
begin
|
142
|
+
Timeout.timeout(1.5) do
|
143
|
+
loop do
|
144
|
+
raise "The timeout ran even though stop was called?" if $timeout_runned
|
145
|
+
sleep 0.1
|
146
|
+
end
|
147
|
+
end
|
148
|
+
rescue Timeout::Error
|
149
|
+
#the timeout didnt run - and it shouldnt so dont do anything.
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
109
153
|
it "should be able to stop." do
|
110
154
|
$appserver.stop
|
111
155
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knjappserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,23 +9,23 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-11-15 00:00:00.000000000 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: knjrbfw
|
17
|
-
requirement: &
|
17
|
+
requirement: &19883700 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.0.
|
22
|
+
version: 0.0.8
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *19883700
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: erubis
|
28
|
-
requirement: &
|
28
|
+
requirement: &19796260 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *19796260
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: knjdbrevision
|
39
|
-
requirement: &
|
39
|
+
requirement: &19795540 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,21 @@ dependencies:
|
|
44
44
|
version: 0.0.2
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *19795540
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: mail
|
50
|
+
requirement: &19794800 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *19794800
|
48
59
|
- !ruby/object:Gem::Dependency
|
49
60
|
name: rspec
|
50
|
-
requirement: &
|
61
|
+
requirement: &19794080 !ruby/object:Gem::Requirement
|
51
62
|
none: false
|
52
63
|
requirements:
|
53
64
|
- - ~>
|
@@ -55,10 +66,10 @@ dependencies:
|
|
55
66
|
version: 2.3.0
|
56
67
|
type: :development
|
57
68
|
prerelease: false
|
58
|
-
version_requirements: *
|
69
|
+
version_requirements: *19794080
|
59
70
|
- !ruby/object:Gem::Dependency
|
60
71
|
name: bundler
|
61
|
-
requirement: &
|
72
|
+
requirement: &19793340 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ~>
|
@@ -66,10 +77,10 @@ dependencies:
|
|
66
77
|
version: 1.0.0
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *19793340
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: jeweler
|
72
|
-
requirement: &
|
83
|
+
requirement: &19792580 !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
85
|
requirements:
|
75
86
|
- - ~>
|
@@ -77,10 +88,10 @@ dependencies:
|
|
77
88
|
version: 1.6.3
|
78
89
|
type: :development
|
79
90
|
prerelease: false
|
80
|
-
version_requirements: *
|
91
|
+
version_requirements: *19792580
|
81
92
|
- !ruby/object:Gem::Dependency
|
82
93
|
name: rcov
|
83
|
-
requirement: &
|
94
|
+
requirement: &19791860 !ruby/object:Gem::Requirement
|
84
95
|
none: false
|
85
96
|
requirements:
|
86
97
|
- - ! '>='
|
@@ -88,10 +99,21 @@ dependencies:
|
|
88
99
|
version: '0'
|
89
100
|
type: :development
|
90
101
|
prerelease: false
|
91
|
-
version_requirements: *
|
102
|
+
version_requirements: *19791860
|
92
103
|
- !ruby/object:Gem::Dependency
|
93
104
|
name: sqlite3
|
94
|
-
requirement: &
|
105
|
+
requirement: &19791040 !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *19791040
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: json
|
116
|
+
requirement: &19790320 !ruby/object:Gem::Requirement
|
95
117
|
none: false
|
96
118
|
requirements:
|
97
119
|
- - ! '>='
|
@@ -99,7 +121,7 @@ dependencies:
|
|
99
121
|
version: '0'
|
100
122
|
type: :development
|
101
123
|
prerelease: false
|
102
|
-
version_requirements: *
|
124
|
+
version_requirements: *19790320
|
103
125
|
description: Which supports a lot of undocumented stuff.
|
104
126
|
email: k@spernj.org
|
105
127
|
executables:
|
@@ -131,15 +153,20 @@ files:
|
|
131
153
|
- lib/include/class_httpresp.rb
|
132
154
|
- lib/include/class_httpserver.rb
|
133
155
|
- lib/include/class_httpsession.rb
|
156
|
+
- lib/include/class_httpsession_contentgroup.rb
|
134
157
|
- lib/include/class_httpsession_knjengine.rb
|
135
158
|
- lib/include/class_httpsession_mongrel.rb
|
136
159
|
- lib/include/class_httpsession_webrick.rb
|
137
160
|
- lib/include/class_knjappserver.rb
|
138
161
|
- lib/include/class_knjappserver_cleaner.rb
|
162
|
+
- lib/include/class_knjappserver_cmdline.rb
|
139
163
|
- lib/include/class_knjappserver_errors.rb
|
140
164
|
- lib/include/class_knjappserver_logging.rb
|
141
165
|
- lib/include/class_knjappserver_mailing.rb
|
166
|
+
- lib/include/class_knjappserver_sessions.rb
|
142
167
|
- lib/include/class_knjappserver_threadding.rb
|
168
|
+
- lib/include/class_knjappserver_threadding_timeout.rb
|
169
|
+
- lib/include/class_knjappserver_translations.rb
|
143
170
|
- lib/include/class_knjappserver_web.rb
|
144
171
|
- lib/include/class_log.rb
|
145
172
|
- lib/include/class_log_access.rb
|
@@ -151,9 +178,16 @@ files:
|
|
151
178
|
- lib/include/gettext_funcs.rb
|
152
179
|
- lib/include/magic_methods.rb
|
153
180
|
- lib/knjappserver.rb
|
181
|
+
- lib/pages/benchmark.rhtml
|
182
|
+
- lib/pages/benchmark_print.rhtml
|
183
|
+
- lib/pages/benchmark_simple.rhtml
|
184
|
+
- lib/pages/benchmark_threadded_content.rhtml
|
154
185
|
- lib/pages/logs_latest.rhtml
|
155
186
|
- lib/pages/logs_show.rhtml
|
156
187
|
- lib/pages/spec.rhtml
|
188
|
+
- lib/pages/spec_test_multiple_clients.rhtml
|
189
|
+
- lib/pages/spec_threadded_content.rhtml
|
190
|
+
- lib/scripts/benchmark.rb
|
157
191
|
- spec/knjappserver_spec.rb
|
158
192
|
- spec/spec_helper.rb
|
159
193
|
has_rdoc: true
|
@@ -172,7 +206,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
172
206
|
version: '0'
|
173
207
|
segments:
|
174
208
|
- 0
|
175
|
-
hash:
|
209
|
+
hash: -4377496633346000305
|
176
210
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
211
|
none: false
|
178
212
|
requirements:
|