knjrbfw 0.0.35 → 0.0.36
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|