knjrbfw 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. data/VERSION +1 -1
  2. data/knjrbfw.gemspec +29 -8
  3. data/lib/knj/arrayext.rb +206 -153
  4. data/lib/knj/autoload/backups/ping.rb +2 -2
  5. data/lib/knj/autoload/erubis.rb +3 -3
  6. data/lib/knj/autoload/facets_dictionary.rb +2 -2
  7. data/lib/knj/autoload/gettext.rb +3 -3
  8. data/lib/knj/autoload/gtk2.rb +1 -1
  9. data/lib/knj/autoload/json.rb +14 -0
  10. data/lib/knj/autoload/magick.rb +3 -3
  11. data/lib/knj/autoload/mysql.rb +3 -3
  12. data/lib/knj/autoload/parsedate.rb +1 -1
  13. data/lib/knj/autoload/ping.rb +2 -2
  14. data/lib/knj/autoload/rexml.rb +5 -5
  15. data/lib/knj/autoload/soap.rb +1 -1
  16. data/lib/knj/autoload/sqlite3.rb +3 -3
  17. data/lib/knj/autoload/tmail.rb +3 -3
  18. data/lib/knj/autoload/xmlsimple.rb +3 -3
  19. data/lib/knj/autoload/zip.rb +3 -3
  20. data/lib/knj/autoload.rb +87 -81
  21. data/lib/knj/cmd_gen.rb +19 -19
  22. data/lib/knj/cmd_parser.rb +59 -0
  23. data/lib/knj/compiler.rb +34 -34
  24. data/lib/knj/cpufreq.rb +37 -37
  25. data/lib/knj/csv.rb +20 -0
  26. data/lib/knj/datarow.rb +406 -239
  27. data/lib/knj/datarow_custom.rb +124 -0
  28. data/lib/knj/datestamp.rb +89 -89
  29. data/lib/knj/datet.rb +550 -454
  30. data/lib/knj/db.rb +1 -0
  31. data/lib/knj/degulesider.rb +42 -44
  32. data/lib/knj/erb/erb.rb +5 -5
  33. data/lib/knj/erb/erb_cache_clean.rb +10 -10
  34. data/lib/knj/erb/erb_fcgi.rb +32 -32
  35. data/lib/knj/erb/erb_fcgi_1.9.rb +32 -32
  36. data/lib/knj/erb/erb_fcgi_jruby.rb +2 -2
  37. data/lib/knj/erb/erb_jruby.rb +5 -5
  38. data/lib/knj/erb/include.rb +243 -243
  39. data/lib/knj/errors.rb +19 -18
  40. data/lib/knj/eruby.rb +12 -10
  41. data/lib/knj/event_filemod.rb +31 -31
  42. data/lib/knj/event_handler.rb +73 -67
  43. data/lib/knj/exchangerates.rb +37 -37
  44. data/lib/knj/facebook_connect.rb +95 -18
  45. data/lib/knj/filesystem.rb +6 -6
  46. data/lib/knj/fs/drivers/filesystem.rb +12 -12
  47. data/lib/knj/fs/drivers/ftp.rb +31 -31
  48. data/lib/knj/fs/drivers/ssh.rb +26 -26
  49. data/lib/knj/fs/fs.rb +31 -31
  50. data/lib/knj/gettext_fallback.rb +15 -15
  51. data/lib/knj/gettext_threadded.rb +75 -75
  52. data/lib/knj/google_sitemap.rb +53 -53
  53. data/lib/knj/gtk2.rb +272 -272
  54. data/lib/knj/gtk2_cb.rb +80 -80
  55. data/lib/knj/gtk2_menu.rb +55 -55
  56. data/lib/knj/gtk2_statuswindow.rb +62 -62
  57. data/lib/knj/gtk2_tv.rb +58 -58
  58. data/lib/knj/hash_methods.rb +27 -36
  59. data/lib/knj/http.rb +189 -167
  60. data/lib/knj/http2.rb +259 -53
  61. data/lib/knj/image.rb +2 -2
  62. data/lib/knj/includes/appserver_cli.rb +18 -18
  63. data/lib/knj/includes/require_info.rb +15 -0
  64. data/lib/knj/ip2location.rb +20 -20
  65. data/lib/knj/ironruby-gtk2/button.rb +14 -14
  66. data/lib/knj/ironruby-gtk2/dialog.rb +42 -42
  67. data/lib/knj/ironruby-gtk2/entry.rb +4 -4
  68. data/lib/knj/ironruby-gtk2/gdk_event.rb +1 -1
  69. data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +11 -11
  70. data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +9 -9
  71. data/lib/knj/ironruby-gtk2/gladexml.rb +102 -102
  72. data/lib/knj/ironruby-gtk2/glib.rb +13 -13
  73. data/lib/knj/ironruby-gtk2/gtk2.rb +121 -121
  74. data/lib/knj/ironruby-gtk2/gtk_builder.rb +29 -29
  75. data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +3 -3
  76. data/lib/knj/ironruby-gtk2/gtk_combobox.rb +17 -17
  77. data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +3 -3
  78. data/lib/knj/ironruby-gtk2/gtk_liststore.rb +16 -16
  79. data/lib/knj/ironruby-gtk2/gtk_menu.rb +3 -3
  80. data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +2 -2
  81. data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +3 -3
  82. data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +22 -22
  83. data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +11 -11
  84. data/lib/knj/ironruby-gtk2/gtk_treeview.rb +17 -17
  85. data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +30 -30
  86. data/lib/knj/ironruby-gtk2/iconsize.rb +1 -1
  87. data/lib/knj/ironruby-gtk2/image.rb +13 -13
  88. data/lib/knj/ironruby-gtk2/label.rb +17 -17
  89. data/lib/knj/ironruby-gtk2/stock.rb +2 -2
  90. data/lib/knj/ironruby-gtk2/tests/test_2.rb +14 -14
  91. data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +37 -37
  92. data/lib/knj/ironruby-gtk2/vbox.rb +3 -3
  93. data/lib/knj/ironruby-gtk2/window.rb +18 -18
  94. data/lib/knj/jruby-gtk2/builder/test_builder.rb +11 -11
  95. data/lib/knj/jruby-gtk2/builder.rb +25 -25
  96. data/lib/knj/jruby-gtk2/cellrenderertext.rb +10 -10
  97. data/lib/knj/jruby-gtk2/checkbutton.rb +1 -1
  98. data/lib/knj/jruby-gtk2/combobox.rb +27 -27
  99. data/lib/knj/jruby-gtk2/dialog.rb +40 -40
  100. data/lib/knj/jruby-gtk2/eventbutton.rb +19 -19
  101. data/lib/knj/jruby-gtk2/gladexml.rb +97 -97
  102. data/lib/knj/jruby-gtk2/gtk2.rb +203 -203
  103. data/lib/knj/jruby-gtk2/hbox.rb +8 -8
  104. data/lib/knj/jruby-gtk2/iconsize.rb +3 -3
  105. data/lib/knj/jruby-gtk2/image.rb +8 -8
  106. data/lib/knj/jruby-gtk2/liststore.rb +54 -54
  107. data/lib/knj/jruby-gtk2/menu.rb +35 -35
  108. data/lib/knj/jruby-gtk2/progressbar.rb +10 -10
  109. data/lib/knj/jruby-gtk2/statusicon.rb +3 -3
  110. data/lib/knj/jruby-gtk2/stock.rb +6 -6
  111. data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +36 -36
  112. data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +3 -3
  113. data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +2 -2
  114. data/lib/knj/jruby-gtk2/treeview.rb +88 -88
  115. data/lib/knj/jruby-gtk2/vbox.rb +10 -10
  116. data/lib/knj/jruby-gtk2/window.rb +7 -7
  117. data/lib/knj/jruby_compiler.rb +12 -12
  118. data/lib/knj/knj.rb +12 -11
  119. data/lib/knj/knj_controller.rb +13 -8
  120. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +499 -316
  121. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +127 -125
  122. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +43 -25
  123. data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +316 -241
  124. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +12 -0
  125. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +146 -146
  126. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +24 -24
  127. data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +283 -283
  128. data/lib/knj/knjdb/libknjdb.rb +96 -52
  129. data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +78 -78
  130. data/lib/knj/knjdb/libknjdb_row.rb +147 -147
  131. data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +61 -61
  132. data/lib/knj/knjdb/revision.rb +262 -0
  133. data/lib/knj/libqt.rb +69 -69
  134. data/lib/knj/libqt_window.rb +8 -8
  135. data/lib/knj/locales.rb +62 -52
  136. data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +54 -54
  137. data/lib/knj/mail.rb +73 -73
  138. data/lib/knj/mailobj.rb +82 -80
  139. data/lib/knj/mount.rb +113 -113
  140. data/lib/knj/notify.rb +11 -11
  141. data/lib/knj/nvidia_settings.rb +43 -43
  142. data/lib/knj/objects/objects_sqlhelper.rb +474 -0
  143. data/lib/knj/objects.rb +569 -793
  144. data/lib/knj/opts.rb +38 -38
  145. data/lib/knj/os.rb +176 -158
  146. data/lib/knj/php.rb +853 -683
  147. data/lib/knj/php_parser/arguments.rb +3 -3
  148. data/lib/knj/php_parser/functions.rb +95 -95
  149. data/lib/knj/php_parser/php_parser.rb +16 -16
  150. data/lib/knj/php_parser/tests/test.rb +6 -6
  151. data/lib/knj/php_parser/tests/test_function_run.rb +6 -6
  152. data/lib/knj/power_manager.rb +29 -29
  153. data/lib/knj/process.rb +457 -0
  154. data/lib/knj/process_meta.rb +400 -0
  155. data/lib/knj/rand.rb +8 -8
  156. data/lib/knj/retry.rb +69 -69
  157. data/lib/knj/rhodes/delegate.rb +414 -0
  158. data/lib/knj/rhodes/rhodes.rb +114 -40
  159. data/lib/knj/rhodes/weakref.rb +80 -0
  160. data/lib/knj/rsvgbin.rb +18 -18
  161. data/lib/knj/scripts/degulesider.rb +2 -2
  162. data/lib/knj/scripts/filesearch.rb +35 -35
  163. data/lib/knj/scripts/ip2location.rb +2 -2
  164. data/lib/knj/scripts/keepalive.rb +2 -2
  165. data/lib/knj/scripts/php_to_rb_helper.rb +376 -0
  166. data/lib/knj/scripts/process_meta_exec.rb +104 -0
  167. data/lib/knj/scripts/svn_merge.rb +21 -21
  168. data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +26 -26
  169. data/lib/knj/sms.rb +52 -52
  170. data/lib/knj/sshrobot/sshrobot.rb +90 -88
  171. data/lib/knj/sshrobot.rb +1 -0
  172. data/lib/knj/strings.rb +186 -74
  173. data/lib/knj/sysuser.rb +25 -25
  174. data/lib/knj/table_writer.rb +97 -0
  175. data/lib/knj/tests/compiler/compiler_test.rb +2 -2
  176. data/lib/knj/tests/test_degulesider.rb +1 -1
  177. data/lib/knj/tests/test_http2_proxy.rb +26 -0
  178. data/lib/knj/tests/test_mount.rb +9 -9
  179. data/lib/knj/tests/test_retry.rb +17 -17
  180. data/lib/knj/thread.rb +23 -24
  181. data/lib/knj/thread2.rb +45 -45
  182. data/lib/knj/threadhandler.rb +135 -102
  183. data/lib/knj/threadpool.rb +195 -145
  184. data/lib/knj/translations.rb +128 -119
  185. data/lib/knj/unix_proc.rb +80 -80
  186. data/lib/knj/web.rb +947 -881
  187. data/lib/knj/webscripts/image.rhtml +142 -67
  188. data/lib/knj/win.rb +2 -2
  189. data/lib/knj/win_registry.rb +58 -58
  190. data/lib/knj/win_tightvnc.rb +125 -125
  191. data/lib/knj/wref.rb +104 -0
  192. data/lib/knj/x11vnc.rb +46 -46
  193. data/lib/knj/youtube.rb +33 -36
  194. data/lib/knjrbfw.rb +1 -0
  195. data/spec/cmd_parser_spec.rb +25 -0
  196. data/spec/db_spec.rb +40 -0
  197. data/spec/db_spec_encoding_test_file.txt +1 -0
  198. data/spec/http2_spec.rb +37 -0
  199. data/spec/knjrbfw_spec.rb +17 -15
  200. data/spec/php_spec.rb +69 -0
  201. data/spec/process_meta_spec.rb +150 -0
  202. data/spec/process_spec.rb +107 -0
  203. data/spec/strings_spec.rb +21 -0
  204. data/spec/web_spec.rb +16 -0
  205. metadata +42 -21
  206. data/lib/knj/autoload/json_autoload.rb +0 -7
  207. data/lib/knj/autoload/twitter.rb +0 -2
  208. data/lib/knj/ext/webrick.rb +0 -31
  209. data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
  210. data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
  211. data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
data/lib/knj/datet.rb CHANGED
@@ -1,405 +1,443 @@
1
1
  require "time"
2
2
 
3
3
  class Knj::Datet
4
- attr_accessor :time
5
-
6
- def initialize(time = Time.now)
7
- @time = time
8
- end
9
-
10
- def find(incr, args)
11
- count = 0
12
- while true
13
- if args[:day_in_week] and self.day_in_week == args[:day_in_week]
14
- return self
15
- elsif args[:wday] and self.time.wday == args[:wday].to_i
16
- return self
17
- end
18
-
19
- if incr == :day
20
- self.add_days(1)
21
- elsif incr == :month
22
- self.add_months(1)
23
- else
24
- raise "Invalid increment: #{incr}."
25
- end
26
-
27
- count += 1
28
- raise "Endless loop?" if count > 999
29
- end
30
- end
31
-
32
- def add_mins(mins = 1)
33
- mins = mins.to_i
34
- cur_mins = @time.min
35
- next_min = cur_mins + mins
36
-
37
- if next_min >= 60
38
- @time = self.add_hours(1).stamp(:datet => false, :min => 0)
39
- mins_left = (mins - 1) - (60 - cur_mins)
40
- return self.add_mins(mins_left) if mins_left > 0
41
- elsif next_min < 0
42
- @time = self.add_hours(-1).stamp(:datet => false, :min => 59)
43
- mins_left = mins + cur_mins + 1
44
- self.add_mins(mins_left) if mins_left > 0
45
- else
46
- @time = self.stamp(:datet => false, :min => next_min)
47
- end
48
-
49
- return self
50
- end
51
-
52
- def add_hours(hours = 1)
53
- hours = hours.to_i
54
- cur_hour = @time.hour
55
- next_hour = cur_hour + hours
56
-
57
- if next_hour >= 24
58
- @time = self.add_days(1).stamp(:datet => false, :hour => 0)
59
- hours_left = (hours - 1) - (24 - cur_hour)
60
- return self.add_hours(hours_left) if hours_left > 0
61
- elsif next_hour < 0
62
- @time = self.add_days(-1).stamp(:datet => false, :hour => 23)
63
- hours_left = hours + cur_hour + 1
64
- self.add_hours(hours_left) if hours_left < 0
65
- else
66
- @time = self.stamp(:datet => false, :hour => next_hour)
67
- end
68
-
69
- return self
70
- end
71
-
72
- def add_days(days = 1)
73
- days = days.to_i
74
- return self if days == 0
75
- dim = self.days_in_month
76
- cur_day = @time.day
77
- next_day = cur_day + days
78
-
79
- if next_day > dim
80
- @time = self.add_months(1).stamp(:datet => false, :day => 1)
81
- days_left = (days - 1) - (dim - cur_day)
82
- self.add_days(days_left) if days_left > 0
83
- elsif next_day <= 0
84
- self.date = 1
85
- self.add_months(-1)
86
- @time = self.stamp(:datet => false, :day => self.days_in_month)
87
- days_left = days + 1
88
- self.add_days(days_left) if days_left != 0
89
- else
90
- @time = self.stamp(:datet => false, :day => next_day)
91
- end
92
-
93
- return self
94
- end
95
-
96
- def add_months(months = 1)
97
- months = months.to_i
98
- cur_month = @time.month
99
- cur_day = @time.day
100
- next_month = cur_month + months.to_i
101
-
102
- if next_month > 12
103
- @time = self.add_years(1).stamp(:datet => false, :month => 1, :day => 1)
104
- months_left = (months - 1) - (12 - cur_month)
105
- return self.add_months(months_left) if months_left > 0
106
- elsif next_month < 1
107
- @time = self.add_years(-1).stamp(:datet => false, :month => 12)
108
- else
109
- @time = self.stamp(:datet => false, :month => next_month, :day => 1)
110
- end
111
-
112
- dim = self.days_in_month
113
-
114
- if dim < cur_day
115
- @time = self.stamp(:datet => false, :day => dim)
116
- else
117
- @time = self.stamp(:datet => false, :day => cur_day)
118
- end
119
-
120
- return self
121
- end
122
-
123
- def add_years(years = 1)
124
- next_year = @time.year + years.to_i
125
- @time = self.stamp(:datet => false, :year => next_year)
126
- return self
127
- end
128
-
129
- #Returns the number of days in the current month.
130
- def days_in_month
4
+ attr_accessor :time
5
+
6
+ def initialize(time = Time.now)
7
+ @time = time
8
+ end
9
+
10
+ def find(incr, args)
11
+ count = 0
12
+ while true
13
+ if args[:day_in_week] and self.day_in_week == args[:day_in_week]
14
+ return self
15
+ elsif args[:wday] and self.time.wday == args[:wday].to_i
16
+ return self
17
+ end
18
+
19
+ if incr == :day
20
+ self.add_days(1)
21
+ elsif incr == :month
22
+ self.add_months(1)
23
+ else
24
+ raise "Invalid increment: #{incr}."
25
+ end
26
+
27
+ count += 1
28
+ raise "Endless loop?" if count > 999
29
+ end
30
+ end
31
+
32
+ def add_mins(mins = 1)
33
+ mins = mins.to_i
34
+ cur_mins = @time.min
35
+ next_min = cur_mins + mins
36
+
37
+ if next_min >= 60
38
+ @time = self.add_hours(1).stamp(:datet => false, :min => 0)
39
+ mins_left = (mins - 1) - (60 - cur_mins)
40
+ return self.add_mins(mins_left) if mins_left > 0
41
+ elsif next_min < 0
42
+ @time = self.add_hours(-1).stamp(:datet => false, :min => 59)
43
+ mins_left = mins + cur_mins + 1
44
+ self.add_mins(mins_left) if mins_left > 0
45
+ else
46
+ @time = self.stamp(:datet => false, :min => next_min)
47
+ end
48
+
49
+ return self
50
+ end
51
+
52
+ def add_hours(hours = 1)
53
+ hours = hours.to_i
54
+ cur_hour = @time.hour
55
+ next_hour = cur_hour + hours
56
+
57
+ if next_hour >= 24
58
+ @time = self.add_days(1).stamp(:datet => false, :hour => 0)
59
+ hours_left = (hours - 1) - (24 - cur_hour)
60
+ return self.add_hours(hours_left) if hours_left > 0
61
+ elsif next_hour < 0
62
+ @time = self.add_days(-1).stamp(:datet => false, :hour => 23)
63
+ hours_left = hours + cur_hour + 1
64
+ self.add_hours(hours_left) if hours_left < 0
65
+ else
66
+ @time = self.stamp(:datet => false, :hour => next_hour)
67
+ end
68
+
69
+ return self
70
+ end
71
+
72
+ def add_days(days = 1)
73
+ days = days.to_i
74
+ return self if days == 0
75
+ dim = self.days_in_month
76
+ cur_day = @time.day
77
+ next_day = cur_day + days
78
+
79
+ if next_day > dim
80
+ @time = self.add_months(1).stamp(:datet => false, :day => 1)
81
+ days_left = (days - 1) - (dim - cur_day)
82
+ self.add_days(days_left) if days_left > 0
83
+ elsif next_day <= 0
84
+ self.date = 1
85
+ self.add_months(-1)
86
+ @time = self.stamp(:datet => false, :day => self.days_in_month)
87
+ days_left = days + 1
88
+ self.add_days(days_left) if days_left != 0
89
+ else
90
+ @time = self.stamp(:datet => false, :day => next_day)
91
+ end
92
+
93
+ return self
94
+ end
95
+
96
+ def add_months(months = 1)
97
+ months = months.to_i
98
+ cur_month = @time.month
99
+ cur_day = @time.day
100
+ next_month = cur_month + months.to_i
101
+
102
+ if next_month > 12
103
+ @time = self.add_years(1).stamp(:datet => false, :month => 1, :day => 1)
104
+ months_left = (months - 1) - (12 - cur_month)
105
+ return self.add_months(months_left) if months_left > 0
106
+ elsif next_month < 1
107
+ @time = self.add_years(-1).stamp(:datet => false, :month => 12)
108
+ else
109
+ @time = self.stamp(:datet => false, :month => next_month, :day => 1)
110
+ end
111
+
112
+ dim = self.days_in_month
113
+
114
+ if dim < cur_day
115
+ @time = self.stamp(:datet => false, :day => dim)
116
+ else
117
+ @time = self.stamp(:datet => false, :day => cur_day)
118
+ end
119
+
120
+ return self
121
+ end
122
+
123
+ def add_years(years = 1)
124
+ next_year = @time.year + years.to_i
125
+ @time = self.stamp(:datet => false, :year => next_year)
126
+ return self
127
+ end
128
+
129
+ #Returns the number of days in the current month.
130
+ def days_in_month
131
131
  return 29 if month == 2 and Date.gregorian_leap?(self.year)
132
132
 
133
- #Thanks to ActiveSupport: http://rubydoc.info/docs/rails/2.3.8/ActiveSupport/CoreExtensions/Time/Calculations
134
- days_in_months = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
135
- return days_in_months[@time.month]
136
- end
137
-
138
- def day_in_week
139
- diw = @time.strftime("%w").to_i
140
- if diw == 0
141
- diw = 6
142
- else
143
- diw -= 1
144
- end
145
-
146
- return diw
147
- end
148
-
149
- def day_name
150
- return @time.strftime("%A")
151
- end
152
-
153
- def month_name
154
- return @time.strftime("%B")
155
- end
156
-
157
- def year
158
- return @time.year
159
- end
160
-
161
- def hour
162
- return @time.hour
163
- end
164
-
165
- def min
166
- return @time.min
167
- end
168
-
169
- def year=(newyear)
170
- @time = self.stamp(:datet => false, :year => newyear)
171
- end
172
-
173
- def month
174
- @mode = :months
175
- return @time.month
176
- end
177
-
178
- def date
179
- @mode = :days
180
- return @time.day
181
- end
182
-
183
- def wday_mon
184
- wday = @time.wday
185
- return 0 if wday == 6
186
- return wday - 1
187
- end
188
-
189
- def date=(newday)
190
- newday = newday.to_i
191
-
192
- if newday <= 0
193
- self.add_days(newday - 1)
194
- else
195
- @time = self.stamp(:datet => false, :day => newday)
196
- end
197
-
198
- return self
199
- end
200
-
201
- def hour=(newhour)
202
- newhour = newhour.to_i
203
- day = @time.day
204
-
205
- loop do
206
- break if newhour >= 0
207
- day += -1
208
- newhour += 24
209
- end
210
-
211
- loop do
212
- break if newhour < 24
213
- day += 1
214
- newhour += -24
215
- end
216
-
217
- @time = self.stamp(:datet => false, :hour => newhour)
218
-
219
- self.date = day if day != @time.day
220
- return self
221
- end
222
-
223
- def min=(newmin)
224
- @time = self.stamp(:datet => false, :min => newmin.to_i)
225
- end
226
-
227
- def sec=(newsec)
228
- @time = self.stamp(:datet => false, :sec => newsec.to_i)
229
- end
230
-
231
- alias :day :date
232
-
233
- def month=(newmonth)
234
- @time = self.stamp(:datet => false, :month => newmonth)
235
- end
236
-
237
- def arg_to_time(datet)
238
- if datet.is_a?(Knj::Datet)
239
- return datet.time
240
- elsif datet.is_a?(Time)
241
- return datet
242
- else
243
- raise "Could not handle object of class: '#{datet.class.name}'."
244
- end
245
- end
246
-
247
- include Comparable
248
- def <=>(timeobj)
249
- secs = arg_to_time(timeobj).to_i
250
-
251
- if secs > @time.to_i
252
- return -1
253
- elsif secs < @time.to_i
254
- return 1
255
- else
256
- return 0
257
- end
258
- end
259
-
260
- def add_something(val)
261
- val = -val if @addmode == "-"
262
- return self.add_hours(val) if @mode == :hours
263
- return self.add_days(val) if @mode == :days
264
- return self.add_months(val) if @mode == :months
265
- return self.add_mins(val) if @mode == :mins
266
- raise "No such mode: #{@mode}"
267
- end
268
-
269
- def -(val)
270
- @addmode = "-"
271
- self.add_something(val)
272
- end
273
-
274
- def +(val)
275
- @addmode = "+"
276
- self.add_something(val)
277
- end
278
-
279
- def hours
280
- @mode = :hours
281
- return self
282
- end
283
-
284
- def mins
285
- @mode = :mins
286
- return self
287
- end
288
-
289
- def days
290
- @mode = :days
291
- return self
292
- end
293
-
294
- def months
295
- @mode = :months
296
- return self
297
- end
298
-
299
- def stamp(args)
300
- vars = {:year => @time.year, :month => @time.month, :day => @time.day, :hour => @time.hour, :min => @time.min, :sec => @time.sec}
301
-
302
- args.each do |key, value|
303
- vars[key.to_sym] = value.to_i if key != :datet
304
- end
305
-
306
- time = Time.local(vars[:year], vars[:month], vars[:day], vars[:hour], vars[:min], vars[:sec])
307
-
308
- if !args.key?(:datet) or args[:datet]
309
- return Knj::Datet.new(time)
310
- end
311
-
312
- return time
313
- end
314
-
315
- def dbstr(args = {})
133
+ #Thanks to ActiveSupport: http://rubydoc.info/docs/rails/2.3.8/ActiveSupport/CoreExtensions/Time/Calculations
134
+ days_in_months = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
135
+ return days_in_months[@time.month]
136
+ end
137
+
138
+ def day_in_week
139
+ diw = @time.strftime("%w").to_i
140
+ if diw == 0
141
+ diw = 6
142
+ else
143
+ diw -= 1
144
+ end
145
+
146
+ return diw
147
+ end
148
+
149
+ def day_name
150
+ return @time.strftime("%A")
151
+ end
152
+
153
+ def month_name
154
+ return @time.strftime("%B")
155
+ end
156
+
157
+ def year
158
+ return @time.year
159
+ end
160
+
161
+ def hour
162
+ return @time.hour
163
+ end
164
+
165
+ def min
166
+ return @time.min
167
+ end
168
+
169
+ def year=(newyear)
170
+ @time = self.stamp(:datet => false, :year => newyear)
171
+ end
172
+
173
+ def month
174
+ @mode = :months
175
+ return @time.month
176
+ end
177
+
178
+ def date
179
+ @mode = :days
180
+ return @time.day
181
+ end
182
+
183
+ def wday_mon
184
+ wday = @time.wday
185
+ return 0 if wday == 6
186
+ return wday - 1
187
+ end
188
+
189
+ def date=(newday)
190
+ newday = newday.to_i
191
+
192
+ if newday <= 0
193
+ self.add_days(newday - 1)
194
+ else
195
+ @time = self.stamp(:datet => false, :day => newday)
196
+ end
197
+
198
+ return self
199
+ end
200
+
201
+ def hour=(newhour)
202
+ newhour = newhour.to_i
203
+ day = @time.day
204
+
205
+ loop do
206
+ break if newhour >= 0
207
+ day += -1
208
+ newhour += 24
209
+ end
210
+
211
+ loop do
212
+ break if newhour < 24
213
+ day += 1
214
+ newhour += -24
215
+ end
216
+
217
+ @time = self.stamp(:datet => false, :hour => newhour)
218
+
219
+ self.date = day if day != @time.day
220
+ return self
221
+ end
222
+
223
+ def min=(newmin)
224
+ @time = self.stamp(:datet => false, :min => newmin.to_i)
225
+ end
226
+
227
+ def sec=(newsec)
228
+ @time = self.stamp(:datet => false, :sec => newsec.to_i)
229
+ end
230
+
231
+ alias :day :date
232
+
233
+ def month=(newmonth)
234
+ @time = self.stamp(:datet => false, :month => newmonth)
235
+ end
236
+
237
+ def arg_to_time(datet)
238
+ if datet.is_a?(Knj::Datet)
239
+ return datet.time
240
+ elsif datet.is_a?(Time)
241
+ return datet
242
+ else
243
+ raise "Could not handle object of class: '#{datet.class.name}'."
244
+ end
245
+ end
246
+
247
+ include Comparable
248
+ def <=>(timeobj)
249
+ secs = arg_to_time(timeobj).to_i
250
+
251
+ if secs > @time.to_i
252
+ return -1
253
+ elsif secs < @time.to_i
254
+ return 1
255
+ else
256
+ return 0
257
+ end
258
+ end
259
+
260
+ def add_something(val)
261
+ val = -val if @addmode == "-"
262
+ return self.add_hours(val) if @mode == :hours
263
+ return self.add_days(val) if @mode == :days
264
+ return self.add_months(val) if @mode == :months
265
+ return self.add_mins(val) if @mode == :mins
266
+ raise "No such mode: #{@mode}"
267
+ end
268
+
269
+ def -(val)
270
+ @addmode = "-"
271
+ self.add_something(val)
272
+ end
273
+
274
+ def +(val)
275
+ @addmode = "+"
276
+ self.add_something(val)
277
+ end
278
+
279
+ def hours
280
+ @mode = :hours
281
+ return self
282
+ end
283
+
284
+ def mins
285
+ @mode = :mins
286
+ return self
287
+ end
288
+
289
+ def days
290
+ @mode = :days
291
+ return self
292
+ end
293
+
294
+ def months
295
+ @mode = :months
296
+ return self
297
+ end
298
+
299
+ def stamp(args)
300
+ vars = {:year => @time.year, :month => @time.month, :day => @time.day, :hour => @time.hour, :min => @time.min, :sec => @time.sec}
301
+
302
+ args.each do |key, value|
303
+ vars[key.to_sym] = value.to_i if key != :datet
304
+ end
305
+
306
+ time = Time.local(vars[:year], vars[:month], vars[:day], vars[:hour], vars[:min], vars[:sec])
307
+
308
+ if !args.key?(:datet) or args[:datet]
309
+ return Knj::Datet.new(time)
310
+ end
311
+
312
+ return time
313
+ end
314
+
315
+ def dbstr(args = {})
316
316
  str = "%04d" % @time.year.to_s + "-" + "%02d" % @time.month.to_s + "-" + "%02d" % @time.day.to_s
317
317
 
318
318
  if !args.key?(:time) or args[:time]
319
- str += " " + "%02d" % @time.hour.to_s + ":" + "%02d" % @time.min.to_s + ":" + "%02d" % @time.sec.to_s
319
+ str << " " + "%02d" % @time.hour.to_s + ":" + "%02d" % @time.min.to_s + ":" + "%02d" % @time.sec.to_s
320
320
  end
321
321
 
322
322
  return str
323
- end
324
-
325
- def self.from_dbstr(date_string)
326
- if date_string.is_a?(Time)
327
- return Knj::Datet.new(date_string)
328
- elsif date_string.is_a?(Date)
329
- return Knj::Datet.new(date_string.to_time)
330
- end
331
-
332
- return false if Knj::Datestamp.is_nullstamp?(date_string)
333
- return Knj::Datet.new(Time.local(*ParseDate.parsedate(date_string.to_s)))
334
- end
335
-
336
- def self.parse(str)
337
- return Knj::Datet.from_dbstr(str)
338
- end
339
-
340
- def self.is_nullstamp?(stamp)
341
- return true if !stamp or stamp == "0000-00-00" or stamp == "0000-00-00 00:00:00"
323
+ end
324
+
325
+ def self.from_dbstr(date_string)
326
+ if date_string.is_a?(Time)
327
+ return Knj::Datet.new(date_string)
328
+ elsif date_string.is_a?(Date)
329
+ return Knj::Datet.new(date_string.to_time)
330
+ end
331
+
332
+ return false if Knj::Datet.is_nullstamp?(date_string)
333
+
334
+ require "#{$knjpath}autoload/parsedate"
335
+ return Knj::Datet.new(Time.local(*ParseDate.parsedate(date_string.to_s)))
336
+ end
337
+
338
+ def self.parse(str)
339
+ return Knj::Datet.from_dbstr(str)
340
+ end
341
+
342
+ def self.is_nullstamp?(stamp)
343
+ return true if !stamp or stamp == "0000-00-00" or stamp == "0000-00-00 00:00:00" or stamp.to_s.strip == ""
342
344
  return false
343
- end
344
-
345
- def out(args = {})
346
- str = ""
347
- date_shown = false
348
- time_shown = false
349
-
350
- if !args.key?(:date) or args[:date]
351
- date_shown = true
352
- str += "%02d" % @time.day.to_s + "/" + "%02d" % @time.month.to_s
353
-
354
- if !args.key?(:year) or args[:year]
355
- str += " " + "%04d" % @time.year.to_s
356
- end
357
- end
358
-
359
- if !args.key?(:time) or args[:time]
360
- time_shown = true
361
- str += " - " if date_shown
362
- str += "%02d" % @time.hour.to_s + ":" + "%02d" % @time.min.to_s
363
- end
364
-
365
- return str
366
- end
367
-
368
- def self.in(timestr)
369
- if timestr.is_a?(Time)
370
- return Knj::Datet.new(timestr)
371
- elsif timestr.is_a?(Date)
372
- return Knj::Datet.new(timestr.to_time)
373
- elsif timestr.is_a?(Knj::Datet)
374
- return timestr
375
- elsif timestr == nil
376
- return Knj::Datet.in("1970-01-01")
377
- end
378
-
379
- if match = timestr.to_s.match(/^(\d+)\/(\d+) (\d+)/)
380
- #MySQL date format
381
- timestr = timestr.gsub(match[0], "")
382
- date = match[1]
383
- month = match[2]
384
- year = match[3]
385
-
386
- if match = timestr.match(/\s*(\d+):(\d+)/)
387
- #MySQL datetime format
388
- timestr = timestr.gsub(match[0], "")
389
- hour = match[1]
390
- minute = match[2]
391
- end
392
-
393
- return Knj::Datet.new(Time.local(year, month, date, hour, minute))
345
+ end
346
+
347
+ #Returns the day of the year (0-365).
348
+ def day_of_year
349
+ return @time.strftime("%j").to_i
350
+ end
351
+
352
+ #Returns how many days there is between the two timestamps given.
353
+ def self.days_between(t1, t2)
354
+ raise "Timestamp 2 should be larger than timestamp 1." if t2 < t1
355
+
356
+ doy1 = t1.day_of_year
357
+ doy2 = t2.day_of_year
358
+
359
+ yot1 = t1.year
360
+ yot2 = t2.year
361
+
362
+ if yot1 == yot2
363
+ days_between = doy2 - doy1
364
+ return days_between
365
+ end
366
+
367
+ upto = 365 - doy1
368
+ after = doy2
369
+
370
+ return upto + after
371
+ end
372
+
373
+ def out(args = {})
374
+ str = ""
375
+ date_shown = false
376
+ time_shown = false
377
+
378
+ if !args.key?(:date) or args[:date]
379
+ date_shown = true
380
+ str << "%02d" % @time.day.to_s + "/" + "%02d" % @time.month.to_s
381
+
382
+ if !args.key?(:year) or args[:year]
383
+ str << " " + "%04d" % @time.year.to_s
384
+ end
385
+ end
386
+
387
+ if !args.key?(:time) or args[:time]
388
+ show_time = true
389
+
390
+ if args.key?(:zerotime) and !args[:zerotime]
391
+ if @time.hour == 0 and @time.min == 0
392
+ show_time = false
393
+ end
394
+ end
395
+
396
+ if show_time
397
+ time_shown = true
398
+ str << " - " if date_shown
399
+ str << "%02d" % @time.hour.to_s + ":" + "%02d" % @time.min.to_s
400
+ end
401
+ end
402
+
403
+ return str
404
+ end
405
+
406
+ def self.in(timestr)
407
+ if timestr.is_a?(Time)
408
+ return Knj::Datet.new(timestr)
409
+ elsif timestr.is_a?(Date)
410
+ return Knj::Datet.new(timestr.to_time)
411
+ elsif timestr.is_a?(Knj::Datet)
412
+ return timestr
413
+ elsif timestr == nil
414
+ return Knj::Datet.in("1970-01-01")
415
+ end
416
+
417
+ if match = timestr.to_s.match(/^(\d+)\/(\d+) (\d+)/)
418
+ #MySQL date format
419
+ timestr = timestr.gsub(match[0], "")
420
+ date = match[1]
421
+ month = match[2]
422
+ year = match[3]
423
+
424
+ if match = timestr.match(/\s*(\d+):(\d+)/)
425
+ #MySQL datetime format
426
+ timestr = timestr.gsub(match[0], "")
427
+ hour = match[1]
428
+ minute = match[2]
429
+ end
430
+
431
+ return Knj::Datet.new(Time.local(year, month, date, hour, minute))
394
432
  elsif match = timestr.to_s.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/)
395
433
  return Knj::Datet.new(Time.local(match[3], match[2], match[1]))
396
- elsif match = timestr.to_s.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{5,6})$/)
397
- #Datet.code format
398
- return Knj::Datet.new(Time.local(match[1], match[2], match[3], match[4], match[5], match[6], match[7]))
399
- elsif match = timestr.to_s.match(/^\s*(\d{4})-(\d{1,2})-(\d{1,2})(|\s+(\d{2}):(\d{2}):(\d{2})(|\.\d+)\s*)(|\s+(UTC))(|\s+(\+|\-)(\d{2})(\d{2}))$/)
400
- #Database date format (with possibility of .0 in the end - miliseconds? -knj.
401
-
402
- if match[11] and match[13] and match[14]
434
+ elsif match = timestr.to_s.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{5,6})$/)
435
+ #Datet.code format
436
+ return Knj::Datet.new(Time.local(match[1], match[2], match[3], match[4], match[5], match[6], match[7]))
437
+ elsif match = timestr.to_s.match(/^\s*(\d{4})-(\d{1,2})-(\d{1,2})(|\s+(\d{2}):(\d{2}):(\d{2})(|\.\d+)\s*)(|\s+(UTC))(|\s+(\+|\-)(\d{2})(\d{2}))$/)
438
+ #Database date format (with possibility of .0 in the end - miliseconds? -knj.
439
+
440
+ if match[11] and match[13] and match[14]
403
441
  if match[12] == "+" or match[12] == "-"
404
442
  sign = match[12]
405
443
  else
@@ -413,32 +451,47 @@ class Knj::Datet
413
451
  utc_str = nil
414
452
  end
415
453
 
416
- time = Time.local(match[1].to_i, match[2].to_i, match[3].to_i, match[5].to_i, match[6].to_i, match[7].to_i, utc_str)
417
- return Knj::Datet.new(time)
418
- end
419
-
420
- raise Knj::Errors::InvalidData.new("Wrong format: '#{timestr}', class: '#{timestr.class.name}'")
421
- end
422
-
423
- def self.months_arr
424
- return Dictionary[
425
- 1, _("January"),
426
- 2, _("February"),
427
- 3, _("March"),
428
- 4, _("April"),
429
- 5, _("May"),
430
- 6, _("June"),
431
- 7, _("July"),
432
- 8, _("August"),
433
- 9, _("September"),
434
- 10, _("October"),
435
- 11, _("November"),
436
- 12, _("December")
437
- ]
438
- end
439
-
440
- def self.days_arr
441
- return {
454
+ time = Time.local(match[1].to_i, match[2].to_i, match[3].to_i, match[5].to_i, match[6].to_i, match[7].to_i, utc_str)
455
+ return Knj::Datet.new(time)
456
+ elsif match = timestr.to_s.match(/^\s*(\d{2,4})-(\d{1,2})-(\d{1,2})(|\s+(\d{1,2}):(\d{1,2}):(\d{1,2})(:(\d{1,2})|)\s*)$/)
457
+ time = Time.local(match[1].to_i, match[2].to_i, match[3].to_i, match[5].to_i, match[6].to_i, match[7].to_i)
458
+ return Knj::Datet.new(time)
459
+ end
460
+
461
+ raise Knj::Errors::InvalidData.new("Wrong format: '#{timestr}', class: '#{timestr.class.name}'")
462
+ end
463
+
464
+ #Returns a hash with the month-no as key and month-name as value.
465
+ def self.months_arr(args = {})
466
+ ret = {
467
+ 1 => _("January"),
468
+ 2 => _("February"),
469
+ 3 => _("March"),
470
+ 4 => _("April"),
471
+ 5 => _("May"),
472
+ 6 => _("June"),
473
+ 7 => _("July"),
474
+ 8 => _("August"),
475
+ 9 => _("September"),
476
+ 10 => _("October"),
477
+ 11 => _("November"),
478
+ 12 => _("December")
479
+ }
480
+
481
+ if args["short"]
482
+ ret_short = {}
483
+ ret.each do |key, val|
484
+ ret_short[key] = val[0..2]
485
+ end
486
+
487
+ return ret_short
488
+ end
489
+
490
+ return ret
491
+ end
492
+
493
+ def self.days_arr(args = {})
494
+ ret = {
442
495
  1 => _("Monday"),
443
496
  2 => _("Tuesday"),
444
497
  3 => _("Wednesday"),
@@ -447,40 +500,83 @@ class Knj::Datet
447
500
  6 => _("Saturday"),
448
501
  0 => _("Sunday")
449
502
  }
450
- end
451
-
452
- def loc_wday
453
- return _(@time.strftime("%A"))
454
- end
455
-
456
- def loc_wday_small
457
- return _(@time.strftime("%a"))
458
- end
459
-
460
- def loc_month
461
- return _(@time.strftime("%B"))
462
- end
463
-
464
- def to_s
465
- return @time.to_s
466
- end
467
-
468
- def code
469
- return "#{"%04d" % @time.year}#{"%02d" % @time.month}#{"%02d" % @time.day}#{"%02d" % @time.hour}#{"%02d" % @time.min}#{"%02d" % @time.sec}#{"%05d" % @time.usec}"
470
- end
471
-
472
- def unixt
473
- return @time.to_i
474
- end
475
-
476
- alias :to_i :unixt
477
-
478
- def httpdate
503
+
504
+ if args["short"]
505
+ ret_short = {}
506
+ ret.each do |key, val|
507
+ ret_short[key] = val[0..2]
508
+ end
509
+
510
+ return ret_short
511
+ end
512
+
513
+ return ret
514
+ end
515
+
516
+ def self.month_str_to_no(str)
517
+ ret = {
518
+ "jan" => 1,
519
+ "january" => 1,
520
+ "feb" => 2,
521
+ "february" => 2,
522
+ "mar" => 3,
523
+ "march" => 3,
524
+ "apr" => 4,
525
+ "april" => 4,
526
+ "may" => 5,
527
+ "jun" => 6,
528
+ "june" => 6,
529
+ "jul" => 7,
530
+ "july" => 7,
531
+ "aug" => 8,
532
+ "august" => 8,
533
+ "sep" => 9,
534
+ "september" => 9,
535
+ "oct" => 10,
536
+ "october" => 11,
537
+ "nov" => 11,
538
+ "november" => 11,
539
+ "dec" => 12,
540
+ "december" => 12
541
+ }
542
+
543
+ str = str.to_s.downcase.strip
544
+ return ret[str] if ret.key?(str)
545
+ raise "No month to return from that string: '#{str}'."
546
+ end
547
+
548
+ def loc_wday
549
+ return _(@time.strftime("%A"))
550
+ end
551
+
552
+ def loc_wday_small
553
+ return _(@time.strftime("%a"))
554
+ end
555
+
556
+ def loc_month
557
+ return _(@time.strftime("%B"))
558
+ end
559
+
560
+ def to_s
561
+ return @time.to_s
562
+ end
563
+
564
+ def code
565
+ return "#{"%04d" % @time.year}#{"%02d" % @time.month}#{"%02d" % @time.day}#{"%02d" % @time.hour}#{"%02d" % @time.min}#{"%02d" % @time.sec}#{"%05d" % @time.usec}"
566
+ end
567
+
568
+ def unixt
569
+ return @time.to_i
570
+ end
571
+
572
+ alias :to_i :unixt
573
+
574
+ def httpdate
479
575
  require "time"
480
576
  return @time.httpdate
481
- end
482
-
483
- def offset_info
577
+ end
578
+
579
+ def offset_info
484
580
  offset_secs = @time.gmt_offset
485
581
 
486
582
  offset_hours = (offset_secs.to_f / 3600.0).floor
@@ -501,15 +597,15 @@ class Knj::Datet
501
597
  :mins => offset_minutes,
502
598
  :secs => offset_secs
503
599
  }
504
- end
505
-
506
- def offset_str
600
+ end
601
+
602
+ def offset_str
507
603
  offset_info_data = self.offset_info
508
604
  return "#{offset_info_data[:sign]}#{"%02d" % offset_info_data[:hours]}#{"%02d" % offset_info_data[:mins]}"
509
- end
510
-
511
- #Returns 'localtime' as of 1.9 - even in 1.8 which does it different.
512
- def localtime_str
605
+ end
606
+
607
+ #Returns 'localtime' as of 1.9 - even in 1.8 which does it different.
608
+ def localtime_str
513
609
  return "#{"%04d" % @time.year}-#{"%02d" % @time.month}-#{"%02d" % @time.day} #{"%02d" % @time.hour}:#{"%02d" % @time.min}:#{"%02d" % @time.sec} #{self.offset_str}"
514
- end
610
+ end
515
611
  end