smklib 1.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.
Files changed (102) hide show
  1. checksums.yaml +7 -0
  2. data/app/assets/images/add.png +0 -0
  3. data/app/assets/images/button_cancel.png +0 -0
  4. data/app/assets/images/button_ok.png +0 -0
  5. data/app/assets/images/cmseditor/16x16/text_block.png +0 -0
  6. data/app/assets/images/cmseditor/16x16/text_bold.png +0 -0
  7. data/app/assets/images/cmseditor/16x16/text_center.png +0 -0
  8. data/app/assets/images/cmseditor/16x16/text_italic.png +0 -0
  9. data/app/assets/images/cmseditor/16x16/text_left.png +0 -0
  10. data/app/assets/images/cmseditor/16x16/text_right.png +0 -0
  11. data/app/assets/images/cmseditor/16x16/text_strike.png +0 -0
  12. data/app/assets/images/cmseditor/16x16/text_sub.png +0 -0
  13. data/app/assets/images/cmseditor/16x16/text_super.png +0 -0
  14. data/app/assets/images/cmseditor/16x16/text_under.png +0 -0
  15. data/app/assets/images/cmseditor/22x22/text_block.png +0 -0
  16. data/app/assets/images/cmseditor/22x22/text_bold.png +0 -0
  17. data/app/assets/images/cmseditor/22x22/text_center.png +0 -0
  18. data/app/assets/images/cmseditor/22x22/text_italic.png +0 -0
  19. data/app/assets/images/cmseditor/22x22/text_left.png +0 -0
  20. data/app/assets/images/cmseditor/22x22/text_right.png +0 -0
  21. data/app/assets/images/cmseditor/22x22/text_strike.png +0 -0
  22. data/app/assets/images/cmseditor/22x22/text_sub.png +0 -0
  23. data/app/assets/images/cmseditor/22x22/text_super.png +0 -0
  24. data/app/assets/images/cmseditor/22x22/text_under.png +0 -0
  25. data/app/assets/images/trashcan_empty.png +0 -0
  26. data/app/assets/javascripts/collapsable.js +56 -0
  27. data/app/assets/javascripts/hide_show.js +39 -0
  28. data/app/assets/javascripts/jscalendar-1.0/calendar-setup.js +200 -0
  29. data/app/assets/javascripts/jscalendar-1.0/calendar.js +1806 -0
  30. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-af.js +39 -0
  31. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-al.js +101 -0
  32. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-bg.js +124 -0
  33. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-big5-utf8.js +123 -0
  34. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-big5.js +123 -0
  35. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-br.js +108 -0
  36. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-ca.js +123 -0
  37. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-cs-utf8.js +65 -0
  38. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-cs-win.js +65 -0
  39. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-da.js +123 -0
  40. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-de.js +124 -0
  41. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-du.js +45 -0
  42. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-el.js +89 -0
  43. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-en.js +127 -0
  44. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-es.js +129 -0
  45. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-fi.js +98 -0
  46. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-fr.js +125 -0
  47. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-he-utf8.js +123 -0
  48. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-hr-utf8.js +49 -0
  49. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-hr.js +0 -0
  50. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-hu.js +124 -0
  51. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-it.js +124 -0
  52. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-jp.js +45 -0
  53. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-ko-utf8.js +120 -0
  54. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-ko.js +120 -0
  55. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-lt-utf8.js +114 -0
  56. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-lt.js +114 -0
  57. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-lv.js +123 -0
  58. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-nl.js +73 -0
  59. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-no.js +114 -0
  60. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-pl-utf8.js +93 -0
  61. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-pl.js +56 -0
  62. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-pt.js +123 -0
  63. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-ro.js +66 -0
  64. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-ru.js +123 -0
  65. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-ru_win_.js +123 -0
  66. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-si.js +94 -0
  67. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-sk.js +99 -0
  68. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-sp.js +110 -0
  69. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-sv.js +93 -0
  70. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-tr.js +58 -0
  71. data/app/assets/javascripts/jscalendar-1.0/lang/calendar-zh.js +119 -0
  72. data/app/assets/javascripts/jscalendar-1.0/lang/cn_utf8.js +123 -0
  73. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/active-bg.gif +0 -0
  74. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/dark-bg.gif +0 -0
  75. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/hover-bg.gif +0 -0
  76. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/menuarrow.gif +0 -0
  77. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/normal-bg.gif +0 -0
  78. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/rowhover-bg.gif +0 -0
  79. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/status-bg.gif +0 -0
  80. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/theme.css +236 -0
  81. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/title-bg.gif +0 -0
  82. data/app/assets/stylesheets/jscalendar-1.0/skins/aqua/today-bg.gif +0 -0
  83. data/app/views/error_mailer/snapshot.rhtml +71 -0
  84. data/lib/smklib.rb +6 -0
  85. data/lib/smklib/array_ext.rb +76 -0
  86. data/lib/smklib/browsers.rb +69 -0
  87. data/lib/smklib/builder_ext.rb +103 -0
  88. data/lib/smklib/date_ext.rb +23 -0
  89. data/lib/smklib/debug_support.rb +27 -0
  90. data/lib/smklib/error_mailer.rb +70 -0
  91. data/lib/smklib/hash_ext.rb +19 -0
  92. data/lib/smklib/htmlutils.rb +604 -0
  93. data/lib/smklib/movable_children.rb +28 -0
  94. data/lib/smklib/object_ext.rb +34 -0
  95. data/lib/smklib/php_serialize.rb +309 -0
  96. data/lib/smklib/railtie.rb +6 -0
  97. data/lib/smklib/somekool_scaffold.rb +198 -0
  98. data/lib/smklib/super_looking_list.rb +63 -0
  99. data/lib/smklib/version.rb +11 -0
  100. data/vendor/calendar_helper.rb +100 -0
  101. data/vendor/htmltokenizer.rb +259 -0
  102. metadata +158 -0
@@ -0,0 +1,71 @@
1
+ <style>
2
+ <!--
3
+
4
+ * {font-size:9pt;font-family:verdana, helvetica, arial, sans-serif; line-height: 1.7em; }
5
+ p { margin: 0 }
6
+ -->
7
+ </style>
8
+ <h2>Error report</h2>
9
+
10
+ <table border="0">
11
+ <tr><td>Message</td><td><%= @v_exception.message %></td></tr>
12
+ <%
13
+ require 'uri'
14
+ request_uri = @v_env['REQUEST_URI'].match(@v_env['HTTP_HOST']) ? @v_env['REQUEST_URI'].split(@v_env['HTTP_HOST'])[1] : @v_env['REQUEST_URI']
15
+ uri_path, uri_query = request_uri.split('?')
16
+ uri_extra = 'local_request=1'
17
+ host, port = @v_env['HTTP_HOST'].split(':')
18
+ go_url_hash = {:host => host, :path => uri_path, :query => uri_query.to_s.empty? ? uri_extra : "#{uri_query}&#{uri_extra}"}
19
+ go_url_hash.merge!(:port => port) if port.to_i > 0 and port.to_i != 80
20
+ go_url = URI::HTTP.build(go_url_hash)
21
+ %>
22
+ <tr><td>Location</td><td><a href='<%= go_url %>'><%= go_url %></a></td></tr>
23
+ <tr><td>Client IP</td><td><%= @v_env['REMOTE_ADDR'] %><%= (@v_env['REMOTE_ADDR'] == "24.85.69.203") ? '&nbsp;UberOFFICE' : '' %></td></tr>
24
+ <tr><td>Client IP on Forward</td><td><%= @v_env['HTTP_X_FORWARDED_FOR'] %><%= (@v_env['HTTP_X_FORWARDED_FOR'] == "24.85.69.203") ? '&nbsp;UberOFFICE' : '' %></td></tr>
25
+ <tr><td>Date</td><td><%= Time.now %></td></tr>
26
+ <tr><td>Controller</td><td><%= @v_params.delete('controller') %></td></tr>
27
+ <tr><td>Action</td><td><%= @v_params.delete('action') %></td></tr>
28
+ <tr><td>Query</td><td><%= @v_env['QUERY_STRING'] %></td></tr>
29
+ <tr><td>Method</td><td><%= @v_env['REQUEST_METHOD'] %></td></tr>
30
+ <tr><td>SSL</td><td><%= @v_env['SERVER_PORT'].to_i == 443 ? "true" : "false" %></td></tr>
31
+ <tr><td>Agent</td><td><%= @v_env['HTTP_USER_AGENT'] %></td></tr>
32
+ <% if @v_session['user'] -%>
33
+ <tr><td>User id</td><td><%= @v_session['user'].id %></td></tr>
34
+ <tr><td>User name</td><td><%= @v_session['user'].fullname %></td></tr>
35
+ <tr><td>User email</td><td><%= @v_session['user'].email %></td></tr>
36
+ <tr><td>Registered</td><td><%= @v_session['user'].ctime %></td></tr>
37
+ <% end -%>
38
+ </table>
39
+
40
+ <h3>Backtrace</h3>
41
+ <pre><%= @v_trace.to_a.join("\n") -%></pre>
42
+
43
+ <h3>Params</h3>
44
+ <hr/>
45
+ <% for key, val in @v_params -%>
46
+ <p><b><%= key %></b></p>
47
+ <p><%= val.to_yaml.to_a.join("</p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;") %></p>
48
+ <% end if @v_params -%>
49
+
50
+ <h3>Session</h3>
51
+ <hr/>
52
+ <% for key, val in @v_session -%>
53
+ <p><b><%= key %></b></p>
54
+ <p><%= val.to_yaml.to_a.join("</p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;") %></p>
55
+ <% end if @v_session -%>
56
+
57
+ <h3>Environment</h3>
58
+ <hr/>
59
+ <table border="0">
60
+ <% for key, val in @v_env -%>
61
+ <tr>
62
+ <td>
63
+ <small><b><%= key %></b></small>
64
+ &nbsp;&nbsp;
65
+ </td>
66
+ <td>
67
+ <small><%= val %></small>
68
+ </td>
69
+ </tr>
70
+ <% end if @v_env -%>
71
+ </table>
data/lib/smklib.rb ADDED
@@ -0,0 +1,6 @@
1
+ module SMKLib
2
+ if defined?(::Rails)
3
+ require 'smklib/railtie'
4
+ class Engine < ::Rails::Engine; end
5
+ end
6
+ end
@@ -0,0 +1,76 @@
1
+ class Array
2
+
3
+ def multi_slice(*slice_size)
4
+ return self if slice_size.empty?
5
+ tmp_out = []
6
+ index = 0
7
+ n = 0
8
+ while(index < size)
9
+ ss = slice_size[n] || slice_size.first
10
+ tmp_out << slice(index, ss)
11
+ index += ss
12
+ n += 1
13
+ end
14
+ tmp_out
15
+ end
16
+
17
+ # takes an array of hashes and an array of ordered hash keys
18
+ # creates a nested array based on the elements of the hashes
19
+ # name the last elt in the key array 'count' if you want to pair the last two elements
20
+ def create_nested_array(keys)
21
+ h_count = self[0].length # count the number of elements in the hash - assumes all are the same length
22
+ old_vals = Hash.new # keep a record of elements already recorded
23
+ o = Array.new # create output variable
24
+ str,str_eval = nil # create temp variable for holding code to execute
25
+ has_count_column = keys.last == 'count'
26
+ h_end = (has_count_column) ? h_count - 2 : h_count - 1
27
+
28
+ self.each do |a|
29
+ current = o
30
+ keys.each_with_index do |k,i|
31
+ begin
32
+ unless (i >= h_end and has_count_column)
33
+ #if ((i != h_end) || (keys.last != 'count'))
34
+ if a[k] != old_vals[k]
35
+ current << [ a[k], [] ]
36
+ keys[i+1..keys.length].each { |q| old_vals[q] = nil }
37
+ end
38
+ current = current.last.last # reference the value array
39
+ else
40
+ current << [a[k], a['count']] if (i == h_end)
41
+ end
42
+ old_vals[k] = a[k] # record element we just looked at
43
+ rescue Exception => e
44
+ raise "Error: #{e.inspect}, " +
45
+ "current = #{current.inspect}, " +
46
+ "a[k] = #{a[k].inspect} and a[k] != old_vals[k] = #{(a[k] != old_vals[k]).inspect}, " +
47
+ "a = #{a.inspect}, " +
48
+ "o = #{o.to_yaml}, " +
49
+ "self = #{self.to_yaml}, "
50
+ end
51
+ end
52
+ end
53
+ o
54
+ end
55
+
56
+ def randomize
57
+ self.sort { |l,r| rand(2) - 1 }
58
+ end
59
+
60
+ def randomize!
61
+ self.sort! { |l,r| rand(2) - 1 }
62
+ end
63
+
64
+ def to_double_array
65
+ self.each_with_index { |x,i| self[i] = [x,x] }
66
+ self
67
+ end
68
+ end
69
+
70
+ def search_array_of_hash(data, value, key="value", text="label")
71
+ return_text = ""
72
+ data.each do |x|
73
+ return_text = x.to_hash[text.to_sym] if x.to_hash[key.to_sym].to_s == value.to_s
74
+ end
75
+ return_text
76
+ end
@@ -0,0 +1,69 @@
1
+ module SMKLib
2
+ module Browsers
3
+ def is_mobile_browser?(ua)
4
+ mobile_browsers = [
5
+ 'DoCoMo',
6
+ 'alcatel',
7
+ 'auditautomatic',
8
+ 'ericsson',
9
+ 'lg-g7000',
10
+ 'mitsu',
11
+ 'mot-.*',
12
+ 'nokian-gage',
13
+ 'opwv-sdk',
14
+ 'panasonic-[xg].*',
15
+ 'philips-.*',
16
+ 'r380',
17
+ 'r600',
18
+ 'sagem-3xxx',
19
+ 'sagem-9xx',
20
+ 'sagem-myx-.*',
21
+ 'samsung-sgh-[xevtasrn][0-9][0-9][0-9].*',
22
+ 'sec-sgh[cpqsavdex][0-9][0-9][0-9]',
23
+ 'sharp-tq-gx[0-9][0-9]',
24
+ 'sonyericsson',
25
+ 'alcatel',
26
+ 'ericssona2628s',
27
+ 'ericssonr320',
28
+ 'lg-[cfgltG0-9]*',
29
+ 'sie-[acfxvmniedsklt0-9]*',
30
+ 'sagem-m.*',
31
+ 'mot-[-abvcetdf0-9]*',
32
+ 'nokia[0-9]*',
33
+ 'panasonic',
34
+ 't66',
35
+ 'n21i',
36
+ 'n22i',
37
+ 'ts21i',
38
+ 'portalmmm',
39
+ 'ipcheck',
40
+ 'cnf2'
41
+ ]
42
+ is_it = false
43
+ modified_ua = ua.gsub(/[+ ]/, '_')
44
+ mobile_browsers.each do |x|
45
+ is_it = true if modified_ua.match(/^#{x}/)
46
+ end
47
+ return is_it
48
+ end
49
+
50
+ def user_agent
51
+ ua = request.env['HTTP_USER_AGENT']
52
+ if ua.nil?
53
+ "31337_h4x0r"
54
+ elsif ua.match(/Opera/)
55
+ "Opera"
56
+ elsif ua.match(/MSIE/)
57
+ "MSIE"
58
+ elsif ua.match(/Safari/)
59
+ "Safari"
60
+ elsif ua.match(/KHTML/)
61
+ "KHTML"
62
+ elsif is_mobile_browser?(ua)
63
+ "Mobile"
64
+ else # we are not making a difference for other browsers.
65
+ "Mozilla" # standard
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,103 @@
1
+ require 'RMagick'
2
+ require 'smklib/array_ext'
3
+
4
+ class Builder::XmlMarkup
5
+
6
+ # Builder Transaction ...
7
+
8
+ class AbortTransaction < ::RuntimeError; end
9
+
10
+ def transaction!(&block)
11
+ old_target = @target
12
+ @target = ''
13
+ begin
14
+ yield
15
+ @target = old_target + @target
16
+ rescue AbortTransaction => e
17
+ @target = old_target
18
+ end
19
+ end
20
+
21
+ def ignore_abort!(val = true)
22
+ @ignore_abort = val
23
+ end
24
+
25
+ def abort!
26
+ raise AbortTransaction, "abort" unless @ignore_abort
27
+ end
28
+
29
+ # Build Extensions ...
30
+
31
+ class << self
32
+ attr_accessor :environment
33
+ end
34
+
35
+ def get_ua
36
+ env = ENV
37
+ env = Builder::XmlMarkup.environment if Builder::XmlMarkup.environment
38
+ env['HTTP_USER_AGENT']
39
+ end
40
+
41
+ def tight_table(options = {})
42
+ table({ "cellspacing" => 0, "cellpadding" => 0, "border" => 0 }.merge(options)) { yield }
43
+ end
44
+
45
+ #cells is an array of objects that respond to to_s
46
+ def table_row(cells, tr_options = {}, td_options = {})
47
+ tr(tr_options) { cells.each_with_index { |i,k| td(td_options[k] || {}) { self << i.to_s } } }
48
+ end
49
+
50
+ def sortable_column_header(label, link, options = {})
51
+ #th({"x" => "y"}.merge(options)) do
52
+ th(options) do
53
+ if !label.empty?
54
+ a("href" => link) { self << "&nbsp;#{label}&nbsp;" }
55
+ else
56
+ self << "&nbsp;"
57
+ end
58
+ end
59
+ end
60
+
61
+ def real_filename(filename)
62
+ if defined?(RAILS_ROOT)
63
+ RAILS_ROOT + "/public/" + filename
64
+ else
65
+ filename
66
+ end
67
+ end
68
+
69
+ def get_img_size(filename)
70
+ im = Magick::Image.read(real_filename(filename)).first
71
+ return [im.columns, im.rows]
72
+ end
73
+
74
+ def img(options = {})
75
+ if get_ua =~ /MSIE 6.*Windows/
76
+ if options[:src] =~ /\.png$/
77
+ options[:style] = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='#{options[:src]}', sizingMethod='scale');" + options[:style].to_s
78
+ options[:width], options[:height] = get_img_size(options[:src]) unless options[:width] && options[:height]
79
+ options[:src] = '/images/spacer.gif'
80
+ end
81
+ end
82
+ if block_given?
83
+ method_missing(:img, options, yield)
84
+ else
85
+ method_missing(:img, options)
86
+ end
87
+ end
88
+
89
+ def nbsp(count=1)
90
+ self << (1..count).collect{ "&nbsp;" }.join
91
+ end
92
+
93
+ def ob2(ob, *extra, &block)
94
+ # yes this is kind of ugly but makes this a soft dependancy on OdlumBox2
95
+ ob = Class.const_get('OdlumBox2').new(ob) if ob.kind_of? Hash
96
+ div(*extra) do
97
+ ob.render(self) { |xml|
98
+ yield
99
+ }
100
+ end
101
+ end
102
+
103
+ end
@@ -0,0 +1,23 @@
1
+ require 'gettext/rails'
2
+
3
+ class Date
4
+ if Object.respond_to?('_')
5
+ raise "ye"
6
+ MONTHNAMES = [nil, _("January"), _("February"), _("March"), _("April"), _("May"), _("June"), _("July"), _("August"), _("September"), _("October"), _("November"), _("December")]
7
+ DAYNAMES = %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
8
+ ABBR_MONTHNAMES = [nil, _("Jan"), _("Feb"), _("Mar"), _("Apr"), _("May"), _("Jun"), _("Jul"), _("Aug"), _("Sep"), _("Oct"), _("Nov"), _("Dec")]
9
+ ABBR_DAYNAMES = %w(Sun Mon Tue Wed Thu Fri Sat)
10
+ elsif Locale.get.to_s == 'en'
11
+ MONTHNAMES = [nil] + %w(January February March April May June July August September October November December)
12
+ DAYNAMES = %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
13
+ ABBR_MONTHNAMES = [nil] + %w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
14
+ ABBR_DAYNAMES = %w(Sun Mon Tue Wed Thu Fri Sat)
15
+ elsif Locale.get.to_s == 'ja'
16
+ MONTHNAMES = [nil] + %w(一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月)
17
+ DAYNAMES = %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
18
+ ABBR_MONTHNAMES = [nil] + %w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
19
+ ABBR_DAYNAMES = %w(Sun Mon Tue Wed Thu Fri Sat)
20
+ else
21
+ raise 'unsupported language'
22
+ end
23
+ end
@@ -0,0 +1,27 @@
1
+ require_dependency 'smklib/object_ext'
2
+
3
+ module DebugSupport
4
+
5
+ def self.append_features(base)
6
+ super
7
+ base.before_filter :initialize_timing, :check_local_request
8
+ end
9
+
10
+ def initialize_timing
11
+ @time = Time.now
12
+ end
13
+
14
+ def local_request?
15
+ #session['local_request'] == 1
16
+ consider_all_requests_local or session['local_request'] == 1
17
+ end
18
+
19
+ def check_local_request
20
+ val = params['local_request'].to_i
21
+ default = consider_all_requests_local ? 1 : 0
22
+ session['local_request'] ||= default
23
+ session['local_request'] = val if val.in? [1, 0] unless params['local_request'].nil?
24
+ end
25
+
26
+ end
27
+
@@ -0,0 +1,70 @@
1
+ module SoftRaise
2
+ def soft_raise
3
+ exception = nil
4
+ ErrorMailer.deliver_snapshot('somekool@somekool.net', 'FRES:Warning Mailer <error@somekool.net>', exception, clean_backtrace(exception), session.instance_variable_get("@data"), params, request.env)
5
+ end
6
+ end
7
+
8
+ module ErrorMailerSupport
9
+
10
+ #attr_accessor :error_mailer_to
11
+
12
+ #def self.append_features(base)
13
+ # super
14
+ # base.before_filter :initialize_error_mailer
15
+ #end
16
+
17
+ def error_mailer_recipients
18
+ 'somekool@somekool.net'
19
+ end
20
+
21
+ def error_mailer_from
22
+ '[AppName]:Error Mailer <error@somekool.net>'
23
+ end
24
+
25
+ def log_error(exception)
26
+ super(exception)
27
+
28
+ begin
29
+ ErrorMailer.deliver_snapshot(error_mailer_recipients, error_mailer_from, exception, clean_backtrace(exception),
30
+ session.instance_variable_get("@data"), params, request.env) unless local_request?
31
+ rescue => e
32
+ logger.error(e)
33
+ end
34
+ end
35
+
36
+ def rescue_action_in_public(exception) #:doc:
37
+ case exception.class.to_s
38
+ when "ActionController::RoutingError", "ActionController::UnknownAction"
39
+ render :file => "#{RAILS_ROOT}/public/smklib/404.html", :status => 404
40
+ when "Mysql::Error"
41
+ render :file => "#{RAILS_ROOT}/public/smklib/500-mysql.html", :status => 500
42
+ else
43
+ render :file => "#{RAILS_ROOT}/public/smklib/500.html", :status => 500
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ class ErrorMailer < ActionMailer::Base
50
+
51
+ def snapshot(rcpt, from, exception, trace, p_session, p_params, p_env, sent_on = Time.now)
52
+ @recipients = rcpt
53
+ @from = from
54
+ if exception.class.to_s == "ActionController::UnknownAction"
55
+ @subject = "[NotFound] #{exception.class.to_s} in #{p_env['REQUEST_URI']}"
56
+ else
57
+ @subject = "[Error] #{exception.class.to_s} in #{p_env['REQUEST_URI']}"
58
+ end
59
+ @sent_on = sent_on
60
+ @body["v_exception"] = exception
61
+ @body["v_trace"] = trace
62
+ @body["v_session"] = p_session
63
+ @body["v_params"] = p_params
64
+ @body["v_env"] = p_env
65
+ content_type "text/html"
66
+ end
67
+
68
+ end
69
+ #ErrorMailer.template_root = "#{RAILS_ROOT}/vendor/smklib/app/views"
70
+