auto_error 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,21 +6,16 @@ class AppError extends App.Views.PolledItem
6
6
  render: ->
7
7
  json = @model.toJSON()
8
8
  json.prettyData = []
9
+ json.backtrace = @model.get('backtrace').replace( /\n/g, "<br/>" )
9
10
  for k, v of json.data
10
- json.prettyData.push "#{k}: #{v}"
11
- json.prettyData = json.prettyData.join("\n")
11
+ json.prettyData.push "#{k}: <tt>#{v}</tt>"
12
+ json.prettyData = json.prettyData.join("<br/>")
12
13
  json.timestamp = moment(json.created_at).format( "YYYY-MM-DD[<br/>at] h:mma" )
13
14
  @$el.html( @template( json ) )
14
15
  return @
15
16
  toggleBacktrace: ->
16
17
  link = @$('a.show_backtrace')
17
- bt = @$('.backtrace')
18
- if bt.is(':visible')
19
- bt.hide()
20
- link.text('show backtrace...')
21
- else
22
- bt.html( @model.get('backtrace').replace( /\n/g, "<br/>" ) ).show()
23
- link.text('hide backtrace...')
18
+ @$('.backtrace').reveal()
24
19
  destroy: ->
25
20
  @model.destroy()
26
21
  @remove()
@@ -14,7 +14,7 @@ class App.Views.PollingList extends Backbone.View
14
14
  @emptyMessage = @body.html().replace(/[\r\n]\s+/g, '')
15
15
  @collection.on 'remove', @remove, @
16
16
  @collection.on 'add', @render, @
17
- @collection.fetch( update: true )
17
+ @collection.fetch( update: true, success: _.bind(@render, @) )
18
18
  @views = {}
19
19
  remove: ( m ) ->
20
20
  @views[m.id] = null
@@ -3,6 +3,7 @@
3
3
  //= require auto_error/moment
4
4
  //= require auto_error/underscore-1.4.4
5
5
  //= require auto_error/backbone-0.9.10
6
+ //= require auto_error/foundation-reveal
6
7
  //= require handlebars.runtime
7
8
  //= require_tree ../../templates/auto_error
8
9
  //= require ./app_errors
@@ -1,8 +1,15 @@
1
+ body {
2
+ background: transparent;
3
+ }
4
+
1
5
  table.polling tr td p.loading_message {
2
6
  font-size: 20px;
3
7
  margin: 25px 0;
4
8
  text-align: center;
5
9
  }
10
+ table.polling tbody td small.time {
11
+ font-size: 12px;
12
+ }
6
13
 
7
14
  table.polling tbody pre {
8
15
  font-size: 13px;
@@ -35,11 +42,30 @@ table.polling tfoot .poller .spinner {
35
42
  }
36
43
 
37
44
  #app_errors table tbody .backtrace {
38
- width: 530px;
39
- height: 250px;
40
45
  overflow: scroll;
41
46
  font-family: monospace;
42
47
  font-size: 13px;
43
48
  line-height: 15px;
44
49
  white-space: nowrap;
45
50
  }
51
+ #app_errors table tbody .data {
52
+ font-family: monospace;
53
+ font-size: 13px;
54
+ line-height: 15px;
55
+ white-space: nowrap;
56
+ }
57
+
58
+
59
+ .reveal-modal {
60
+ top: -100px;
61
+ width: 960px;
62
+ margin-left: -480px;
63
+ display: block; /* wat? */
64
+ }
65
+ .reveal-modal h4 {
66
+ margin-top: 0;
67
+ }
68
+ .close-reveal-modal {
69
+ top: 0;
70
+ left: 5px;
71
+ }
@@ -2,10 +2,14 @@
2
2
  <strong>{{message}}</strong>
3
3
  <br/>
4
4
  <a href="javascript:void(0);" class='show_backtrace'>show backtrace...</a>
5
- <div class='backtrace' style='display: none;'></div>
5
+ <div class='backtrace reveal-modal'>
6
+ <a class="close-reveal-modal">&#215;</a>
7
+ <h4>{{message}}</h4>
8
+ <pre>{{{backtrace}}}</pre>
9
+ </div>
6
10
  </td>
7
- <td><pre>{{{prettyData}}}</pre></td>
8
- <td>{{{timestamp}}}</td>
9
- <td>
11
+ <td><div class='data'>{{{prettyData}}}</div></td>
12
+ <td width='120px'><small class='time'>{{{timestamp}}}</small></td>
13
+ <td width='85px'>
10
14
  <a href="javascript:void(0);" class='remove button radius tiny secondary'>resolved</a>
11
15
  </td>
@@ -3,7 +3,7 @@ class AutoError::AppErrorsController < AutoError::ApplicationController
3
3
 
4
4
  def index
5
5
  @errors = AutoError::AppError.unresolved
6
- render json: @errors.map { |ae| AutoError::AppErrorDecorator.new(ae).as_json }
6
+ render json: @errors.map { |ae| AutoError::AppErrorDecorator.new(ae).as_json( @h ) }
7
7
  end
8
8
 
9
9
  def destroy
@@ -1,11 +1,16 @@
1
- class AutoError::ApplicationController < ActionController::Base
1
+ class AutoError::ApplicationController < ::ApplicationController
2
2
  include AutoError::ApplicationHelper
3
3
  helper :all
4
4
 
5
5
  protected
6
6
 
7
7
  def ensure_authenticated
8
- context = AutoError::AuthContext.new(env)
9
- raise AutoError::Errors::Denied unless AutoError::Config.auth_with.call(context)
8
+ @h = AutoError::HelperContext.new( env )
9
+
10
+ # raise unless the auth_with helper returns a truthy value
11
+ # this way we can let the user access their own auth logic
12
+ unless AutoError::Config.auth_with.(@h)
13
+ raise AutoError::Errors::Denied
14
+ end
10
15
  end
11
16
  end
@@ -1,30 +1,41 @@
1
1
  class AutoError::ErrorsController < AutoError::ApplicationController
2
2
 
3
3
  def show
4
+ # fix PATH_INFO to be the actual request path, and not /500
5
+ env['PATH_INFO'] = env['ORIGINAL_FULLPATH']
6
+
4
7
  # reset action_controller.instance to the original controller
5
8
  # that caused the exception
6
9
  env['action_controller.instance'] = env.delete('auto_error.original_controller.instance')
10
+ @controller = env['action_controller.instance']
7
11
 
8
12
  @exception = env['action_dispatch.exception']
9
13
  @status_code = ActionDispatch::ExceptionWrapper.new(env, @exception).status_code
10
14
  @rescue_response = ActionDispatch::ExceptionWrapper.rescue_responses[@exception.class.name]
11
- @params = env['action_dispatch.request.parameters'].symbolize_keys
12
15
 
13
16
  @status_code = 500 unless [403, 404].include?(@status_code)
14
17
 
15
18
  if @status_code == 500
19
+ @request = @controller.request
20
+ @params = @request.filtered_parameters.symbolize_keys
16
21
  controller = "#{@params[:controller].camelize}Controller" rescue 'N/A'
17
22
  action = @params[:action] || 'N/A'
18
23
  where = { controller: controller, action: action }
19
24
  data = {
20
- path: env['REQUEST_URI'],
21
- method: env['REQUEST_METHOD'],
22
- ip: env['REMOTE_ADDR']
25
+ path: @request.fullpath.split('?').first,
26
+ method: @request.method,
27
+ ip: @request.remote_ip,
28
+ params: @params.except( *(%w{
29
+ controller action format _method only_path
30
+ }.map(&:to_sym) ) )
23
31
  }
32
+ # Rails.logger.error [controller,action, where, data].map(&:inspect).join("\n")
24
33
  AutoError::AppError.log!( env, @exception, where, data )
25
34
  end
26
35
 
27
36
  AutoError::Config.error_template_renderer.bind(self).( @status_code )
37
+ rescue => explosion
38
+ Rails.logger.error "\nAutoError exploded while handling an exception: #{@exception.inspect}\nHere's the error: #{explosion.inspect}\n"
28
39
  end
29
40
 
30
41
  end
@@ -1,13 +1,32 @@
1
1
  module AutoError
2
2
  class AppErrorDecorator < Draper::Decorator
3
- def as_json
3
+ def as_json( context )
4
4
  r = source.attributes
5
5
  (r['data']||{}).entries.each do |k, v|
6
6
  next if v.nil?
7
- handler = AutoError::Config.data_handlers[k.to_sym].bind(ViewContext.new)
8
- r['data'][k.to_s] = handler.(v).html_safe
7
+ k = k.to_sym
8
+ if k != :params || AutoError::Config.data_handlers.has_key?(k)
9
+ handler = AutoError::Config.data_handlers[k].bind(context)
10
+ processed = handler.(v)
11
+ elsif k == :params
12
+ processed = handle_params(v)
13
+ end
14
+ r['data'][k.to_s] = processed.html_safe
9
15
  end
10
16
  r
11
17
  end
18
+
19
+ private
20
+
21
+ def handle_params( h )
22
+ %{
23
+ <a href='javascript:void(0);' onclick='$(this).siblings(".params").reveal();'>show params...</a>
24
+ <div class='params reveal-modal'>
25
+ <a class="close-reveal-modal">&#215;</a>
26
+ <h4>Params</h4>
27
+ <pre>#{JSON.pretty_generate(h)}</pre>
28
+ </div>
29
+ }
30
+ end
12
31
  end
13
32
  end
@@ -1,5 +1,7 @@
1
1
  module AutoError
2
2
  class AppError < ActiveRecord::Base
3
+ attr_accessible *%w{ controller action data klass message backtrace }
4
+
3
5
  before_create :generate_group
4
6
 
5
7
  serialize :data
@@ -12,13 +14,15 @@ module AutoError
12
14
  opts.merge!( {
13
15
  klass: exception.class.name,
14
16
  message: exception.message,
15
- backtrace: (exception.backtrace || []).join("\n"),
17
+ backtrace: (
18
+ exception.backtrace ? clean_backtrace(exception.backtrace) : []
19
+ ).join("\n")
16
20
  } )
17
21
  app_error = create!( opts )
18
22
 
19
23
  if AutoError::Config.email_on_error.any?
20
24
  begin
21
- send_email!( env, exception )
25
+ send_email!( env, exception, opts[:data] )
22
26
  rescue
23
27
  $stderr.puts "AutoError failed to send exception notification email to #{AutoError::Config.email_on_error.inspect} -- #{$!.inspect}"
24
28
  end
@@ -42,11 +46,12 @@ module AutoError
42
46
 
43
47
  private
44
48
 
45
- def self.send_email!( env, exception )
49
+ def self.send_email!( env, exception, data )
46
50
  options = env['exception_notifier.options'] || {}
47
51
  options[:ignore_exceptions] ||= ExceptionNotifier.default_ignore_exceptions
48
52
  options[:email_prefix] ||= "[#{Rails.application.class.name.split('::').first} ERROR] "
49
53
  options[:exception_recipients] = AutoError::Config.email_on_error
54
+ options[:data] = data
50
55
 
51
56
  unless Array.wrap(options[:ignore_exceptions]).include?( exception.class )
52
57
  ExceptionNotifier::Notifier.exception_notification( env, exception, options ).deliver
@@ -54,6 +59,11 @@ module AutoError
54
59
  end
55
60
  end
56
61
 
62
+ def self.clean_backtrace( backtrace )
63
+ return backtrace unless Rails.respond_to?( :backtrace_cleaner )
64
+ Rails.backtrace_cleaner.send( :filter, backtrace )
65
+ end
66
+
57
67
  def generate_group
58
68
  self.group = Digest::SHA1.hexdigest( [
59
69
  self.klass.to_s, self.message.to_s,
@@ -0,0 +1,5 @@
1
+ * URL : <%= raw @request.fullpath.split('?').first %>
2
+ * IP address: <%= raw @request.remote_ip %>
3
+ * Parameters: <%= raw @request.filtered_parameters.inspect %>
4
+ * Rails root: <%= raw Rails.root %>
5
+ * Timestamp : <%= raw Time.current %>
@@ -0,0 +1,5 @@
1
+ * URL : <%= raw @request.fullpath.split('?').first %>
2
+ * IP address: <%= raw @request.remote_ip %>
3
+ * Parameters: <%= raw @request.filtered_parameters.inspect %>
4
+ * Rails root: <%= raw Rails.root %>
5
+ * Timestamp : <%= raw Time.current %>
@@ -7,8 +7,8 @@ module AutoError
7
7
  mattr_accessor :auth_with
8
8
  @@auth_with = nil
9
9
 
10
- mattr_accessor :auth_helpers
11
- @@auth_helpers = nil
10
+ mattr_accessor :helpers
11
+ @@helpers = nil
12
12
 
13
13
  mattr_accessor :email_on_error
14
14
  @@email_on_error = nil
@@ -24,15 +24,22 @@ module AutoError
24
24
  def self.set_defaults
25
25
  self.setup do |config|
26
26
  config.error_template_renderer = ->( status ) do
27
- render template: "/errors/#{status}", layout: 'errors', status: status
27
+ render template: "/errors/#{status}",
28
+ layout: 'errors',
29
+ status: status
28
30
  end
29
31
 
30
32
  config.email_on_error = []
33
+ ExceptionNotifier::Notifier.prepend_view_path(
34
+ AutoError::Engine.root.join( *%w{app views auto_error} )
35
+ )
31
36
 
32
37
  config.auth_with = ->( c ) { true }
33
- config.auth_helpers = [ 'ApplicationHelper' ]
38
+ config.helpers = [ 'ApplicationHelper' ]
34
39
 
35
- config.data_handlers = Hash.new { |h, k| h[k] = ->( value ) { "<strong>#{value}</strong>" } }
40
+ config.data_handlers = Hash.new do |h, k|
41
+ h[k] = ->( value ) { "<strong>#{value}</strong>" }
42
+ end
36
43
  end
37
44
  end
38
45
  end
@@ -1,5 +1,4 @@
1
1
  module AutoError
2
-
3
2
  # Convenience methods added to ApplicationController.
4
3
  module ContextShorthand
5
4
  def add_error_context( context )
@@ -11,5 +10,4 @@ module AutoError
11
10
  end
12
11
 
13
12
  ActionController::Base.send :include, AutoError::ContextShorthand
14
-
15
13
  end
@@ -0,0 +1,34 @@
1
+ module AutoError
2
+ class HelperContext
3
+ attr_accessor :env
4
+
5
+ def initialize( env )
6
+ @env = env
7
+
8
+ AutoError::Config.helpers.each do |mod_name|
9
+ # grab the module by name we were given
10
+ # it is available in the 'parent' Rails.application
11
+ mod = Rails.application.class.qualified_const_get(mod_name)
12
+
13
+ class_eval do
14
+ # include that module in this HelperContext
15
+ send( :include, mod )
16
+
17
+ # but go through all of its instance methods
18
+ # and alias-method-chain style twiddle them so we can bind
19
+ # them to the correct environment inside auto_error
20
+ mod.instance_methods.each do |imeth|
21
+ alias :"#{imeth}_without_env" :"#{imeth}"
22
+ send( :define_method, :"#{imeth}" ) do |*args|
23
+ method( :"#{imeth}_without_env" ).to_proc.bind( @env ).call(*args)
24
+ end
25
+ end
26
+
27
+ # also include rails helpers and ActionView helpers
28
+ send( :include, ActionView::Helpers )
29
+ send( :include, Rails.application.routes.url_helpers )
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,3 @@
1
1
  module AutoError
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/auto_error.rb CHANGED
@@ -16,8 +16,7 @@ require 'auto_error/version'
16
16
  require 'auto_error/config'
17
17
  require 'auto_error/errors'
18
18
  require 'auto_error/context_shorthand'
19
- require 'auto_error/view_context'
20
- require 'auto_error/auth_context'
19
+ require 'auto_error/helper_context'
21
20
  require 'auto_error/engine'
22
21
 
23
22
  module AutoError
@@ -28,7 +27,7 @@ module AutoError
28
27
 
29
28
  original_exceptions_app = app_config.exceptions_app || ActionDispatch::PublicExceptions.new(Rails.public_path)
30
29
  app_config.exceptions_app = ->(env) do
31
- # puts "Handling exception for #{env['action_controller.instance'].class}"
30
+ puts "Handling exception for #{env['action_controller.instance'].class}"
32
31
  controller_class = env['action_controller.instance'].class
33
32
  if controller_class.nil? || AutoError.constants.any? { |c| AutoError.const_get(c) == controller_class }
34
33
  # do not log/handle exception at all if the error is actually
@@ -0,0 +1,161 @@
1
+ /*
2
+ * jQuery Reveal Plugin 1.0
3
+ * www.ZURB.com
4
+ * Copyright 2010, ZURB
5
+ * Free to use under the MIT license.
6
+ * http://www.opensource.org/licenses/mit-license.php
7
+ */
8
+
9
+
10
+ (function($) {
11
+
12
+ /*---------------------------
13
+ Defaults for Reveal
14
+ ----------------------------*/
15
+
16
+ /*---------------------------
17
+ Listener for data-reveal-id attributes
18
+ ----------------------------*/
19
+
20
+ // How about no, scott?
21
+ // $('a[data-reveal-id]').live('click', function(e) {
22
+ // e.preventDefault();
23
+ // var modalLocation = $(this).attr('data-reveal-id');
24
+ // $('#'+modalLocation).reveal($(this).data());
25
+ // });
26
+
27
+ /*---------------------------
28
+ Extend and Execute
29
+ ----------------------------*/
30
+
31
+ $.fn.reveal = function(options) {
32
+
33
+
34
+ var defaults = {
35
+ animation: 'fadeAndPop', //fade, fadeAndPop, none
36
+ animationspeed: 300, //how fast animtions are
37
+ closeonbackgroundclick: true, //if you click background will modal close?
38
+ dismissmodalclass: 'close-reveal-modal' //the class of a button or element that will close an open modal
39
+ };
40
+
41
+ //Extend dem' options
42
+ var options = $.extend({}, defaults, options);
43
+
44
+ return this.each(function() {
45
+
46
+ /*---------------------------
47
+ Global Variables
48
+ ----------------------------*/
49
+ var modal = $(this),
50
+ topMeasure = parseInt(modal.css('top')),
51
+ topOffset = modal.height() + topMeasure,
52
+ locked = false,
53
+ modalBG = $('.reveal-modal-bg');
54
+
55
+ /*---------------------------
56
+ Create Modal BG
57
+ ----------------------------*/
58
+ if(modalBG.length == 0) {
59
+ modalBG = $('<div class="reveal-modal-bg" />').insertAfter(modal);
60
+ }
61
+
62
+ /*---------------------------
63
+ Open & Close Animations
64
+ ----------------------------*/
65
+ //Entrance Animations
66
+ modal.bind('reveal:open', function () {
67
+ modalBG.unbind('click.modalEvent');
68
+ $('.' + options.dismissmodalclass).unbind('click.modalEvent');
69
+ if(!locked) {
70
+ lockModal();
71
+ if(options.animation == "fadeAndPop") {
72
+ modal.css({'top': $(document).scrollTop()-topOffset, 'opacity' : 0, 'visibility' : 'visible'});
73
+ modalBG.fadeIn(options.animationspeed/2);
74
+ modal.delay(options.animationspeed/2).animate({
75
+ "top": $(document).scrollTop()+topMeasure + 'px',
76
+ "opacity" : 1
77
+ }, options.animationspeed,unlockModal());
78
+ }
79
+ if(options.animation == "fade") {
80
+ modal.css({'opacity' : 0, 'visibility' : 'visible', 'top': $(document).scrollTop()+topMeasure});
81
+ modalBG.fadeIn(options.animationspeed/2);
82
+ modal.delay(options.animationspeed/2).animate({
83
+ "opacity" : 1
84
+ }, options.animationspeed,unlockModal());
85
+ }
86
+ if(options.animation == "none") {
87
+ modal.css({'visibility' : 'visible', 'top':$(document).scrollTop()+topMeasure});
88
+ modalBG.css({"display":"block"});
89
+ unlockModal()
90
+ }
91
+ }
92
+ modal.unbind('reveal:open');
93
+ });
94
+
95
+ //Closing Animation
96
+ modal.bind('reveal:close', function () {
97
+ if(!locked) {
98
+ lockModal();
99
+ if(options.animation == "fadeAndPop") {
100
+ modalBG.delay(options.animationspeed).fadeOut(options.animationspeed);
101
+ modal.animate({
102
+ "top": $(document).scrollTop()-topOffset + 'px',
103
+ "opacity" : 0
104
+ }, options.animationspeed/2, function() {
105
+ modal.css({'top':topMeasure, 'opacity' : 1, 'visibility' : 'hidden'});
106
+ unlockModal();
107
+ });
108
+ }
109
+ if(options.animation == "fade") {
110
+ modalBG.delay(options.animationspeed).fadeOut(options.animationspeed);
111
+ modal.animate({
112
+ "opacity" : 0
113
+ }, options.animationspeed, function() {
114
+ modal.css({'opacity' : 1, 'visibility' : 'hidden', 'top' : topMeasure});
115
+ unlockModal();
116
+ });
117
+ }
118
+ if(options.animation == "none") {
119
+ modal.css({'visibility' : 'hidden', 'top' : topMeasure});
120
+ modalBG.css({'display' : 'none'});
121
+ }
122
+ }
123
+ modal.unbind('reveal:close');
124
+ });
125
+
126
+ /*---------------------------
127
+ Open and add Closing Listeners
128
+ ----------------------------*/
129
+ //Open Modal Immediately
130
+ modal.trigger('reveal:open')
131
+
132
+ //Close Modal Listeners
133
+ var closeButton = $('.' + options.dismissmodalclass).bind('click.modalEvent', function () {
134
+ modal.trigger('reveal:close')
135
+ });
136
+
137
+ if(options.closeonbackgroundclick) {
138
+ modalBG.css({"cursor":"pointer"})
139
+ modalBG.bind('click.modalEvent', function () {
140
+ modal.trigger('reveal:close')
141
+ });
142
+ }
143
+ $('body').keyup(function(e) {
144
+ if(e.which===27){ modal.trigger('reveal:close'); } // 27 is the keycode for the Escape key
145
+ });
146
+
147
+
148
+ /*---------------------------
149
+ Animations Locks
150
+ ----------------------------*/
151
+ function unlockModal() {
152
+ locked = false;
153
+ }
154
+ function lockModal() {
155
+ locked = true;
156
+ }
157
+
158
+ });//each call
159
+ }//orbit plugin call
160
+ })(jQuery);
161
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auto_error
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-12 00:00:00.000000000 Z
12
+ date: 2013-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -261,6 +261,8 @@ files:
261
261
  - app/decorators/auto_error/app_error_decorator.rb
262
262
  - app/helpers/auto_error/application_helper.rb
263
263
  - app/models/auto_error/app_error.rb
264
+ - app/views/auto_error/exception_notifier/_request.html.erb
265
+ - app/views/auto_error/exception_notifier/_request.text.erb
264
266
  - app/views/auto_error/main/index.html.haml
265
267
  - app/views/errors/404.html.erb
266
268
  - app/views/errors/500.html.erb
@@ -268,18 +270,18 @@ files:
268
270
  - app/views/layouts/errors.html.erb
269
271
  - config/routes.rb
270
272
  - db/migrate/20130128004546_create_auto_error_app_errors.rb
271
- - lib/auto_error/auth_context.rb
272
273
  - lib/auto_error/config.rb
273
274
  - lib/auto_error/context_shorthand.rb
274
275
  - lib/auto_error/engine.rb
275
276
  - lib/auto_error/errors.rb
277
+ - lib/auto_error/helper_context.rb
276
278
  - lib/auto_error/version.rb
277
- - lib/auto_error/view_context.rb
278
279
  - lib/auto_error.rb
279
280
  - lib/core_ext/proc_ext.rb
280
281
  - lib/tasks/auto_error_tasks.rake
281
282
  - lib/templates/auto_error.rb
282
283
  - vendor/assets/javascripts/auto_error/backbone-0.9.10.js
284
+ - vendor/assets/javascripts/auto_error/foundation-reveal.js
283
285
  - vendor/assets/javascripts/auto_error/moment.js
284
286
  - vendor/assets/javascripts/auto_error/underscore-1.4.4.js
285
287
  - vendor/assets/stylesheets/auto_error/foundation.css
@@ -1,18 +0,0 @@
1
- module AutoError
2
- class AuthContext
3
- def initialize( env )
4
- AutoError::Config.auth_helpers.each do |mod_name|
5
- mod = Rails.application.class.qualified_const_get(mod_name)
6
- class_eval do
7
- send( :include, mod )
8
- mod.instance_methods.each do |imeth|
9
- alias :"#{imeth}_without_env" :"#{imeth}"
10
- send( :define_method, imeth ) do
11
- method( :"#{imeth}_without_env" ).to_proc.bind( env )
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,10 +0,0 @@
1
- module AutoError
2
- class ViewContext
3
- def initialize
4
- class_eval do
5
- self.send( :include, ActionView::Helpers )
6
- self.send( :include, Rails.application.routes.url_helpers )
7
- end
8
- end
9
- end
10
- end