knjrbfw 0.0.35 → 0.0.36
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/VERSION +1 -1
- data/knjrbfw.gemspec +5 -2
- data/lib/knj/datarow.rb +9 -2
- data/lib/knj/gtk2.rb +29 -13
- data/lib/knj/gtk2_tv.rb +1 -0
- data/lib/knj/http2.rb +6 -6
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_sqlspecs.rb +5 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_sqlspecs.rb +5 -0
- data/lib/knj/knjdb/libknjdb.rb +32 -0
- data/lib/knj/knjdb/sqlspecs.rb +5 -0
- data/lib/knj/objects.rb +1 -0
- data/lib/knj/objects/objects_sqlhelper.rb +1 -1
- data/lib/knj/strings.rb +25 -0
- metadata +6 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.36
|
data/knjrbfw.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{knjrbfw}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.36"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date = %q{2012-05-
|
12
|
+
s.date = %q{2012-05-21}
|
13
13
|
s.description = %q{Including stuff for HTTP, SSH and much more.}
|
14
14
|
s.email = %q{k@spernj.org}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -166,16 +166,19 @@ Gem::Specification.new do |s|
|
|
166
166
|
"lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb",
|
167
167
|
"lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb",
|
168
168
|
"lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb",
|
169
|
+
"lib/knj/knjdb/drivers/mysql/knjdb_mysql_sqlspecs.rb",
|
169
170
|
"lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb",
|
170
171
|
"lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb",
|
171
172
|
"lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb",
|
172
173
|
"lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb",
|
174
|
+
"lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_sqlspecs.rb",
|
173
175
|
"lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb",
|
174
176
|
"lib/knj/knjdb/libknjdb.rb",
|
175
177
|
"lib/knj/knjdb/libknjdb_java_sqlite3.rb",
|
176
178
|
"lib/knj/knjdb/libknjdb_row.rb",
|
177
179
|
"lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb",
|
178
180
|
"lib/knj/knjdb/revision.rb",
|
181
|
+
"lib/knj/knjdb/sqlspecs.rb",
|
179
182
|
"lib/knj/kvm.rb",
|
180
183
|
"lib/knj/libqt.rb",
|
181
184
|
"lib/knj/libqt_window.rb",
|
data/lib/knj/datarow.rb
CHANGED
@@ -201,15 +201,22 @@ class Knj::Datarow
|
|
201
201
|
return @ob.get_try(self, colname, classname)
|
202
202
|
end
|
203
203
|
|
204
|
-
methodname_html = "#{methodname
|
204
|
+
methodname_html = "#{methodname}_html".to_sym
|
205
205
|
define_method(methodname_html) do |*args|
|
206
|
-
obj = self.
|
206
|
+
obj = self.__send__(methodname)
|
207
207
|
return @ob.events.call(:no_html, classname) if !obj
|
208
208
|
|
209
209
|
raise "Class '#{classname}' does not have a 'html'-method." if !obj.respond_to?(:html)
|
210
210
|
return obj.html(*args)
|
211
211
|
end
|
212
212
|
|
213
|
+
methodname_name = "#{methodname}_name".to_sym
|
214
|
+
define_method(methodname_name) do |*args|
|
215
|
+
obj = self.__send__(methodname)
|
216
|
+
return @ob.events.call(:no_name, classname) if !obj
|
217
|
+
return obj.name(*args)
|
218
|
+
end
|
219
|
+
|
213
220
|
self.joined_tables(
|
214
221
|
classname => {
|
215
222
|
:where => {
|
data/lib/knj/gtk2.rb
CHANGED
@@ -27,7 +27,7 @@ module Knj::Gtk2
|
|
27
27
|
elsif paras.is_a?(String) or paras.is_a?(Integer)
|
28
28
|
msg = paras
|
29
29
|
else
|
30
|
-
raise "Cant handle the parameters:
|
30
|
+
raise "Cant handle the parameters: '#{paras.class.name}'."
|
31
31
|
end
|
32
32
|
|
33
33
|
type = "info" if !type
|
@@ -81,13 +81,13 @@ module Knj::Gtk2
|
|
81
81
|
if element.respond_to?("id") and element.respond_to?("title")
|
82
82
|
tv.append([count.to_s, element.title])
|
83
83
|
else
|
84
|
-
raise "Could not handle object in array:
|
84
|
+
raise "Could not handle object in array: '#{element.class.name}'."
|
85
85
|
end
|
86
86
|
|
87
87
|
count += 1
|
88
88
|
end
|
89
89
|
else
|
90
|
-
raise "Unhandeled class:
|
90
|
+
raise "Unhandeled class: '#{items.class.name}'."
|
91
91
|
end
|
92
92
|
|
93
93
|
sw = Gtk::ScrolledWindow.new
|
@@ -95,7 +95,7 @@ module Knj::Gtk2
|
|
95
95
|
|
96
96
|
box.pack_start(sw)
|
97
97
|
else
|
98
|
-
raise "No such mode: "
|
98
|
+
raise "No such mode: '#{type}'."
|
99
99
|
end
|
100
100
|
|
101
101
|
if button1 and button2
|
@@ -104,12 +104,12 @@ module Knj::Gtk2
|
|
104
104
|
dialog = Gtk::Dialog.new(title, nil, Gtk::Dialog::MODAL, button1)
|
105
105
|
end
|
106
106
|
|
107
|
-
if image
|
108
|
-
box.pack_start(image)
|
109
|
-
end
|
107
|
+
box.pack_start(image) if image
|
110
108
|
|
111
109
|
if msg
|
112
|
-
|
110
|
+
label = Gtk::Label.new(msg)
|
111
|
+
label.selectable = true
|
112
|
+
box.pack_start(label)
|
113
113
|
end
|
114
114
|
|
115
115
|
box.spacing = 15
|
@@ -123,7 +123,23 @@ module Knj::Gtk2
|
|
123
123
|
tv.grab_focus
|
124
124
|
end
|
125
125
|
|
126
|
-
|
126
|
+
if paras.is_a?(Hash) and paras["transient_for"]
|
127
|
+
dialog.transient_for = paras["transient_for"]
|
128
|
+
end
|
129
|
+
|
130
|
+
do_run = true
|
131
|
+
do_run = false if paras.is_a?(Hash) and paras.key?("run") and !paras["run"]
|
132
|
+
|
133
|
+
if do_run
|
134
|
+
response = dialog.run
|
135
|
+
else
|
136
|
+
#Connect the one button to close the window.
|
137
|
+
dialog.children[0].children[1].children[0].signal_connect("clicked") do
|
138
|
+
dialog.destroy
|
139
|
+
end
|
140
|
+
|
141
|
+
return false
|
142
|
+
end
|
127
143
|
|
128
144
|
if type == "list"
|
129
145
|
sel = tv.sel
|
@@ -153,7 +169,7 @@ module Knj::Gtk2
|
|
153
169
|
elsif response == Gtk::Dialog::RESPONSE_CLOSE or response == Gtk::Dialog::RESPONSE_DELETE_EVENT
|
154
170
|
return close_sig
|
155
171
|
else
|
156
|
-
raise "Unknown response:
|
172
|
+
raise "Unknown response: '#{response}'."
|
157
173
|
end
|
158
174
|
end
|
159
175
|
|
@@ -191,7 +207,7 @@ module Knj::Gtk2
|
|
191
207
|
elsif item["name"][0..2] == "che"
|
192
208
|
item["type"] = "check"
|
193
209
|
else
|
194
|
-
raise "Could not figure out type for:
|
210
|
+
raise "Could not figure out type for: '#{item["name"]}'."
|
195
211
|
end
|
196
212
|
end
|
197
213
|
|
@@ -238,7 +254,7 @@ module Knj::Gtk2
|
|
238
254
|
"object" => cb
|
239
255
|
}
|
240
256
|
else
|
241
|
-
raise "Unknown type:
|
257
|
+
raise "Unknown type: '#{item["type"]}'."
|
242
258
|
end
|
243
259
|
|
244
260
|
|
@@ -286,7 +302,7 @@ module Knj::Gtk2
|
|
286
302
|
sel = object.sel
|
287
303
|
return sel["text"]
|
288
304
|
else
|
289
|
-
raise "Unknown object: #{object.class.name}"
|
305
|
+
raise "Unknown object: '#{object.class.name}'."
|
290
306
|
end
|
291
307
|
end
|
292
308
|
end
|
data/lib/knj/gtk2_tv.rb
CHANGED
data/lib/knj/http2.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require "#{$knjpath}web"
|
2
|
-
require "socket"
|
3
|
-
|
4
1
|
#This class tries to emulate a browser in Ruby without any visual stuff. Remember cookies, keep sessions alive, reset connections according to keep-alive rules and more.
|
5
2
|
#===Examples
|
6
3
|
# Knj::Http2.new(:host => "www.somedomain.com", :port => 80, :ssl => false, :debug => false) do |http|
|
@@ -16,6 +13,8 @@ class Knj::Http2
|
|
16
13
|
attr_reader :cookies, :args
|
17
14
|
|
18
15
|
def initialize(args = {})
|
16
|
+
require "#{$knjpath}web"
|
17
|
+
|
19
18
|
args = {:host => args} if args.is_a?(String)
|
20
19
|
raise "Arguments wasnt a hash." if !args.is_a?(Hash)
|
21
20
|
|
@@ -99,6 +98,7 @@ class Knj::Http2
|
|
99
98
|
|
100
99
|
#Reconnects to the host.
|
101
100
|
def reconnect
|
101
|
+
require "socket"
|
102
102
|
print "Http2: Reconnect.\n" if @debug
|
103
103
|
|
104
104
|
#Reset variables.
|
@@ -272,13 +272,13 @@ class Knj::Http2
|
|
272
272
|
|
273
273
|
if val.class.name == "Tempfile" and val.respond_to?("original_filename")
|
274
274
|
praw << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{val.original_filename}\";#{@nl}"
|
275
|
-
praw << "Content-Length: #{val.bytesize}#{@nl}"
|
275
|
+
praw << "Content-Length: #{val.to_s.bytesize}#{@nl}"
|
276
276
|
elsif val.is_a?(Hash) and val[:filename]
|
277
277
|
praw << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{val[:filename]}\";#{@nl}"
|
278
|
-
praw << "Content-Length: #{val[:content].bytesize}#{@nl}"
|
278
|
+
praw << "Content-Length: #{val[:content].to_s.bytesize}#{@nl}"
|
279
279
|
else
|
280
280
|
praw << "Content-Disposition: form-data; name=\"#{key}\";#{@nl}"
|
281
|
-
praw << "Content-Length: #{val.bytesize}#{@nl}"
|
281
|
+
praw << "Content-Length: #{val.to_s.bytesize}#{@nl}"
|
282
282
|
end
|
283
283
|
|
284
284
|
praw << "Content-Type: text/plain#{@nl}"
|
data/lib/knj/knjdb/libknjdb.rb
CHANGED
@@ -299,6 +299,9 @@ class Knj::Db
|
|
299
299
|
sql << ", "
|
300
300
|
end
|
301
301
|
|
302
|
+
#Convert dates to valid dbstr.
|
303
|
+
value = self.date_out(value) if value.is_a?(Knj::Datet) or value.is_a?(Time)
|
304
|
+
|
302
305
|
sql << "#{driver.escape_col}#{key.to_s}#{driver.escape_col} = "
|
303
306
|
sql << "#{driver.escape_val}#{driver.escape(value.to_s)}#{driver.escape_val}"
|
304
307
|
end
|
@@ -596,11 +599,29 @@ class Knj::Db
|
|
596
599
|
return @enc_col
|
597
600
|
end
|
598
601
|
|
602
|
+
#Returns a string which can be used in SQL with the current driver.
|
603
|
+
#===Examples
|
604
|
+
# str = db.date_out(Time.now) #=> "2012-05-20 22:06:09"
|
599
605
|
def date_out(date_obj = Knj::Datet.new, args = {})
|
606
|
+
conn_exec do |driver|
|
607
|
+
if driver.respond_to?(:date_out)
|
608
|
+
return driver.date_out(date_obj, args)
|
609
|
+
end
|
610
|
+
end
|
611
|
+
|
600
612
|
return Knj::Datet.in(date_obj).dbstr(args)
|
601
613
|
end
|
602
614
|
|
615
|
+
#Takes a valid date-db-string and converts it into a Knj::Datet.
|
616
|
+
#===Examples
|
617
|
+
# db.date_in('2012-05-20 22:06:09') #=> 2012-05-20 22:06:09 +0200
|
603
618
|
def date_in(date_obj)
|
619
|
+
conn_exec do |driver|
|
620
|
+
if driver.respond_to?(:date_in)
|
621
|
+
return driver.date_in(date_obj)
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
604
625
|
return Knj::Datet.in(date_obj)
|
605
626
|
end
|
606
627
|
|
@@ -642,6 +663,17 @@ class Knj::Db
|
|
642
663
|
return @indexes
|
643
664
|
end
|
644
665
|
|
666
|
+
def sqlspecs
|
667
|
+
if !@sqlspecs
|
668
|
+
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/knjdb_#{@opts[:type]}_sqlspecs" if (!@opts.key?(:require) or @opts[:require])
|
669
|
+
@sqlspecs = Kernel.const_get("KnjDB_#{@opts[:type]}".to_sym).const_get(:Sqlspecs).new(
|
670
|
+
:db => self
|
671
|
+
)
|
672
|
+
end
|
673
|
+
|
674
|
+
return @sqlspecs
|
675
|
+
end
|
676
|
+
|
645
677
|
#Proxies the method to the driver.
|
646
678
|
#
|
647
679
|
#===Examples
|
data/lib/knj/objects.rb
CHANGED
@@ -23,6 +23,7 @@ class Knj::Objects
|
|
23
23
|
#Set up various events.
|
24
24
|
@events = Knj::Event_handler.new
|
25
25
|
@events.add_event(:name => :no_html, :connections_max => 1)
|
26
|
+
@events.add_event(:name => :no_name, :connections_max => 1)
|
26
27
|
@events.add_event(:name => :no_date, :connections_max => 1)
|
27
28
|
@events.add_event(:name => :missing_class, :connections_max => 1)
|
28
29
|
@events.add_event(:name => :require_class, :connections_max => 1)
|
@@ -333,7 +333,7 @@ class Knj::Objects
|
|
333
333
|
sql_where << " AND DATE_FORMAT(#{table}`#{db.esc_col(match[1])}`, '%d %m %Y') = DATE_FORMAT('#{db.esc(val.dbstr)}', '%d %m %Y')"
|
334
334
|
end
|
335
335
|
elsif match[2] == "month"
|
336
|
-
sql_where << " AND
|
336
|
+
sql_where << " AND #{db.sqlspecs.strftime("%m %Y", "#{table}`#{db.esc_col(match[1])}`")} = #{db.sqlspecs.strftime("%m %Y", "'#{db.esc(val.dbstr)}'")}"
|
337
337
|
elsif match[2] == "year"
|
338
338
|
sql_where << " AND DATE_FORMAT(#{table}`#{db.esc_col(match[1])}`, '%Y') = DATE_FORMAT('#{db.esc(val.dbstr)}', '%Y')"
|
339
339
|
elsif match[2] == "from" or match[2] == "above"
|
data/lib/knj/strings.rb
CHANGED
@@ -260,4 +260,29 @@ module Knj::Strings
|
|
260
260
|
return parts[0].to_s
|
261
261
|
end
|
262
262
|
end
|
263
|
+
|
264
|
+
#Returns a human readable time-string from a given number of seconds.
|
265
|
+
def self.secs_to_human_time_str(secs)
|
266
|
+
secs = secs.to_i
|
267
|
+
hours = (secs.to_f / 3600.0).floor.to_i
|
268
|
+
secs = secs - (hours * 3600)
|
269
|
+
|
270
|
+
mins = (secs.to_f / 60).floor.to_i
|
271
|
+
secs = secs - (mins * 60)
|
272
|
+
|
273
|
+
return "#{"%02d" % hours}:#{"%02d" % mins}:#{"%02d" % secs}"
|
274
|
+
end
|
275
|
+
|
276
|
+
#Turns a human readable time-string into a number of seconds.
|
277
|
+
def self.human_time_str_to_secs(str)
|
278
|
+
match = str.match(/^\s*(\d+)\s*:\s*(\d+)\s*:\s*(\d+)\s*/)
|
279
|
+
raise "Could not match string: '#{str}'." if !match
|
280
|
+
|
281
|
+
hours = match[1].to_i
|
282
|
+
minutes = match[2].to_i
|
283
|
+
secs = match[3].to_i
|
284
|
+
|
285
|
+
total = (hours * 3600) + (minutes * 60) + secs
|
286
|
+
return total
|
287
|
+
end
|
263
288
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: knjrbfw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.36
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-05-
|
13
|
+
date: 2012-05-21 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -260,16 +260,19 @@ files:
|
|
260
260
|
- lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb
|
261
261
|
- lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb
|
262
262
|
- lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb
|
263
|
+
- lib/knj/knjdb/drivers/mysql/knjdb_mysql_sqlspecs.rb
|
263
264
|
- lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb
|
264
265
|
- lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb
|
265
266
|
- lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb
|
266
267
|
- lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb
|
268
|
+
- lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_sqlspecs.rb
|
267
269
|
- lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb
|
268
270
|
- lib/knj/knjdb/libknjdb.rb
|
269
271
|
- lib/knj/knjdb/libknjdb_java_sqlite3.rb
|
270
272
|
- lib/knj/knjdb/libknjdb_row.rb
|
271
273
|
- lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb
|
272
274
|
- lib/knj/knjdb/revision.rb
|
275
|
+
- lib/knj/knjdb/sqlspecs.rb
|
273
276
|
- lib/knj/kvm.rb
|
274
277
|
- lib/knj/libqt.rb
|
275
278
|
- lib/knj/libqt_window.rb
|
@@ -371,7 +374,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
371
374
|
requirements:
|
372
375
|
- - ">="
|
373
376
|
- !ruby/object:Gem::Version
|
374
|
-
hash:
|
377
|
+
hash: -15958701086613038
|
375
378
|
segments:
|
376
379
|
- 0
|
377
380
|
version: "0"
|