ixtlan-error-handler 0.1.0 → 0.1.1
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.
- data/lib/ixtlan/errors/error_dumper.rb +7 -5
 - data/lib/ixtlan/errors/error_handler.rb +20 -17
 - data/lib/ixtlan/errors/mailer.rb +1 -1
 - data/lib/ixtlan/errors/railtie.rb +1 -1
 - data/spec/error_dumper_spec.rb +113 -0
 - data/spec/error_handler_spec.rb +138 -0
 - metadata +22 -36
 - data/README.textile +0 -31
 - data/features/generators.feature +0 -5
 - data/features/step_definitions/simple_steps.rb +0 -22
 
| 
         @@ -1,4 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require 'ixtlan/errors/mailer'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
       2 
4 
     | 
    
         
             
            module Ixtlan
         
     | 
| 
       3 
5 
     | 
    
         
             
              module Errors
         
     | 
| 
       4 
6 
     | 
    
         
             
                class ErrorDumper
         
     | 
| 
         @@ -15,16 +17,16 @@ module Ixtlan 
     | 
|
| 
       15 
17 
     | 
    
         
             
                  end
         
     | 
| 
       16 
18 
     | 
    
         | 
| 
       17 
19 
     | 
    
         
             
                  def dump_dir
         
     | 
| 
       18 
     | 
    
         
            -
                     
     | 
| 
      
 20 
     | 
    
         
            +
                    if @dump_dir.blank?
         
     | 
| 
       19 
21 
     | 
    
         
             
                      @dump_dir = File.join(Rails.root, "log", "errors")
         
     | 
| 
       20 
22 
     | 
    
         
             
                      FileUtils.mkdir_p(@dump_dir)
         
     | 
| 
       21 
23 
     | 
    
         
             
                    end
         
     | 
| 
       22 
24 
     | 
    
         
             
                    @dump_dir 
         
     | 
| 
       23 
25 
     | 
    
         
             
                  end
         
     | 
| 
       24 
26 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                  def dump_dir=( 
     | 
| 
      
 27 
     | 
    
         
            +
                  def dump_dir=(dir)
         
     | 
| 
       26 
28 
     | 
    
         
             
                    @dump_dir = dir
         
     | 
| 
       27 
     | 
    
         
            -
                    FileUtils.mkdir_p(@dump_dir)  
     | 
| 
      
 29 
     | 
    
         
            +
                    FileUtils.mkdir_p(@dump_dir) unless dir.blank?
         
     | 
| 
       28 
30 
     | 
    
         
             
                    @dump_dir
         
     | 
| 
       29 
31 
     | 
    
         
             
                  end
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
         @@ -34,7 +36,7 @@ module Ixtlan 
     | 
|
| 
       34 
36 
     | 
    
         
             
                    logger = Logger.new(log_file)
         
     | 
| 
       35 
37 
     | 
    
         | 
| 
       36 
38 
     | 
    
         
             
                    dump_environment(logger, exception, controller)
         
     | 
| 
       37 
     | 
    
         
            -
                    Mailer. 
     | 
| 
      
 39 
     | 
    
         
            +
                    Mailer.error_notification(@email_from, @email_to, exception, log_file).deliver unless (@email_to.blank? || @email_from.blank?)
         
     | 
| 
       38 
40 
     | 
    
         
             
                    log_file
         
     | 
| 
       39 
41 
     | 
    
         
             
                  end
         
     | 
| 
       40 
42 
     | 
    
         | 
| 
         @@ -65,7 +67,7 @@ module Ixtlan 
     | 
|
| 
       65 
67 
     | 
    
         | 
| 
       66 
68 
     | 
    
         
             
                    dump_environment_header(logger, "EXCEPTION");
         
     | 
| 
       67 
69 
     | 
    
         
             
                    logger.error("#{exception.class}:#{exception.message}")
         
     | 
| 
       68 
     | 
    
         
            -
                    logger.error("\t" + exception.backtrace.join("\n\t"))
         
     | 
| 
      
 70 
     | 
    
         
            +
                    logger.error("\t" + exception.backtrace.join("\n\t")) if exception.backtrace
         
     | 
| 
       69 
71 
     | 
    
         
             
                  end
         
     | 
| 
       70 
72 
     | 
    
         | 
| 
       71 
73 
     | 
    
         
             
                  def dump_hashmap(logger, map)
         
     | 
| 
         @@ -5,28 +5,32 @@ module Ixtlan 
     | 
|
| 
       5 
5 
     | 
    
         
             
                  protected
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                  def internal_server_error(exception)
         
     | 
| 
      
 8 
     | 
    
         
            +
                    log_user_error(exception)
         
     | 
| 
       8 
9 
     | 
    
         
             
                    dump_error(exception)
         
     | 
| 
       9 
     | 
    
         
            -
                     
     | 
| 
       10 
     | 
    
         
            -
                    error_page(:internal_server_error, exception, "internal server error: #{exception.class.name}")
         
     | 
| 
      
 10 
     | 
    
         
            +
                    error_page(:internal_server_error, "internal server error: #{exception.class.name}")
         
     | 
| 
       11 
11 
     | 
    
         
             
                  end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
                  def page_not_found(exception)
         
     | 
| 
       14 
14 
     | 
    
         
             
                    log_user_error(exception)
         
     | 
| 
       15 
     | 
    
         
            -
                     
     | 
| 
       16 
     | 
    
         
            -
                    status = status == :internal_server_error ? :not_found : status
         
     | 
| 
       17 
     | 
    
         
            -
                    error_page(status, exception, "page not found")
         
     | 
| 
      
 15 
     | 
    
         
            +
                    error_page(:not_found, "page not found")
         
     | 
| 
       18 
16 
     | 
    
         
             
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                    #status = rescue_responses[exception.class.name]
         
     | 
| 
      
 18 
     | 
    
         
            +
                    #status = status == :internal_server_error ? :not_found : status
         
     | 
| 
      
 19 
     | 
    
         
            +
                    #error_page(status, "page not found")
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
                  def stale_resource(exception)
         
     | 
| 
       21 
22 
     | 
    
         
             
                    log_user_error(exception)
         
     | 
| 
       22 
     | 
    
         
            -
                     
     | 
| 
       23 
     | 
    
         
            -
                      format.html {
         
     | 
| 
       24 
     | 
    
         
            -
                        render_stale_error_page
         
     | 
| 
       25 
     | 
    
         
            -
                      }
         
     | 
| 
       26 
     | 
    
         
            -
                      format.xml { head :conflict }
         
     | 
| 
       27 
     | 
    
         
            -
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                    error_page(:conflict, "stale resource")
         
     | 
| 
       28 
24 
     | 
    
         
             
                  end
         
     | 
| 
       29 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                  #   respond_to do |format|
         
     | 
| 
      
 27 
     | 
    
         
            +
                  #     format.html {
         
     | 
| 
      
 28 
     | 
    
         
            +
                  #       render_stale_error_page
         
     | 
| 
      
 29 
     | 
    
         
            +
                  #     }
         
     | 
| 
      
 30 
     | 
    
         
            +
                  #     format.xml { head :conflict }
         
     | 
| 
      
 31 
     | 
    
         
            +
                  #   end
         
     | 
| 
      
 32 
     | 
    
         
            +
                  # end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
       30 
34 
     | 
    
         
             
                  def render_error_page_with_session(status)
         
     | 
| 
       31 
35 
     | 
    
         
             
                    render :template => "errors/error_with_session", :status => status
         
     | 
| 
       32 
36 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -35,15 +39,15 @@ module Ixtlan 
     | 
|
| 
       35 
39 
     | 
    
         
             
                    render :template => "errors/error", :status => status
         
     | 
| 
       36 
40 
     | 
    
         
             
                  end
         
     | 
| 
       37 
41 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
                  def render_stale_error_page
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
                  # def render_stale_error_page
         
     | 
| 
      
 43 
     | 
    
         
            +
                  #   render :template => "errors/stale", :status => :conflict
         
     | 
| 
      
 44 
     | 
    
         
            +
                  # end
         
     | 
| 
       41 
45 
     | 
    
         | 
| 
       42 
46 
     | 
    
         
             
                  private
         
     | 
| 
       43 
47 
     | 
    
         | 
| 
       44 
48 
     | 
    
         
             
                  if defined? ::Ixtlan::Audit
         
     | 
| 
       45 
49 
     | 
    
         
             
                    def user_logger
         
     | 
| 
       46 
     | 
    
         
            -
                      @user_logger ||= Ixtlan::Audit::UserLogger.new(Rails. 
     | 
| 
      
 50 
     | 
    
         
            +
                      @user_logger ||= Ixtlan::Audit::UserLogger.new(Rails.configuration.audit_manager)
         
     | 
| 
       47 
51 
     | 
    
         
             
                    end
         
     | 
| 
       48 
52 
     | 
    
         | 
| 
       49 
53 
     | 
    
         
             
                    def log_user_error(exception)
         
     | 
| 
         @@ -56,7 +60,7 @@ module Ixtlan 
     | 
|
| 
       56 
60 
     | 
    
         
             
                    end
         
     | 
| 
       57 
61 
     | 
    
         
             
                  end
         
     | 
| 
       58 
62 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                  def error_page(status,  
     | 
| 
      
 63 
     | 
    
         
            +
                  def error_page(status, notice)
         
     | 
| 
       60 
64 
     | 
    
         
             
                    respond_to do |format|
         
     | 
| 
       61 
65 
     | 
    
         
             
                      format.html {
         
     | 
| 
       62 
66 
     | 
    
         
             
                        @notice = notice
         
     | 
| 
         @@ -72,7 +76,6 @@ module Ixtlan 
     | 
|
| 
       72 
76 
     | 
    
         
             
                  end
         
     | 
| 
       73 
77 
     | 
    
         | 
| 
       74 
78 
     | 
    
         
             
                  def dump_error(exception)
         
     | 
| 
       75 
     | 
    
         
            -
                    log_user_error(exception)
         
     | 
| 
       76 
79 
     | 
    
         
             
                    Rails.configuration.error_dumper.dump(self, exception)
         
     | 
| 
       77 
80 
     | 
    
         
             
                  end
         
     | 
| 
       78 
81 
     | 
    
         
             
                end
         
     | 
    
        data/lib/ixtlan/errors/mailer.rb
    CHANGED
    
    
| 
         @@ -9,7 +9,7 @@ module Ixtlan 
     | 
|
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                  config.before_configuration do |app|
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                    path = File.join(File.dirname(__FILE__), " 
     | 
| 
      
 12 
     | 
    
         
            +
                    path = File.join(File.dirname(__FILE__), "..", "..")
         
     | 
| 
       13 
13 
     | 
    
         
             
                    unless ActionMailer::Base.view_paths.member? path
         
     | 
| 
       14 
14 
     | 
    
         
             
                      ActionMailer::Base.view_paths= [ActionMailer::Base.view_paths, path].flatten 
         
     | 
| 
       15 
15 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -0,0 +1,113 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Ixtlan
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Errors
         
     | 
| 
      
 3 
     | 
    
         
            +
                module ActionMailer
         
     | 
| 
      
 4 
     | 
    
         
            +
                  class Base
         
     | 
| 
      
 5 
     | 
    
         
            +
                    
         
     | 
| 
      
 6 
     | 
    
         
            +
                    def self.method_missing(method, *args)
         
     | 
| 
      
 7 
     | 
    
         
            +
                      self.new
         
     | 
| 
      
 8 
     | 
    
         
            +
                    end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    def self.deliver(val = nul)
         
     | 
| 
      
 11 
     | 
    
         
            +
                      @delivered = val if val
         
     | 
| 
      
 12 
     | 
    
         
            +
                      @delivered
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                    def deliver
         
     | 
| 
      
 15 
     | 
    
         
            +
                      self.class.deliver(true)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    end
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            require 'ixtlan/errors/error_dumper'
         
     | 
| 
      
 23 
     | 
    
         
            +
            require 'date'
         
     | 
| 
      
 24 
     | 
    
         
            +
            require 'logger'
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            class Controller
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def request
         
     | 
| 
      
 29 
     | 
    
         
            +
                self
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
              def env
         
     | 
| 
      
 32 
     | 
    
         
            +
                @env ||= {:one => 1, :two => 2, :three => 3}
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              def response
         
     | 
| 
      
 36 
     | 
    
         
            +
                self
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              def headers
         
     | 
| 
      
 40 
     | 
    
         
            +
                @headers ||= { 'ONE' => 1, "TWO" => 2 }
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              def session
         
     | 
| 
      
 44 
     | 
    
         
            +
                @session ||= { "user" => "me" }
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              def params
         
     | 
| 
      
 48 
     | 
    
         
            +
                @params ||= { :query => "all" }
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            class NilClass
         
     | 
| 
      
 53 
     | 
    
         
            +
              def blank?
         
     | 
| 
      
 54 
     | 
    
         
            +
                true
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            class String
         
     | 
| 
      
 59 
     | 
    
         
            +
              def blank?
         
     | 
| 
      
 60 
     | 
    
         
            +
                size == 0
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
            end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            class Fixnum
         
     | 
| 
      
 65 
     | 
    
         
            +
              def ago
         
     | 
| 
      
 66 
     | 
    
         
            +
                DateTime.now - self.to_i
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            class DateTime
         
     | 
| 
      
 71 
     | 
    
         
            +
              def tv_sec
         
     | 
| 
      
 72 
     | 
    
         
            +
                sec
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
              def tv_usec
         
     | 
| 
      
 75 
     | 
    
         
            +
                0
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
            end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            describe Ixtlan::Errors::ErrorDumper do
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              before :each do
         
     | 
| 
      
 82 
     | 
    
         
            +
                @dumper = Ixtlan::Errors::ErrorDumper.new
         
     | 
| 
      
 83 
     | 
    
         
            +
                @dumper.dump_dir = "target"
         
     | 
| 
      
 84 
     | 
    
         
            +
                @controller = Controller.new
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              it "should dump env and not send notification" do
         
     | 
| 
      
 88 
     | 
    
         
            +
                file = @dumper.dump(@controller, StandardError.new("dump it"))
         
     | 
| 
      
 89 
     | 
    
         
            +
                File.exists?(file).should be_true
         
     | 
| 
      
 90 
     | 
    
         
            +
                @dumper.email_from = "asd"
         
     | 
| 
      
 91 
     | 
    
         
            +
                file = @dumper.dump(@controller, StandardError.new("dump it"))
         
     | 
| 
      
 92 
     | 
    
         
            +
                File.exists?(file).should be_true
         
     | 
| 
      
 93 
     | 
    
         
            +
                @dumper.email_from = nil
         
     | 
| 
      
 94 
     | 
    
         
            +
                @dumper.email_to = "dsa"
         
     | 
| 
      
 95 
     | 
    
         
            +
                file = @dumper.dump(@controller, StandardError.new("dump it"))
         
     | 
| 
      
 96 
     | 
    
         
            +
                File.exists?(file).should be_true
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
              it "should clean up error dumps" do
         
     | 
| 
      
 100 
     | 
    
         
            +
                @dumper.keep_dumps = 0
         
     | 
| 
      
 101 
     | 
    
         
            +
                @dumper.dump(@controller, StandardError.new("dump it"))
         
     | 
| 
      
 102 
     | 
    
         
            +
                Dir['target/error-*'].size.should == 1
         
     | 
| 
      
 103 
     | 
    
         
            +
                @dumper.dump(@controller, StandardError.new("dump it"))
         
     | 
| 
      
 104 
     | 
    
         
            +
                Dir['target/error-*'].size.should == 1
         
     | 
| 
      
 105 
     | 
    
         
            +
              end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
              it "should send notifications" do
         
     | 
| 
      
 108 
     | 
    
         
            +
                @dumper.email_to = "das"
         
     | 
| 
      
 109 
     | 
    
         
            +
                @dumper.email_from = "asd"
         
     | 
| 
      
 110 
     | 
    
         
            +
                @dumper.dump(@controller, StandardError.new("dump it"))
         
     | 
| 
      
 111 
     | 
    
         
            +
                Ixtlan::Errors::ActionMailer::Base.delivered.should be_true
         
     | 
| 
      
 112 
     | 
    
         
            +
              end
         
     | 
| 
      
 113 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,138 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'ixtlan/errors/error_handler'
         
     | 
| 
      
 2 
     | 
    
         
            +
            #require 'date'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'logger'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class Controller
         
     | 
| 
      
 6 
     | 
    
         
            +
              def logger
         
     | 
| 
      
 7 
     | 
    
         
            +
                @logger ||= Logger.new(STDOUT)
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def respond_to(&block)
         
     | 
| 
      
 11 
     | 
    
         
            +
                block.call self
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def html(&block)
         
     | 
| 
      
 15 
     | 
    
         
            +
                block.call self
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def xml(&block)
         
     | 
| 
      
 19 
     | 
    
         
            +
                block.call self
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              def json(&block)
         
     | 
| 
      
 23 
     | 
    
         
            +
                block.call self
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def stati
         
     | 
| 
      
 27 
     | 
    
         
            +
                @stati ||= []
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              def head(status)
         
     | 
| 
      
 31 
     | 
    
         
            +
                stati << status
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def render(options = nil)
         
     | 
| 
      
 35 
     | 
    
         
            +
                @render = options if options
         
     | 
| 
      
 36 
     | 
    
         
            +
                @render
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            class Rails
         
     | 
| 
      
 41 
     | 
    
         
            +
              def self.configuration
         
     | 
| 
      
 42 
     | 
    
         
            +
                self
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              def self.error_dumper
         
     | 
| 
      
 46 
     | 
    
         
            +
                self
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
              
         
     | 
| 
      
 49 
     | 
    
         
            +
              def self.dump(controller, exception)
         
     | 
| 
      
 50 
     | 
    
         
            +
                @dumped = exception
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
              def self.dumped
         
     | 
| 
      
 54 
     | 
    
         
            +
                r = @dumped
         
     | 
| 
      
 55 
     | 
    
         
            +
                @dumped = nil
         
     | 
| 
      
 56 
     | 
    
         
            +
                r
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            describe Ixtlan::Errors::ErrorHandler do
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
              before :each do
         
     | 
| 
      
 63 
     | 
    
         
            +
                @controller = Controller.new
         
     | 
| 
      
 64 
     | 
    
         
            +
                Controller.send :include, Ixtlan::Errors::ErrorHandler
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              describe "without session" do
         
     | 
| 
      
 68 
     | 
    
         
            +
                
         
     | 
| 
      
 69 
     | 
    
         
            +
                it "should handle internal server error" do
         
     | 
| 
      
 70 
     | 
    
         
            +
                  exp = StandardError.new("internal")
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @controller.send :internal_server_error, exp
         
     | 
| 
      
 72 
     | 
    
         
            +
                  Rails.dumped.should == exp
         
     | 
| 
      
 73 
     | 
    
         
            +
                  @controller.render.should_not be_nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                  @controller.render[:status].should == :internal_server_error
         
     | 
| 
      
 75 
     | 
    
         
            +
                  @controller.render[:template].should == "errors/error"
         
     | 
| 
      
 76 
     | 
    
         
            +
                  @controller.stati.should == [:internal_server_error, :internal_server_error]
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                it "should handle not found" do
         
     | 
| 
      
 80 
     | 
    
         
            +
                  exp = StandardError.new("not found")
         
     | 
| 
      
 81 
     | 
    
         
            +
                  @controller.send :page_not_found, exp
         
     | 
| 
      
 82 
     | 
    
         
            +
                  Rails.dumped.should be_nil
         
     | 
| 
      
 83 
     | 
    
         
            +
                  @controller.render.should_not be_nil
         
     | 
| 
      
 84 
     | 
    
         
            +
                  @controller.render[:status].should == :not_found
         
     | 
| 
      
 85 
     | 
    
         
            +
                  @controller.render[:template].should == "errors/error"
         
     | 
| 
      
 86 
     | 
    
         
            +
                  @controller.stati.should == [:not_found, :not_found]
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                it "should handle stale resource" do
         
     | 
| 
      
 90 
     | 
    
         
            +
                  exp = StandardError.new("stale")
         
     | 
| 
      
 91 
     | 
    
         
            +
                  @controller.send :stale_resource, exp
         
     | 
| 
      
 92 
     | 
    
         
            +
                  Rails.dumped.should be_nil
         
     | 
| 
      
 93 
     | 
    
         
            +
                  @controller.render.should_not be_nil
         
     | 
| 
      
 94 
     | 
    
         
            +
                  @controller.render[:status].should == :conflict
         
     | 
| 
      
 95 
     | 
    
         
            +
                  @controller.render[:template].should == "errors/error"
         
     | 
| 
      
 96 
     | 
    
         
            +
                  @controller.stati.should == [:conflict, :conflict]
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
              end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
              describe "with session" do
         
     | 
| 
      
 101 
     | 
    
         
            +
                
         
     | 
| 
      
 102 
     | 
    
         
            +
                before :each do
         
     | 
| 
      
 103 
     | 
    
         
            +
                  def @controller.current_user
         
     | 
| 
      
 104 
     | 
    
         
            +
                    Object.new
         
     | 
| 
      
 105 
     | 
    
         
            +
                  end
         
     | 
| 
      
 106 
     | 
    
         
            +
                end
         
     | 
| 
      
 107 
     | 
    
         
            +
                
         
     | 
| 
      
 108 
     | 
    
         
            +
                it "should handle internal server error" do
         
     | 
| 
      
 109 
     | 
    
         
            +
                  exp = StandardError.new("internal")
         
     | 
| 
      
 110 
     | 
    
         
            +
                  @controller.send :internal_server_error, exp
         
     | 
| 
      
 111 
     | 
    
         
            +
                  Rails.dumped.should == exp
         
     | 
| 
      
 112 
     | 
    
         
            +
                  @controller.render.should_not be_nil
         
     | 
| 
      
 113 
     | 
    
         
            +
                  @controller.render[:status].should == :internal_server_error
         
     | 
| 
      
 114 
     | 
    
         
            +
                  @controller.render[:template].should == "errors/error_with_session"
         
     | 
| 
      
 115 
     | 
    
         
            +
                  @controller.stati.should == [:internal_server_error, :internal_server_error]
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                it "should handle not found" do
         
     | 
| 
      
 119 
     | 
    
         
            +
                  exp = StandardError.new("not found")
         
     | 
| 
      
 120 
     | 
    
         
            +
                  @controller.send :page_not_found, exp
         
     | 
| 
      
 121 
     | 
    
         
            +
                  Rails.dumped.should be_nil
         
     | 
| 
      
 122 
     | 
    
         
            +
                  @controller.render.should_not be_nil
         
     | 
| 
      
 123 
     | 
    
         
            +
                  @controller.render[:status].should == :not_found
         
     | 
| 
      
 124 
     | 
    
         
            +
                  @controller.render[:template].should == "errors/error_with_session"
         
     | 
| 
      
 125 
     | 
    
         
            +
                  @controller.stati.should == [:not_found, :not_found]
         
     | 
| 
      
 126 
     | 
    
         
            +
                end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                it "should handle stale resource" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                  exp = StandardError.new("stale")
         
     | 
| 
      
 130 
     | 
    
         
            +
                  @controller.send :stale_resource, exp
         
     | 
| 
      
 131 
     | 
    
         
            +
                  Rails.dumped.should be_nil
         
     | 
| 
      
 132 
     | 
    
         
            +
                  @controller.render.should_not be_nil
         
     | 
| 
      
 133 
     | 
    
         
            +
                  @controller.render[:status].should == :conflict
         
     | 
| 
      
 134 
     | 
    
         
            +
                  @controller.render[:template].should == "errors/error_with_session"
         
     | 
| 
      
 135 
     | 
    
         
            +
                  @controller.stati.should == [:conflict, :conflict]
         
     | 
| 
      
 136 
     | 
    
         
            +
                end
         
     | 
| 
      
 137 
     | 
    
         
            +
              end
         
     | 
| 
      
 138 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version 
     | 
|
| 
       5 
5 
     | 
    
         
             
              segments: 
         
     | 
| 
       6 
6 
     | 
    
         
             
                - 0
         
     | 
| 
       7 
7 
     | 
    
         
             
                - 1
         
     | 
| 
       8 
     | 
    
         
            -
                -  
     | 
| 
       9 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 8 
     | 
    
         
            +
                - 1
         
     | 
| 
      
 9 
     | 
    
         
            +
              version: 0.1.1
         
     | 
| 
       10 
10 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       11 
11 
     | 
    
         
             
            authors: 
         
     | 
| 
       12 
12 
     | 
    
         
             
              - mkristian
         
     | 
| 
         @@ -14,35 +14,35 @@ autorequire: 
     | 
|
| 
       14 
14 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       15 
15 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
            date: 2011-03- 
     | 
| 
      
 17 
     | 
    
         
            +
            date: 2011-03-22 00:00:00 +05:30
         
     | 
| 
       18 
18 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       19 
19 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       20 
20 
     | 
    
         
             
              - !ruby/object:Gem::Dependency 
         
     | 
| 
       21 
     | 
    
         
            -
                name:  
     | 
| 
      
 21 
     | 
    
         
            +
                name: rspec
         
     | 
| 
       22 
22 
     | 
    
         
             
                prerelease: false
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirement: &id001 !ruby/object:Gem::Requirement 
         
     | 
| 
       24 
24 
     | 
    
         
             
                  requirements: 
         
     | 
| 
       25 
25 
     | 
    
         
             
                    - - "="
         
     | 
| 
       26 
26 
     | 
    
         
             
                      - !ruby/object:Gem::Version 
         
     | 
| 
       27 
27 
     | 
    
         
             
                        segments: 
         
     | 
| 
       28 
     | 
    
         
            -
                          -  
     | 
| 
      
 28 
     | 
    
         
            +
                          - 2
         
     | 
| 
      
 29 
     | 
    
         
            +
                          - 4
         
     | 
| 
       29 
30 
     | 
    
         
             
                          - 0
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                        version: 3.0.1
         
     | 
| 
      
 31 
     | 
    
         
            +
                        version: 2.4.0
         
     | 
| 
       32 
32 
     | 
    
         
             
                type: :development
         
     | 
| 
       33 
33 
     | 
    
         
             
                version_requirements: *id001
         
     | 
| 
       34 
34 
     | 
    
         
             
              - !ruby/object:Gem::Dependency 
         
     | 
| 
       35 
     | 
    
         
            -
                name:  
     | 
| 
      
 35 
     | 
    
         
            +
                name: rake
         
     | 
| 
       36 
36 
     | 
    
         
             
                prerelease: false
         
     | 
| 
       37 
37 
     | 
    
         
             
                requirement: &id002 !ruby/object:Gem::Requirement 
         
     | 
| 
       38 
38 
     | 
    
         
             
                  requirements: 
         
     | 
| 
       39 
39 
     | 
    
         
             
                    - - "="
         
     | 
| 
       40 
40 
     | 
    
         
             
                      - !ruby/object:Gem::Version 
         
     | 
| 
       41 
41 
     | 
    
         
             
                        segments: 
         
     | 
| 
       42 
     | 
    
         
            -
                          - 2
         
     | 
| 
       43 
42 
     | 
    
         
             
                          - 0
         
     | 
| 
       44 
     | 
    
         
            -
                          -  
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
                          - 8
         
     | 
| 
      
 44 
     | 
    
         
            +
                          - 7
         
     | 
| 
      
 45 
     | 
    
         
            +
                        version: 0.8.7
         
     | 
| 
       46 
46 
     | 
    
         
             
                type: :development
         
     | 
| 
       47 
47 
     | 
    
         
             
                version_requirements: *id002
         
     | 
| 
       48 
48 
     | 
    
         
             
              - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -50,29 +50,15 @@ dependencies: 
     | 
|
| 
       50 
50 
     | 
    
         
             
                prerelease: false
         
     | 
| 
       51 
51 
     | 
    
         
             
                requirement: &id003 !ruby/object:Gem::Requirement 
         
     | 
| 
       52 
52 
     | 
    
         
             
                  requirements: 
         
     | 
| 
       53 
     | 
    
         
            -
                    - - " 
     | 
| 
      
 53 
     | 
    
         
            +
                    - - ">="
         
     | 
| 
       54 
54 
     | 
    
         
             
                      - !ruby/object:Gem::Version 
         
     | 
| 
       55 
55 
     | 
    
         
             
                        segments: 
         
     | 
| 
       56 
56 
     | 
    
         
             
                          - 0
         
     | 
| 
       57 
     | 
    
         
            -
                          - 9
         
     | 
| 
       58 
     | 
    
         
            -
                          - 4
         
     | 
| 
       59 
     | 
    
         
            -
                        version: 0.9.4
         
     | 
| 
       60 
     | 
    
         
            -
                type: :development
         
     | 
| 
       61 
     | 
    
         
            -
                version_requirements: *id003
         
     | 
| 
       62 
     | 
    
         
            -
              - !ruby/object:Gem::Dependency 
         
     | 
| 
       63 
     | 
    
         
            -
                name: rake
         
     | 
| 
       64 
     | 
    
         
            -
                prerelease: false
         
     | 
| 
       65 
     | 
    
         
            -
                requirement: &id004 !ruby/object:Gem::Requirement 
         
     | 
| 
       66 
     | 
    
         
            -
                  requirements: 
         
     | 
| 
       67 
     | 
    
         
            -
                    - - "="
         
     | 
| 
       68 
     | 
    
         
            -
                      - !ruby/object:Gem::Version 
         
     | 
| 
       69 
     | 
    
         
            -
                        segments: 
         
     | 
| 
       70 
57 
     | 
    
         
             
                          - 0
         
     | 
| 
       71 
     | 
    
         
            -
                          -  
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
                        version: 0.8.7
         
     | 
| 
      
 58 
     | 
    
         
            +
                          - 0
         
     | 
| 
      
 59 
     | 
    
         
            +
                        version: 0.0.0
         
     | 
| 
       74 
60 
     | 
    
         
             
                type: :development
         
     | 
| 
       75 
     | 
    
         
            -
                version_requirements: * 
     | 
| 
      
 61 
     | 
    
         
            +
                version_requirements: *id003
         
     | 
| 
       76 
62 
     | 
    
         
             
            description: dump errors on filesystem and notify developers, map different errors to specific pages
         
     | 
| 
       77 
63 
     | 
    
         
             
            email: 
         
     | 
| 
       78 
64 
     | 
    
         
             
              - m.kristian@web.de
         
     | 
| 
         @@ -83,9 +69,6 @@ extensions: [] 
     | 
|
| 
       83 
69 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       84 
70 
     | 
    
         | 
| 
       85 
71 
     | 
    
         
             
            files: 
         
     | 
| 
       86 
     | 
    
         
            -
              - README.textile
         
     | 
| 
       87 
     | 
    
         
            -
              - features/step_definitions/simple_steps.rb
         
     | 
| 
       88 
     | 
    
         
            -
              - features/generators.feature
         
     | 
| 
       89 
72 
     | 
    
         
             
              - lib/ixtlan-error-handler.rb
         
     | 
| 
       90 
73 
     | 
    
         
             
              - lib/ixtlan/errors/railtie.rb
         
     | 
| 
       91 
74 
     | 
    
         
             
              - lib/ixtlan/errors/error_handler.rb
         
     | 
| 
         @@ -93,10 +76,12 @@ files: 
     | 
|
| 
       93 
76 
     | 
    
         
             
              - lib/ixtlan/errors/rescue_module.rb
         
     | 
| 
       94 
77 
     | 
    
         
             
              - lib/ixtlan/errors/error_dumper.rb
         
     | 
| 
       95 
78 
     | 
    
         
             
              - lib/ixtlan/errors/mailer/error_notification.erb
         
     | 
| 
      
 79 
     | 
    
         
            +
              - spec/error_dumper_spec.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
              - spec/error_handler_spec.rb
         
     | 
| 
       96 
81 
     | 
    
         
             
            has_rdoc: true
         
     | 
| 
       97 
82 
     | 
    
         
             
            homepage: http://github.com/mkristian/ixtlan-error-handler
         
     | 
| 
       98 
     | 
    
         
            -
            licenses:  
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
      
 83 
     | 
    
         
            +
            licenses: 
         
     | 
| 
      
 84 
     | 
    
         
            +
              - MIT-LICENSE
         
     | 
| 
       100 
85 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       101 
86 
     | 
    
         
             
            rdoc_options: 
         
     | 
| 
       102 
87 
     | 
    
         
             
              - --main
         
     | 
| 
         @@ -124,5 +109,6 @@ rubygems_version: 1.3.6 
     | 
|
| 
       124 
109 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       125 
110 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       126 
111 
     | 
    
         
             
            summary: dump errors on filesystem and notify developers
         
     | 
| 
       127 
     | 
    
         
            -
            test_files:  
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
      
 112 
     | 
    
         
            +
            test_files: 
         
     | 
| 
      
 113 
     | 
    
         
            +
              - spec/error_dumper_spec.rb
         
     | 
| 
      
 114 
     | 
    
         
            +
              - spec/error_handler_spec.rb
         
     | 
    
        data/README.textile
    DELETED
    
    | 
         @@ -1,31 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            h1. Rails Error Dumper
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            p. the main idea here is notify the developers on error but in a way to protect privacy of the users of the system. to do so ALL data need to remain on the server and they need to be deleted after period of time.
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            * first to dump as much as possible onto the filesystem of the server when an error occurs, i.e. the environment, the request, the response, the session, etc
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            * notify the developers
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            * delete expired error dumps
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            p. the next idea is to collect all possible rails exception and map them to three error pages and pass on a message. for each exception you can decide whether an error dump is needed or not.
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            h2. install
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            p. in Gemfile add *gem 'ixtlan-error-handler'*
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            p. for the configuration add for example in _config/initializers/error_handler.rb_
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            bc. config.error_dumper.dump_dir = Rails.root + "/log/errors" # default: log/errors
         
     | 
| 
       20 
     | 
    
         
            -
            config.error_dumper.email_from = "no-reply@example.com"
         
     | 
| 
       21 
     | 
    
         
            -
            config.error_dumper.email_to = "developer1@example.com,developer2@example.com"
         
     | 
| 
       22 
     | 
    
         
            -
            config.error_dumper.keep_dumps = 30 # days
         
     | 
| 
       23 
     | 
    
         
            -
            config.skip_rescue_module = true # do not include the predefined Rescue 
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
            h2. relation to ixtlan gem
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
            p. the ixtlan gem provides a setup generator which adds configuration examples for this gem in _config/initializer/ixtlan.rb_ (the dynamic configuration is part of the ixtlan gem and it is just easier to keep that inside that gem !!!)
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
            h2. relation to ixtlan-audit gem
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
            p. if that gem is present and loaded than any error will be log with the help of _Ixtlan::Audit::UserLogger_
         
     | 
    
        data/features/generators.feature
    DELETED
    
    | 
         @@ -1,5 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            Feature: Generators for Ixtlan Audit
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
              Scenario: The slf4r rails template creates a rails application which uses slf4r-wrapper
         
     | 
| 
       4 
     | 
    
         
            -
                Given I create new rails application with template "simple.template"
         
     | 
| 
       5 
     | 
    
         
            -
                Then the output should contain "setup slf4r logger wrapper with ActiveSupport::BufferedLogger"
         
     | 
| 
         @@ -1,22 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'fileutils'
         
     | 
| 
       2 
     | 
    
         
            -
            Given /^I create new rails application with template "(.*)"$/ do |template|
         
     | 
| 
       3 
     | 
    
         
            -
              name = template.sub(/.template$/, '')
         
     | 
| 
       4 
     | 
    
         
            -
              directory = File.join('target', name)
         
     | 
| 
       5 
     | 
    
         
            -
              rails_version = ENV['RAILS_VERSION'] || '3.0.1'
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              ruby = defined?(JRUBY_VERSION) ? "jruby" : "ruby"
         
     | 
| 
       8 
     | 
    
         
            -
              rails_command = "#{ENV['GEM_HOME']}/bin/rails"
         
     | 
| 
       9 
     | 
    
         
            -
              rails_command = "-S rails" unless File.exists?(rails_command)
         
     | 
| 
       10 
     | 
    
         
            -
              command = "#{rails_command} _#{rails_version}_ new #{directory} -f -m templates/#{template}"
         
     | 
| 
       11 
     | 
    
         
            -
              FileUtils.rm_rf(directory)
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
              system "#{ruby} #{command}"
         
     | 
| 
       14 
     | 
    
         
            -
              
         
     | 
| 
       15 
     | 
    
         
            -
              @result = File.read("target/#{name}/log/development.log")
         
     | 
| 
       16 
     | 
    
         
            -
              puts @result
         
     | 
| 
       17 
     | 
    
         
            -
            end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            Then /^the output should contain \"(.*)\"$/ do |expected|
         
     | 
| 
       20 
     | 
    
         
            -
              (@result =~ /.*#{expected}.*/).should_not be_nil
         
     | 
| 
       21 
     | 
    
         
            -
            end
         
     | 
| 
       22 
     | 
    
         
            -
             
     |