knjappserver 0.0.15 → 0.0.16
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|