knjappserver 0.0.6
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/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +18 -0
- data/Gemfile.lock +39 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/bin/check_running.rb +71 -0
- data/bin/knjappserver_start.rb +50 -0
- data/knjappserver.gemspec +107 -0
- data/lib/conf/README +1 -0
- data/lib/conf/conf_example.rb +109 -0
- data/lib/conf/conf_vars_example.rb +3 -0
- data/lib/files/database_schema.rb +111 -0
- data/lib/files/run/README +1 -0
- data/lib/include/class_customio.rb +21 -0
- data/lib/include/class_erbhandler.rb +36 -0
- data/lib/include/class_httpresp.rb +91 -0
- data/lib/include/class_httpserver.rb +91 -0
- data/lib/include/class_httpsession.rb +350 -0
- data/lib/include/class_httpsession_knjengine.rb +189 -0
- data/lib/include/class_httpsession_mongrel.rb +75 -0
- data/lib/include/class_httpsession_webrick.rb +75 -0
- data/lib/include/class_knjappserver.rb +455 -0
- data/lib/include/class_knjappserver_cleaner.rb +109 -0
- data/lib/include/class_knjappserver_errors.rb +117 -0
- data/lib/include/class_knjappserver_logging.rb +272 -0
- data/lib/include/class_knjappserver_mailing.rb +97 -0
- data/lib/include/class_knjappserver_threadding.rb +87 -0
- data/lib/include/class_knjappserver_web.rb +23 -0
- data/lib/include/class_log.rb +81 -0
- data/lib/include/class_log_access.rb +103 -0
- data/lib/include/class_log_data.rb +42 -0
- data/lib/include/class_log_data_link.rb +16 -0
- data/lib/include/class_log_data_value.rb +34 -0
- data/lib/include/class_log_link.rb +51 -0
- data/lib/include/class_session.rb +43 -0
- data/lib/include/gettext_funcs.rb +10 -0
- data/lib/include/magic_methods.rb +59 -0
- data/lib/knjappserver.rb +1 -0
- data/lib/pages/logs_latest.rhtml +57 -0
- data/lib/pages/logs_show.rhtml +32 -0
- data/lib/pages/spec.rhtml +10 -0
- data/spec/knjappserver_spec.rb +110 -0
- data/spec/spec_helper.rb +12 -0
- metadata +188 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
class Knjappserver::Log_data_link < Knj::Datarow
|
2
|
+
def self.list(d)
|
3
|
+
sql = "SELECT * FROM #{table} WHERE 1=1"
|
4
|
+
|
5
|
+
ret = list_helper(d)
|
6
|
+
d.args.each do |key, val|
|
7
|
+
raise "Invalid key: #{key}."
|
8
|
+
end
|
9
|
+
|
10
|
+
sql += ret[:sql_where]
|
11
|
+
sql += ret[:sql_order]
|
12
|
+
sql += ret[:sql_limit]
|
13
|
+
|
14
|
+
return d.ob.list_bysql(:Log_data_link, sql)
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Knjappserver::Log_data_value < Knj::Datarow
|
2
|
+
def self.list(d)
|
3
|
+
sql = "SELECT * FROM #{table} WHERE 1=1"
|
4
|
+
|
5
|
+
ret = list_helper(d)
|
6
|
+
d.args.each do |key, val|
|
7
|
+
raise "Invalid key: #{key}."
|
8
|
+
end
|
9
|
+
|
10
|
+
sql += ret[:sql_where]
|
11
|
+
sql += ret[:sql_order]
|
12
|
+
sql += ret[:sql_limit]
|
13
|
+
|
14
|
+
return d.ob.list_bysql(:Log_data_value, sql)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.force(d, value)
|
18
|
+
value_obj = d.ob.get_by(:Log_data_value, {
|
19
|
+
"value" => value.to_s
|
20
|
+
})
|
21
|
+
|
22
|
+
if !value_obj
|
23
|
+
value_obj = d.ob.add(:Log_data_value, {"value" => value})
|
24
|
+
end
|
25
|
+
|
26
|
+
return value_obj
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.force_id(d, value)
|
30
|
+
value_obj = d.db.query("SELECT * FROM Log_data_value WHERE value = '#{d.db.esc(value)}' LIMIT 1").fetch
|
31
|
+
return value_obj[:id].to_i if value_obj
|
32
|
+
return d.db.insert(:Log_data_value, {:value => value}, {:return_id => true}).to_i
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class Knjappserver::Log_link < Knj::Datarow
|
2
|
+
has_one [
|
3
|
+
{:class => :Log, :col => :log_id}
|
4
|
+
]
|
5
|
+
|
6
|
+
def self.list(d)
|
7
|
+
sql = "SELECT * FROM #{table} WHERE 1=1"
|
8
|
+
|
9
|
+
ret = list_helper(d)
|
10
|
+
d.args.each do |key, val|
|
11
|
+
case key
|
12
|
+
when "object_class"
|
13
|
+
data_val = d.db.single(:Log_data_value, {"value" => val})
|
14
|
+
return [] if !data_val #if this data-value cannot be found, nothing has been logged for the object. So just return empty array here and skip the rest.
|
15
|
+
sql += " AND object_class_value_id = '#{d.db.esc(data_val[:id])}'"
|
16
|
+
else
|
17
|
+
raise "Invalid key: #{key}."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
sql += ret[:sql_where]
|
22
|
+
sql += ret[:sql_order]
|
23
|
+
sql += ret[:sql_limit]
|
24
|
+
|
25
|
+
return d.ob.list_bysql(:Log_link, sql)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.add(d)
|
29
|
+
if d.data.has_key?(:object)
|
30
|
+
class_data_id = d.ob.static(:Log_data_value, :force, d.data[:object].class.name)
|
31
|
+
d.data[:object_class_value_id] = class_data_id.id
|
32
|
+
d.data[:object_id] = d.data[:object].id
|
33
|
+
d.data.delete(:object)
|
34
|
+
end
|
35
|
+
|
36
|
+
log = d.ob.get(:Log, d.data[:log_id]) #throws exception if it doesnt exist.
|
37
|
+
end
|
38
|
+
|
39
|
+
def object(ob_use)
|
40
|
+
begin
|
41
|
+
class_name = ob.get(:Log_data_value, self[:object_class_value_id])[:value].split("::").last
|
42
|
+
return ob_use.get(class_name, self[:object_id])
|
43
|
+
rescue Knj::Errors::NotFound
|
44
|
+
return false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def object_class
|
49
|
+
return ob.get(:Log_data_value, self[:object_class_value_id])[:value]
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class Knjappserver::Session < Knj::Datarow
|
2
|
+
attr_reader :edata
|
3
|
+
attr_accessor :sess_data
|
4
|
+
|
5
|
+
def initialize(d)
|
6
|
+
@edata = {}
|
7
|
+
super(d)
|
8
|
+
|
9
|
+
if self[:sess_data].to_s.length > 0
|
10
|
+
begin
|
11
|
+
@sess_data = Marshal.load(Base64.decode64(self[:sess_data]))
|
12
|
+
rescue ArgumentError
|
13
|
+
@sess_data = {}
|
14
|
+
end
|
15
|
+
else
|
16
|
+
@sess_data = {}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.list(d)
|
21
|
+
sql = "SELECT * FROM #{table} WHERE 1=1"
|
22
|
+
|
23
|
+
ret = list_helper(d)
|
24
|
+
d.args.each do |key, val|
|
25
|
+
raise "Invalid key: #{key}."
|
26
|
+
end
|
27
|
+
|
28
|
+
sql += ret[:sql_where]
|
29
|
+
sql += ret[:sql_order]
|
30
|
+
sql += ret[:sql_limit]
|
31
|
+
|
32
|
+
return d.ob.list_bysql(:Session, sql)
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.add(d)
|
36
|
+
d.data[:date_added] = Knj::Datet.new.dbstr if !d.data[:date_added]
|
37
|
+
end
|
38
|
+
|
39
|
+
def flush
|
40
|
+
m_newdata = Base64.encode64(Marshal.dump(@sess_data))
|
41
|
+
self[:sess_data] = m_newdata
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
def _(str)
|
4
|
+
kas = _kas
|
5
|
+
return str if !kas or !_session
|
6
|
+
_session[:locale] = _kas.config[:locale_default] if !_session[:locale] and _kas.config[:locale_default]
|
7
|
+
raise "No locale set for session and ':locale_default' not set in config." if !_session[:locale]
|
8
|
+
str = kas.gettext.trans(_session[:locale], str)
|
9
|
+
return str
|
10
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
def _cookie
|
2
|
+
return Thread.current[:knjappserver][:cookie] if Thread.current[:knjappserver]
|
3
|
+
end
|
4
|
+
|
5
|
+
def _get
|
6
|
+
return Thread.current[:knjappserver][:get] if Thread.current[:knjappserver]
|
7
|
+
end
|
8
|
+
|
9
|
+
def _post
|
10
|
+
return Thread.current[:knjappserver][:post] if Thread.current[:knjappserver]
|
11
|
+
end
|
12
|
+
|
13
|
+
def _session
|
14
|
+
return Thread.current[:knjappserver][:session].sess_data if Thread.current[:knjappserver] and Thread.current[:knjappserver][:session]
|
15
|
+
end
|
16
|
+
|
17
|
+
def _session_hash
|
18
|
+
return Thread.current[:knjappserver][:session_hash] if Thread.current[:knjappserver]
|
19
|
+
end
|
20
|
+
|
21
|
+
def _session_obj
|
22
|
+
return Thread.current[:knjappserver][:session] if Thread.current[:knjappserver]
|
23
|
+
end
|
24
|
+
|
25
|
+
def _server
|
26
|
+
return Thread.current[:knjappserver][:meta] if Thread.current[:knjappserver]
|
27
|
+
end
|
28
|
+
|
29
|
+
def _httpsession
|
30
|
+
return Thread.current[:knjappserver][:httpsession] if Thread.current[:knjappserver]
|
31
|
+
end
|
32
|
+
|
33
|
+
def _requestdata
|
34
|
+
return Thread.current[:knjappserver] if Thread.current[:knjappserver]
|
35
|
+
end
|
36
|
+
|
37
|
+
def _meta
|
38
|
+
return Thread.current[:knjappserver][:meta] if Thread.current[:knjappserver]
|
39
|
+
end
|
40
|
+
|
41
|
+
def _kas
|
42
|
+
return Thread.current[:knjappserver][:kas] if Thread.current[:knjappserver]
|
43
|
+
return $knjappserver[:knjappserver] if $knjappserver and $knjappserver[:knjappserver]
|
44
|
+
end
|
45
|
+
|
46
|
+
def _vars
|
47
|
+
return Thread.current[:knjappserver][:kas].vars if Thread.current[:knjappserver]
|
48
|
+
return $knjappserver[:knjappserver].vars if $knjappserver and $knjappserver[:knjappserver]
|
49
|
+
end
|
50
|
+
|
51
|
+
def _db
|
52
|
+
return Thread.current[:knjappserver][:db] if Thread.current[:knjappserver]
|
53
|
+
return $db if $db #return the global database object, if we are not running in a thread with one.
|
54
|
+
end
|
55
|
+
|
56
|
+
#This function makes it possible to define methods in ERubis-parsed files (else _buf-variable wouldnt be globally available).
|
57
|
+
def _buf
|
58
|
+
return $stdout
|
59
|
+
end
|
data/lib/knjappserver.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/include/class_knjappserver"
|
@@ -0,0 +1,57 @@
|
|
1
|
+
<%
|
2
|
+
access = _kas.events.call(:check_page_access, {:page => :logs_latest})
|
3
|
+
if !access
|
4
|
+
print _("You do not have access to this page.")
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
ob = _kas.events.call(:ob)
|
9
|
+
%>
|
10
|
+
|
11
|
+
<table class="list">
|
12
|
+
<thead>
|
13
|
+
<tr>
|
14
|
+
<th><%=_("ID")%></th>
|
15
|
+
<th><%=_("Log")%></th>
|
16
|
+
<%if ob%>
|
17
|
+
<th><%=_("Object")%></th>
|
18
|
+
<%end%>
|
19
|
+
</tr>
|
20
|
+
</thead>
|
21
|
+
<tbody>
|
22
|
+
<%
|
23
|
+
logs = _kas.ob.list(:Log, {
|
24
|
+
"orderby" => [["date_saved", "desc"]],
|
25
|
+
"limit" => 200
|
26
|
+
})
|
27
|
+
|
28
|
+
logs.each do |log|
|
29
|
+
%>
|
30
|
+
<tr>
|
31
|
+
<td>
|
32
|
+
<a href="logs_show.rhtml?log_id=<%=log.id%>"><%=log.id%></a>
|
33
|
+
</td>
|
34
|
+
<td>
|
35
|
+
<%=log.first_line%>
|
36
|
+
</td>
|
37
|
+
<%if ob%>
|
38
|
+
<td>
|
39
|
+
<%=log.objects_html(ob)%>
|
40
|
+
</td>
|
41
|
+
<%end%>
|
42
|
+
</tr>
|
43
|
+
<%
|
44
|
+
end
|
45
|
+
|
46
|
+
if logs.empty?
|
47
|
+
%>
|
48
|
+
<tr>
|
49
|
+
<td class="error">
|
50
|
+
<%=_("No logs were found.")%>
|
51
|
+
</td>
|
52
|
+
</tr>
|
53
|
+
<%
|
54
|
+
end
|
55
|
+
%>
|
56
|
+
</tbody>
|
57
|
+
</table>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<%
|
2
|
+
access = _kas.events.call(:check_page_access, {:page => :logs_show})
|
3
|
+
if !access
|
4
|
+
print _("You do not have access to this page.")
|
5
|
+
exit
|
6
|
+
end
|
7
|
+
|
8
|
+
ob = _kas.events.call(:ob)
|
9
|
+
log = _kas.ob.get(:Log, _get["log_id"])
|
10
|
+
%>
|
11
|
+
|
12
|
+
<table class="form">
|
13
|
+
<%
|
14
|
+
print Knj::Web.inputs([{
|
15
|
+
:title => _("Date"),
|
16
|
+
:type => :info,
|
17
|
+
:value => Knj::Datet.in(log[:date_saved]).out
|
18
|
+
}])
|
19
|
+
|
20
|
+
if ob
|
21
|
+
print Knj::Web.input(
|
22
|
+
:title => _("Objects"),
|
23
|
+
:type => :info,
|
24
|
+
:value => log.objects_html(ob)
|
25
|
+
)
|
26
|
+
end
|
27
|
+
%>
|
28
|
+
</table>
|
29
|
+
|
30
|
+
<div style="padding-top: 10px;">
|
31
|
+
<%=log.text%>
|
32
|
+
</div>
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "Knjappserver" do
|
4
|
+
it "should be able to start a sample-server" do
|
5
|
+
require "rubygems"
|
6
|
+
require "knjappserver"
|
7
|
+
require "knjrbfw"
|
8
|
+
require "knj/autoload"
|
9
|
+
require "tmpdir"
|
10
|
+
|
11
|
+
db_path = "#{Dir.tmpdir}/knjappserver_rspec.sqlite3"
|
12
|
+
File.unlink(db_path) if File.exists?(db_path)
|
13
|
+
|
14
|
+
db = Knj::Db.new(
|
15
|
+
:type => "sqlite3",
|
16
|
+
:path => db_path,
|
17
|
+
:return_keys => "symbols"
|
18
|
+
)
|
19
|
+
|
20
|
+
erbhandler = Knjappserver::ERBHandler.new
|
21
|
+
|
22
|
+
$appserver = Knjappserver.new(
|
23
|
+
:debug => false,
|
24
|
+
:autorestart => false,
|
25
|
+
:autoload => false,
|
26
|
+
:verbose => false,
|
27
|
+
:title => "knjTasks",
|
28
|
+
:port => 1515,
|
29
|
+
:host => "0.0.0.0",
|
30
|
+
:default_page => "index.rhtml",
|
31
|
+
:doc_root => "#{File.dirname(__FILE__)}/../lib/pages",
|
32
|
+
:hostname => false,
|
33
|
+
:default_filetype => "text/html",
|
34
|
+
:engine_knjengine => true,
|
35
|
+
:locales_gettext_funcs => true,
|
36
|
+
:locale_default => "da_DK",
|
37
|
+
:max_requests_working => 5,
|
38
|
+
:filetypes => {
|
39
|
+
:jpg => "image/jpeg",
|
40
|
+
:gif => "image/gif",
|
41
|
+
:png => "image/png",
|
42
|
+
:html => "text/html",
|
43
|
+
:htm => "text/html",
|
44
|
+
:rhtml => "text/html",
|
45
|
+
:css => "text/css",
|
46
|
+
:xml => "text/xml",
|
47
|
+
:js => "text/javascript"
|
48
|
+
},
|
49
|
+
:handlers => [
|
50
|
+
{
|
51
|
+
:file_ext => "rhtml",
|
52
|
+
:callback => erbhandler.method(:erb_handler)
|
53
|
+
},{
|
54
|
+
:path => "/fckeditor",
|
55
|
+
:mount => "/usr/share/fckeditor"
|
56
|
+
}
|
57
|
+
],
|
58
|
+
:db => db
|
59
|
+
)
|
60
|
+
|
61
|
+
$appserver.vars[:test] = "kasper"
|
62
|
+
$appserver.define_magic_var(:_testvar1, "Kasper")
|
63
|
+
$appserver.define_magic_var(:_testvar2, "Johansen")
|
64
|
+
$appserver.update_db
|
65
|
+
$appserver.start
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should be able to mount FCKeditor dir to /usr/share/fckeditor" do
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should be able to handle a GET-request." do
|
73
|
+
$http = Knj::Http.new("host" => "localhost", "port" => 1515)
|
74
|
+
data = $http.get("/spec.rhtml")
|
75
|
+
raise "Unexpected HTML: '#{data["data"]}'." if data["data"].to_s.strip != "Test"
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should be able to handle a HEAD-request." do
|
79
|
+
data = $http.head("/spec.rhtml")
|
80
|
+
raise "HEAD-request returned content - it shouldnt?" if data["data"].to_s.length > 0
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should be able to handle a POST-request." do
|
84
|
+
data = $http.post("/spec.rhtml", {
|
85
|
+
"postdata" => "Test post"
|
86
|
+
})
|
87
|
+
raise "POST-request did not return expected data: '#{data["data"]}'." if data["data"].to_s.strip != "Test post"
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should be able to join the server so other tests can be made manually." do
|
91
|
+
begin
|
92
|
+
Timeout.timeout(1) do
|
93
|
+
$appserver.join
|
94
|
+
raise "Appserver didnt join."
|
95
|
+
end
|
96
|
+
rescue Timeout::Error
|
97
|
+
#ignore.
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "it should be able to use the header-methods." do
|
102
|
+
data = $http.get("/spec.rhtml")
|
103
|
+
raise "Normal header data could not be detected." if data["response"].header["testheader"] != "NormalHeader"
|
104
|
+
raise "Raw header data could not be detected." if data["response"].header["testraw"]!= "RawHeader"
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should be able to stop." do
|
108
|
+
$appserver.stop
|
109
|
+
end
|
110
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'knjappserver'
|
5
|
+
|
6
|
+
# Requires supporting files with custom matchers and macros, etc,
|
7
|
+
# in ./support/ and its subdirectories.
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
|
12
|
+
end
|
metadata
ADDED
@@ -0,0 +1,188 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: knjappserver
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Kasper Johansen
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-08-03 00:00:00.000000000 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: knjrbfw
|
17
|
+
requirement: &15241340 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.0.3
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *15241340
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: erubis
|
28
|
+
requirement: &15240780 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *15240780
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: knjdbrevision
|
39
|
+
requirement: &15240140 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 0.0.2
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *15240140
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: rspec
|
50
|
+
requirement: &15239540 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ~>
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 2.3.0
|
56
|
+
type: :development
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *15239540
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: bundler
|
61
|
+
requirement: &15238940 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ~>
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 1.0.0
|
67
|
+
type: :development
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *15238940
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: jeweler
|
72
|
+
requirement: &15238220 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.6.3
|
78
|
+
type: :development
|
79
|
+
prerelease: false
|
80
|
+
version_requirements: *15238220
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: rcov
|
83
|
+
requirement: &15237440 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *15237440
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: sqlite3
|
94
|
+
requirement: &15233840 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *15233840
|
103
|
+
description: Which supports a lot of undocumented stuff.
|
104
|
+
email: k@spernj.org
|
105
|
+
executables:
|
106
|
+
- check_running.rb
|
107
|
+
- knjappserver_start.rb
|
108
|
+
extensions: []
|
109
|
+
extra_rdoc_files:
|
110
|
+
- LICENSE.txt
|
111
|
+
- README.rdoc
|
112
|
+
files:
|
113
|
+
- .document
|
114
|
+
- .rspec
|
115
|
+
- Gemfile
|
116
|
+
- Gemfile.lock
|
117
|
+
- LICENSE.txt
|
118
|
+
- README.rdoc
|
119
|
+
- Rakefile
|
120
|
+
- VERSION
|
121
|
+
- bin/check_running.rb
|
122
|
+
- bin/knjappserver_start.rb
|
123
|
+
- knjappserver.gemspec
|
124
|
+
- lib/conf/README
|
125
|
+
- lib/conf/conf_example.rb
|
126
|
+
- lib/conf/conf_vars_example.rb
|
127
|
+
- lib/files/database_schema.rb
|
128
|
+
- lib/files/run/README
|
129
|
+
- lib/include/class_customio.rb
|
130
|
+
- lib/include/class_erbhandler.rb
|
131
|
+
- lib/include/class_httpresp.rb
|
132
|
+
- lib/include/class_httpserver.rb
|
133
|
+
- lib/include/class_httpsession.rb
|
134
|
+
- lib/include/class_httpsession_knjengine.rb
|
135
|
+
- lib/include/class_httpsession_mongrel.rb
|
136
|
+
- lib/include/class_httpsession_webrick.rb
|
137
|
+
- lib/include/class_knjappserver.rb
|
138
|
+
- lib/include/class_knjappserver_cleaner.rb
|
139
|
+
- lib/include/class_knjappserver_errors.rb
|
140
|
+
- lib/include/class_knjappserver_logging.rb
|
141
|
+
- lib/include/class_knjappserver_mailing.rb
|
142
|
+
- lib/include/class_knjappserver_threadding.rb
|
143
|
+
- lib/include/class_knjappserver_web.rb
|
144
|
+
- lib/include/class_log.rb
|
145
|
+
- lib/include/class_log_access.rb
|
146
|
+
- lib/include/class_log_data.rb
|
147
|
+
- lib/include/class_log_data_link.rb
|
148
|
+
- lib/include/class_log_data_value.rb
|
149
|
+
- lib/include/class_log_link.rb
|
150
|
+
- lib/include/class_session.rb
|
151
|
+
- lib/include/gettext_funcs.rb
|
152
|
+
- lib/include/magic_methods.rb
|
153
|
+
- lib/knjappserver.rb
|
154
|
+
- lib/pages/logs_latest.rhtml
|
155
|
+
- lib/pages/logs_show.rhtml
|
156
|
+
- lib/pages/spec.rhtml
|
157
|
+
- spec/knjappserver_spec.rb
|
158
|
+
- spec/spec_helper.rb
|
159
|
+
has_rdoc: true
|
160
|
+
homepage: http://github.com/kaspernj/knjappserver
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
post_install_message:
|
164
|
+
rdoc_options: []
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ! '>='
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '0'
|
173
|
+
segments:
|
174
|
+
- 0
|
175
|
+
hash: -3661152369845667563
|
176
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
|
+
none: false
|
178
|
+
requirements:
|
179
|
+
- - ! '>='
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
requirements: []
|
183
|
+
rubyforge_project:
|
184
|
+
rubygems_version: 1.6.2
|
185
|
+
signing_key:
|
186
|
+
specification_version: 3
|
187
|
+
summary: A multi-threadded app-web-server.
|
188
|
+
test_files: []
|