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 CHANGED
@@ -1 +1 @@
1
- 0.0.35
1
+ 0.0.36
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.35"
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-19}
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",
@@ -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.to_s}_html".to_sym
204
+ methodname_html = "#{methodname}_html".to_sym
205
205
  define_method(methodname_html) do |*args|
206
- obj = self.send(methodname)
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 => {
@@ -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: " + paras.class.to_s
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: " + element.class.to_s
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: " + items.class.to_s
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: " + type
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
- box.pack_start(Gtk::Label.new(msg))
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
- response = dialog.run
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: " + response.to_s
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: " + item["name"]
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: " + item["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
@@ -12,6 +12,7 @@ module Knj::Gtk2::Tv
12
12
  columns.each do |col_title|
13
13
  renderer = Gtk::CellRendererText.new
14
14
  col = Gtk::TreeViewColumn.new(col_title, renderer, :text => count)
15
+ col.resizable = true
15
16
  tv.append_column(col)
16
17
  count += 1
17
18
  end
@@ -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}"
@@ -0,0 +1,5 @@
1
+ class KnjDB_mysql::Sqlspecs < Knj::Db::Sqlspecs
2
+ def strftime(val, colstr)
3
+ return "DATE_FORMAT(#{colstr}, '#{val}')"
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class KnjDB_sqlite3::Sqlspecs < Knj::Db::Sqlspecs
2
+ def strftime(val, col_str)
3
+ return "STRFTIME('#{val}', SUBSTR(#{col_str}, 0, 20))"
4
+ end
5
+ end
@@ -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
@@ -0,0 +1,5 @@
1
+ class Knj::Db::Sqlspecs
2
+ def initialize(args)
3
+ @args = args
4
+ end
5
+ end
@@ -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 DATE_FORMAT(#{table}`#{db.esc_col(match[1])}`, '%m %Y') = DATE_FORMAT('#{db.esc(val.dbstr)}', '%m %Y')"
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"
@@ -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.35
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-19 00:00:00 +02:00
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: 2601154118778035133
377
+ hash: -15958701086613038
375
378
  segments:
376
379
  - 0
377
380
  version: "0"