miniprofiler 0.1.7.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/.gitignore +4 -0
 - data/CHANGELOG +32 -0
 - data/Gemfile +15 -0
 - data/Gemfile.lock +64 -0
 - data/README.md +110 -0
 - data/Rakefile +40 -0
 - data/autotest/discover.rb +2 -0
 - data/lib/mini_profiler/body_add_proxy.rb +45 -0
 - data/lib/mini_profiler/client_timer_struct.rb +76 -0
 - data/lib/mini_profiler/config.rb +52 -0
 - data/lib/mini_profiler/context.rb +10 -0
 - data/lib/mini_profiler/page_timer_struct.rb +53 -0
 - data/lib/mini_profiler/profiler.rb +405 -0
 - data/lib/mini_profiler/profiling_methods.rb +73 -0
 - data/lib/mini_profiler/request_timer_struct.rb +96 -0
 - data/lib/mini_profiler/sql_timer_struct.rb +48 -0
 - data/lib/mini_profiler/storage/abstract_store.rb +27 -0
 - data/lib/mini_profiler/storage/file_store.rb +108 -0
 - data/lib/mini_profiler/storage/memory_store.rb +68 -0
 - data/lib/mini_profiler/storage/redis_store.rb +44 -0
 - data/lib/mini_profiler/timer_struct.rb +31 -0
 - data/lib/mini_profiler_rails/railtie.rb +84 -0
 - data/lib/patches/sql_patches.rb +185 -0
 - data/lib/rack-mini-profiler.rb +6 -0
 - data/rack-mini-profiler.gemspec +23 -0
 - data/spec/components/body_add_proxy_spec.rb +90 -0
 - data/spec/components/client_timer_struct_spec.rb +165 -0
 - data/spec/components/file_store_spec.rb +47 -0
 - data/spec/components/memory_store_spec.rb +40 -0
 - data/spec/components/page_timer_struct_spec.rb +33 -0
 - data/spec/components/profiler_spec.rb +126 -0
 - data/spec/components/redis_store_spec.rb +44 -0
 - data/spec/components/request_timer_struct_spec.rb +148 -0
 - data/spec/components/sql_timer_struct_spec.rb +63 -0
 - data/spec/components/timer_struct_spec.rb +47 -0
 - data/spec/fixtures/simple_client_request.yml +17 -0
 - data/spec/fixtures/weird_client_request.yml +13 -0
 - data/spec/integration/mini_profiler_spec.rb +142 -0
 - data/spec/spec_helper.rb +31 -0
 - data/spec/support/expand_each_to_matcher.rb +8 -0
 - data/test_old/config.ru +41 -0
 - metadata +155 -0
 
| 
         @@ -0,0 +1,165 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rack-mini-profiler'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            describe Rack::MiniProfiler::ClientTimerStruct do
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def new_page
         
     | 
| 
      
 8 
     | 
    
         
            +
                Rack::MiniProfiler::PageTimerStruct.new({})
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
              def fixture(name)
         
     | 
| 
      
 12 
     | 
    
         
            +
                YAML.load(File.open(File.dirname(__FILE__) + "/../fixtures/#{name}.yml"))
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              before do
         
     | 
| 
      
 16 
     | 
    
         
            +
                @client = Rack::MiniProfiler::ClientTimerStruct.new
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              it 'defaults to no attributes' do
         
     | 
| 
      
 20 
     | 
    
         
            +
                ::JSON.parse(@client.to_json).should be_empty
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              describe 'init_from_form_data' do
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                describe 'without a form' do
         
     | 
| 
      
 26 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 27 
     | 
    
         
            +
                    @client.init_from_form_data({}, new_page)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end
         
     | 
| 
      
 29 
     | 
    
         
            +
                  
         
     | 
| 
      
 30 
     | 
    
         
            +
                  it 'has no Timings' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @client['Timings'].should be_nil
         
     | 
| 
      
 32 
     | 
    
         
            +
                  end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                  it 'has no RedirectCount' do
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @client['RedirectCount'].should be_nil
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                describe 'with a simple request' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 41 
     | 
    
         
            +
                    @client.init_from_form_data(fixture(:simple_client_request), new_page)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  it 'has the correct RedirectCount' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @client['RedirectCount'].should == 1
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                  it 'has Timings' do
         
     | 
| 
      
 49 
     | 
    
         
            +
                    @client['Timings'].should_not be_empty
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
                  
         
     | 
| 
      
 52 
     | 
    
         
            +
                  describe "bob.js" do
         
     | 
| 
      
 53 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 54 
     | 
    
         
            +
                      @bob = @client['Timings'].find {|t| t["Name"] == "bob.js"}
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                    it 'has it in the timings' do 
         
     | 
| 
      
 58 
     | 
    
         
            +
                      @bob.should_not be_nil
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    it 'has the correct duration' do 
         
     | 
| 
      
 62 
     | 
    
         
            +
                      @bob["Duration"].should == 6
         
     | 
| 
      
 63 
     | 
    
         
            +
                    end
         
     | 
| 
      
 64 
     | 
    
         
            +
                    
         
     | 
| 
      
 65 
     | 
    
         
            +
                  end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  describe "Navigation" do
         
     | 
| 
      
 68 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 69 
     | 
    
         
            +
                      @nav = @client['Timings'].find {|t| t["Name"] == "Navigation"}
         
     | 
| 
      
 70 
     | 
    
         
            +
                    end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                    it 'has a Timing for the Navigation' do          
         
     | 
| 
      
 73 
     | 
    
         
            +
                      @nav.should_not be_nil
         
     | 
| 
      
 74 
     | 
    
         
            +
                    end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                    it 'has the correct start' do
         
     | 
| 
      
 77 
     | 
    
         
            +
                      @nav['Start'].should == 0
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                    it 'has the correct duration' do     
         
     | 
| 
      
 81 
     | 
    
         
            +
                      @nav['Duration'].should == 16
         
     | 
| 
      
 82 
     | 
    
         
            +
                    end
         
     | 
| 
      
 83 
     | 
    
         
            +
                  end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  describe "Simple" do
         
     | 
| 
      
 86 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 87 
     | 
    
         
            +
                      @simple = @client['Timings'].find {|t| t["Name"] == "Simple"}
         
     | 
| 
      
 88 
     | 
    
         
            +
                    end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                    it 'has a Timing for the Simple' do          
         
     | 
| 
      
 91 
     | 
    
         
            +
                      @simple.should_not be_nil
         
     | 
| 
      
 92 
     | 
    
         
            +
                    end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                    it 'has the correct start' do          
         
     | 
| 
      
 95 
     | 
    
         
            +
                      @simple['Start'].should == 1
         
     | 
| 
      
 96 
     | 
    
         
            +
                    end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                    it 'has the correct duration' do          
         
     | 
| 
      
 99 
     | 
    
         
            +
                      @simple['Duration'].should == 10
         
     | 
| 
      
 100 
     | 
    
         
            +
                    end
         
     | 
| 
      
 101 
     | 
    
         
            +
                  end      
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                describe 'with some odd values' do
         
     | 
| 
      
 106 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 107 
     | 
    
         
            +
                    @client.init_from_form_data(fixture(:weird_client_request), new_page)        
         
     | 
| 
      
 108 
     | 
    
         
            +
                  end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                  it 'has the correct RedirectCount' do
         
     | 
| 
      
 111 
     | 
    
         
            +
                    @client['RedirectCount'].should == 99
         
     | 
| 
      
 112 
     | 
    
         
            +
                  end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                  it 'has Timings' do
         
     | 
| 
      
 115 
     | 
    
         
            +
                    @client['Timings'].should_not be_empty
         
     | 
| 
      
 116 
     | 
    
         
            +
                  end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                  it 'has no timing when the start is before Navigation' do          
         
     | 
| 
      
 119 
     | 
    
         
            +
                    @client['Timings'].find {|t| t["Name"] == "Previous"}.should be_nil
         
     | 
| 
      
 120 
     | 
    
         
            +
                  end
         
     | 
| 
      
 121 
     | 
    
         
            +
              
         
     | 
| 
      
 122 
     | 
    
         
            +
                  describe "weird" do
         
     | 
| 
      
 123 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 124 
     | 
    
         
            +
                      @weird = @client['Timings'].find {|t| t["Name"] == "Weird"}
         
     | 
| 
      
 125 
     | 
    
         
            +
                    end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
                    it 'has a Timing for the Weird' do          
         
     | 
| 
      
 128 
     | 
    
         
            +
                      @weird.should_not be_nil
         
     | 
| 
      
 129 
     | 
    
         
            +
                    end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                    it 'has the correct start' do          
         
     | 
| 
      
 132 
     | 
    
         
            +
                      @weird['Start'].should == 11
         
     | 
| 
      
 133 
     | 
    
         
            +
                    end
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                    it 'has a 0 duration because start time is greater than end time' do          
         
     | 
| 
      
 136 
     | 
    
         
            +
                      @weird['Duration'].should == 0
         
     | 
| 
      
 137 
     | 
    
         
            +
                    end
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end      
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  describe "differentFormat" do
         
     | 
| 
      
 141 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 142 
     | 
    
         
            +
                      @diff = @client['Timings'].find {|t| t["Name"] == "differentFormat"}
         
     | 
| 
      
 143 
     | 
    
         
            +
                    end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                    it 'has a Timing for the differentFormat' do          
         
     | 
| 
      
 146 
     | 
    
         
            +
                      @diff.should_not be_nil
         
     | 
| 
      
 147 
     | 
    
         
            +
                    end
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                    it 'has the correct start' do          
         
     | 
| 
      
 150 
     | 
    
         
            +
                      @diff['Start'].should == 1
         
     | 
| 
      
 151 
     | 
    
         
            +
                    end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                    it 'has a -1 duration because the format was different' do          
         
     | 
| 
      
 154 
     | 
    
         
            +
                      @diff['Duration'].should == -1
         
     | 
| 
      
 155 
     | 
    
         
            +
                    end
         
     | 
| 
      
 156 
     | 
    
         
            +
                  end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
                end
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
             
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
              end
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
      
 164 
     | 
    
         
            +
             
     | 
| 
      
 165 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'rack-mini-profiler'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'mini_profiler/page_timer_struct'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'mini_profiler/storage/abstract_store'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'mini_profiler/storage/file_store'
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            describe Rack::MiniProfiler::FileStore do
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              context 'page struct' do
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                before do
         
     | 
| 
      
 13 
     | 
    
         
            +
                  tmp = File.expand_path(__FILE__ + "/../../../tmp")
         
     | 
| 
      
 14 
     | 
    
         
            +
                  Dir::mkdir(tmp) unless File.exists?(tmp)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @store = Rack::MiniProfiler::FileStore.new(:path => tmp) 
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                describe 'storage' do
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  it 'can store a PageStruct and retrieve it' do
         
     | 
| 
      
 21 
     | 
    
         
            +
                    page_struct = Rack::MiniProfiler::PageTimerStruct.new({})
         
     | 
| 
      
 22 
     | 
    
         
            +
                    page_struct['Id'] = "XYZ"
         
     | 
| 
      
 23 
     | 
    
         
            +
                    page_struct['Random'] = "random"
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @store.save(page_struct)
         
     | 
| 
      
 25 
     | 
    
         
            +
                    page_struct = @store.load("XYZ")
         
     | 
| 
      
 26 
     | 
    
         
            +
                    page_struct['Random'].should == "random"
         
     | 
| 
      
 27 
     | 
    
         
            +
                    page_struct['Id'].should == "XYZ"
         
     | 
| 
      
 28 
     | 
    
         
            +
                  end    
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  it 'can list unviewed items for a user' do 
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @store.set_unviewed('a', 'XYZ')
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @store.set_unviewed('a', 'ABC')
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @store.get_unviewed_ids('a').sort.to_a.should == ['XYZ', 'ABC'].sort.to_a
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                  it 'can set an item to viewed once it is unviewed' do 
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @store.set_unviewed('a', 'XYZ')
         
     | 
| 
      
 38 
     | 
    
         
            +
                    @store.set_unviewed('a', 'ABC')
         
     | 
| 
      
 39 
     | 
    
         
            +
                    @store.set_viewed('a', 'XYZ')
         
     | 
| 
      
 40 
     | 
    
         
            +
                    @store.get_unviewed_ids('a').should == ['ABC']
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'mini_profiler/storage/abstract_store'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'mini_profiler/storage/memory_store'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            describe Rack::MiniProfiler::MemoryStore do
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              context 'page struct' do
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                before do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @store = Rack::MiniProfiler::MemoryStore.new nil
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                describe 'storage' do
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  it 'can store a PageStruct and retrieve it' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                    page_struct = {'Id' => "XYZ", 'Random' => "random"}
         
     | 
| 
      
 17 
     | 
    
         
            +
                    @store.save(page_struct)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    page_struct = @store.load("XYZ")
         
     | 
| 
      
 19 
     | 
    
         
            +
                    page_struct['Id'].should == "XYZ"
         
     | 
| 
      
 20 
     | 
    
         
            +
                    page_struct['Random'].should == "random"
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end    
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                  it 'can list unviewed items for a user' do 
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @store.set_unviewed('a', 'XYZ')
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @store.set_unviewed('a', 'ABC')
         
     | 
| 
      
 26 
     | 
    
         
            +
                    @store.get_unviewed_ids('a').should == ['XYZ', 'ABC']
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                  it 'can set an item to viewed once it is unviewed' do 
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @store.set_unviewed('a', 'XYZ')
         
     | 
| 
      
 31 
     | 
    
         
            +
                    @store.set_unviewed('a', 'ABC')
         
     | 
| 
      
 32 
     | 
    
         
            +
                    @store.set_viewed('a', 'XYZ')
         
     | 
| 
      
 33 
     | 
    
         
            +
                    @store.get_unviewed_ids('a').should == ['ABC']
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rack-mini-profiler'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Rack::MiniProfiler::PageTimerStruct do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              before do
         
     | 
| 
      
 7 
     | 
    
         
            +
                @page = Rack::MiniProfiler::PageTimerStruct.new({})
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              it 'has an Id' do
         
     | 
| 
      
 11 
     | 
    
         
            +
                @page['Id'].should_not be_nil
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              it 'has a Root' do
         
     | 
| 
      
 15 
     | 
    
         
            +
                @page['Root'].should_not be_nil
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              describe 'to_json' do
         
     | 
| 
      
 19 
     | 
    
         
            +
                before do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @json = @page.to_json
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @deserialized = ::JSON.parse(@json)
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                it 'has a Started element' do
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @deserialized['Started'].should_not be_nil
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                it 'has a DurationMilliseconds element' do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @deserialized['DurationMilliseconds'].should_not be_nil
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
              
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,126 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rack-mini-profiler'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Rack::MiniProfiler do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              describe 'unique id' do
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                before do
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @unique = Rack::MiniProfiler.generate_id
         
     | 
| 
      
 10 
     | 
    
         
            +
                end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                it 'is not nil' do
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @unique.should_not be_nil
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                it 'is not empty' do
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @unique.should_not be_empty
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                describe 'configuration' do
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  it 'allows us to set configuration settings' do
         
     | 
| 
      
 23 
     | 
    
         
            +
                    Rack::MiniProfiler.config.auto_inject = false
         
     | 
| 
      
 24 
     | 
    
         
            +
                    Rack::MiniProfiler.config.auto_inject.should == false
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  it 'can reset the settings' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                    Rack::MiniProfiler.config.auto_inject = false
         
     | 
| 
      
 29 
     | 
    
         
            +
                    Rack::MiniProfiler.reset_config
         
     | 
| 
      
 30 
     | 
    
         
            +
                    Rack::MiniProfiler.config.auto_inject.should be_true
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  describe 'base_url_path' do
         
     | 
| 
      
 34 
     | 
    
         
            +
                    it 'adds a trailing slash onto the base_url_path' do
         
     | 
| 
      
 35 
     | 
    
         
            +
                      profiler = Rack::MiniProfiler.new(nil, :base_url_path => "/test-resource")
         
     | 
| 
      
 36 
     | 
    
         
            +
                      profiler.config.base_url_path.should == "/test-resource/"
         
     | 
| 
      
 37 
     | 
    
         
            +
                    end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                    it "doesn't add the trailing slash when it's already there" do
         
     | 
| 
      
 40 
     | 
    
         
            +
                      profiler = Rack::MiniProfiler.new(nil, :base_url_path => "/test-resource/")
         
     | 
| 
      
 41 
     | 
    
         
            +
                      profiler.config.base_url_path.should == "/test-resource/"
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                  end      
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
              end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
              describe 'profile method' do 
         
     | 
| 
      
 50 
     | 
    
         
            +
                before do 
         
     | 
| 
      
 51 
     | 
    
         
            +
                  Rack::MiniProfiler.create_current
         
     | 
| 
      
 52 
     | 
    
         
            +
                  class TestClass
         
     | 
| 
      
 53 
     | 
    
         
            +
                    def foo(bar,baz)
         
     | 
| 
      
 54 
     | 
    
         
            +
                      return [bar, baz, yield]
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                it 'should not destroy a method' do 
         
     | 
| 
      
 60 
     | 
    
         
            +
                  Rack::MiniProfiler.profile_method TestClass, :foo
         
     | 
| 
      
 61 
     | 
    
         
            +
                  TestClass.new.foo("a","b"){"c"}.should == ["a","b","c"]
         
     | 
| 
      
 62 
     | 
    
         
            +
                  Rack::MiniProfiler.unprofile_method TestClass, :foo
         
     | 
| 
      
 63 
     | 
    
         
            +
                end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              describe 'step' do
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                describe 'basic usage' do 
         
     | 
| 
      
 70 
     | 
    
         
            +
                  it 'yields the block given' do 
         
     | 
| 
      
 71 
     | 
    
         
            +
                    Rack::MiniProfiler.create_current
         
     | 
| 
      
 72 
     | 
    
         
            +
                    Rack::MiniProfiler.step('test') { "mini profiler" }.should == "mini profiler"
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                describe 'typical usage' do
         
     | 
| 
      
 78 
     | 
    
         
            +
                  before(:all) do
         
     | 
| 
      
 79 
     | 
    
         
            +
                    Rack::MiniProfiler.create_current
         
     | 
| 
      
 80 
     | 
    
         
            +
                    Time.now = Time.new
         
     | 
| 
      
 81 
     | 
    
         
            +
                    Time.now += 1
         
     | 
| 
      
 82 
     | 
    
         
            +
                    Rack::MiniProfiler.step('outer') {
         
     | 
| 
      
 83 
     | 
    
         
            +
                      Time.now +=  2 
         
     | 
| 
      
 84 
     | 
    
         
            +
                      Rack::MiniProfiler.step('inner') { 
         
     | 
| 
      
 85 
     | 
    
         
            +
                        Time.now += 3 
         
     | 
| 
      
 86 
     | 
    
         
            +
                      }
         
     | 
| 
      
 87 
     | 
    
         
            +
                      Time.now += 4 
         
     | 
| 
      
 88 
     | 
    
         
            +
                    }
         
     | 
| 
      
 89 
     | 
    
         
            +
                    @page_struct = Rack::MiniProfiler.current.page_struct
         
     | 
| 
      
 90 
     | 
    
         
            +
                    @root = @page_struct.root
         
     | 
| 
      
 91 
     | 
    
         
            +
                    @root.record_time
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                    @outer = @page_struct.root.children[0]
         
     | 
| 
      
 94 
     | 
    
         
            +
                    @inner = @outer.children[0]
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                  after(:all) do
         
     | 
| 
      
 98 
     | 
    
         
            +
                    Time.back_to_normal
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  it 'measures total duration correctly' do 
         
     | 
| 
      
 102 
     | 
    
         
            +
                    @page_struct.duration_ms.to_i.should == 10 * 1000
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  it 'measures outer start time correctly' do
         
     | 
| 
      
 106 
     | 
    
         
            +
                    @outer.start_ms.to_i.should == 1 * 1000
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  it 'measures outer duration correctly' do
         
     | 
| 
      
 110 
     | 
    
         
            +
                    @outer.duration_ms.to_i.should == 9 * 1000
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
                  
         
     | 
| 
      
 113 
     | 
    
         
            +
                  it 'measures inner start time correctly' do 
         
     | 
| 
      
 114 
     | 
    
         
            +
                    @inner.start_ms.to_i.should == 3 * 1000
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                  it 'measures inner duration correctly' do 
         
     | 
| 
      
 118 
     | 
    
         
            +
                    @inner.duration_ms.to_i.should == 3 * 1000
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
              end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,44 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rack-mini-profiler'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'mini_profiler/page_timer_struct'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'mini_profiler/storage/abstract_store'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'mini_profiler/storage/redis_store'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            describe Rack::MiniProfiler::RedisStore do
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              context 'page struct' do
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                before do
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @store = Rack::MiniProfiler::RedisStore.new(nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                describe 'storage' do
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                  it 'can store a PageStruct and retrieve it' do
         
     | 
| 
      
 18 
     | 
    
         
            +
                    page_struct = Rack::MiniProfiler::PageTimerStruct.new({})
         
     | 
| 
      
 19 
     | 
    
         
            +
                    page_struct['Id'] = "XYZ"
         
     | 
| 
      
 20 
     | 
    
         
            +
                    page_struct['Random'] = "random"
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @store.save(page_struct)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    page_struct = @store.load("XYZ")
         
     | 
| 
      
 23 
     | 
    
         
            +
                    page_struct['Random'].should == "random"
         
     | 
| 
      
 24 
     | 
    
         
            +
                    page_struct['Id'].should == "XYZ"
         
     | 
| 
      
 25 
     | 
    
         
            +
                  end    
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                  it 'can list unviewed items for a user' do 
         
     | 
| 
      
 28 
     | 
    
         
            +
                    @store.set_unviewed('a', 'XYZ')
         
     | 
| 
      
 29 
     | 
    
         
            +
                    @store.set_unviewed('a', 'ABC')
         
     | 
| 
      
 30 
     | 
    
         
            +
                    @store.get_unviewed_ids('a').should == ['XYZ', 'ABC']
         
     | 
| 
      
 31 
     | 
    
         
            +
                  end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                  it 'can set an item to viewed once it is unviewed' do 
         
     | 
| 
      
 34 
     | 
    
         
            +
                    @store.set_unviewed('a', 'XYZ')
         
     | 
| 
      
 35 
     | 
    
         
            +
                    @store.set_unviewed('a', 'ABC')
         
     | 
| 
      
 36 
     | 
    
         
            +
                    @store.set_viewed('a', 'XYZ')
         
     | 
| 
      
 37 
     | 
    
         
            +
                    @store.get_unviewed_ids('a').should == ['ABC']
         
     | 
| 
      
 38 
     | 
    
         
            +
                  end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,148 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rack-mini-profiler'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Rack::MiniProfiler::RequestTimerStruct do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def new_page
         
     | 
| 
      
 7 
     | 
    
         
            +
                Rack::MiniProfiler::PageTimerStruct.new({})
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              before do
         
     | 
| 
      
 11 
     | 
    
         
            +
                @name = 'cool request'
         
     | 
| 
      
 12 
     | 
    
         
            +
                @request = Rack::MiniProfiler::RequestTimerStruct.createRoot(@name, new_page)
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it 'sets IsRoot to true' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                @request['IsRoot'].should be_true
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              it 'has an Id' do
         
     | 
| 
      
 20 
     | 
    
         
            +
                @request['Id'].should_not be_nil
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              it 'has a Root' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                @request['Name'].should == @name
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              it 'begins with a children duration of 0' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                @request.children_duration.should == 0
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
              it 'has a false HasChildren attribute' do
         
     | 
| 
      
 32 
     | 
    
         
            +
                @request['HasChildren'].should be_false
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              it 'has an empty Children attribute' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                @request['Children'].should be_empty
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              it 'has a depth of 0' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                @request['Depth'].should == 0
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
              it 'has a false HasSqlTimings attribute' do
         
     | 
| 
      
 44 
     | 
    
         
            +
                @request['HasSqlTimings'].should be_false
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              it 'has no sql timings at first' do
         
     | 
| 
      
 48 
     | 
    
         
            +
                @request['SqlTimings'].should be_empty    
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              it 'has a 0 for SqlTimingsDurationMilliseconds' do
         
     | 
| 
      
 52 
     | 
    
         
            +
                @request['SqlTimingsDurationMilliseconds'].should == 0
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              describe 'add SQL' do
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                before do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  @page = new_page
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @request.add_sql("SELECT 1 FROM users", 77, @page)
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                it 'has a true HasSqlTimings attribute' do
         
     | 
| 
      
 63 
     | 
    
         
            +
                  @request['HasSqlTimings'].should be_true
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                it 'has the SqlTiming object' do
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @request['SqlTimings'].should_not be_empty  
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                it 'has a child with the ParentTimingId of the request' do
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @request['SqlTimings'][0]['ParentTimingId'].should == @request['Id']
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                it 'increases SqlTimingsDurationMilliseconds' do
         
     | 
| 
      
 75 
     | 
    
         
            +
                  @request['SqlTimingsDurationMilliseconds'].should == 77
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                it "increases the page's " do
         
     | 
| 
      
 79 
     | 
    
         
            +
                  @page['DurationMillisecondsInSql'].should == 77
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
              end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
              describe 'record time' do
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                describe 'add children' do
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 89 
     | 
    
         
            +
                    @child = @request.add_child('child')
         
     | 
| 
      
 90 
     | 
    
         
            +
                    @child.record_time(1111)        
         
     | 
| 
      
 91 
     | 
    
         
            +
                  end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                  it 'has a IsRoot value of false' do
         
     | 
| 
      
 94 
     | 
    
         
            +
                    @child['IsRoot'].should be_false
         
     | 
| 
      
 95 
     | 
    
         
            +
                  end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                  it 'has a true HasChildren attribute' do
         
     | 
| 
      
 98 
     | 
    
         
            +
                    @request['HasChildren'].should be_true
         
     | 
| 
      
 99 
     | 
    
         
            +
                  end
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  it 'has the child in the Children attribute' do
         
     | 
| 
      
 102 
     | 
    
         
            +
                    @request['Children'].should == [@child]
         
     | 
| 
      
 103 
     | 
    
         
            +
                  end      
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  it 'assigns its Id to the child' do
         
     | 
| 
      
 106 
     | 
    
         
            +
                    @child['ParentTimingId'].should == @request['Id']
         
     | 
| 
      
 107 
     | 
    
         
            +
                  end
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  it 'assigns a depth of 1 to the child' do
         
     | 
| 
      
 110 
     | 
    
         
            +
                    @child['Depth'].should == 1
         
     | 
| 
      
 111 
     | 
    
         
            +
                  end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                  it 'increases the children duration' do
         
     | 
| 
      
 114 
     | 
    
         
            +
                    @request.children_duration.should == 1111
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
                  it 'marks short timings as trivial' do
         
     | 
| 
      
 118 
     | 
    
         
            +
                    @request.record_time(1)
         
     | 
| 
      
 119 
     | 
    
         
            +
                    @request['IsTrivial'].should be_true
         
     | 
| 
      
 120 
     | 
    
         
            +
                  end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                  
         
     | 
| 
      
 123 
     | 
    
         
            +
                  describe 'record time on parent' do
         
     | 
| 
      
 124 
     | 
    
         
            +
                    before do
         
     | 
| 
      
 125 
     | 
    
         
            +
                      @request.record_time(1234)
         
     | 
| 
      
 126 
     | 
    
         
            +
                    end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                    it "is not a trivial query" do
         
     | 
| 
      
 129 
     | 
    
         
            +
                      @request['IsTrivial'].should be_false
         
     | 
| 
      
 130 
     | 
    
         
            +
                    end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                    it 'has stores the recorded time in DurationMilliseconds' do
         
     | 
| 
      
 133 
     | 
    
         
            +
                      @request['DurationMilliseconds'].should == 1234
         
     | 
| 
      
 134 
     | 
    
         
            +
                    end
         
     | 
| 
      
 135 
     | 
    
         
            +
                    
         
     | 
| 
      
 136 
     | 
    
         
            +
                    it 'calculates DurationWithoutChildrenMilliseconds without the children timings' do
         
     | 
| 
      
 137 
     | 
    
         
            +
                      @request['DurationWithoutChildrenMilliseconds'].should == 123      
         
     | 
| 
      
 138 
     | 
    
         
            +
                    end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                end
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
              end
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,63 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rack-mini-profiler'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Rack::MiniProfiler::SqlTimerStruct do
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              describe 'valid sql timer' do
         
     | 
| 
      
 7 
     | 
    
         
            +
                before do
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @sql = Rack::MiniProfiler::SqlTimerStruct.new("SELECT * FROM users", 200, Rack::MiniProfiler::PageTimerStruct.new({}), nil)
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                it 'has an ExecuteType' do
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @sql['ExecuteType'].should_not be_nil
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                it 'has a FormattedCommandString' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @sql['FormattedCommandString'].should_not be_nil
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                it 'has a StackTraceSnippet' do
         
     | 
| 
      
 20 
     | 
    
         
            +
                  @sql['StackTraceSnippet'].should_not be_nil
         
     | 
| 
      
 21 
     | 
    
         
            +
                end  
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                it 'has a StartMilliseconds' do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @sql['StartMilliseconds'].should_not be_nil
         
     | 
| 
      
 25 
     | 
    
         
            +
                end   
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                it 'has a DurationMilliseconds' do
         
     | 
| 
      
 28 
     | 
    
         
            +
                  @sql['DurationMilliseconds'].should_not be_nil
         
     | 
| 
      
 29 
     | 
    
         
            +
                end 
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                it 'has a IsDuplicate' do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  @sql['IsDuplicate'].should_not be_nil
         
     | 
| 
      
 33 
     | 
    
         
            +
                end       
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              
         
     | 
| 
      
 38 
     | 
    
         
            +
              describe 'backtrace' do
         
     | 
| 
      
 39 
     | 
    
         
            +
                it 'has a snippet' do
         
     | 
| 
      
 40 
     | 
    
         
            +
                  sql = Rack::MiniProfiler::SqlTimerStruct.new("SELECT * FROM users", 200, Rack::MiniProfiler::PageTimerStruct.new({}), nil)
         
     | 
| 
      
 41 
     | 
    
         
            +
                  sql['StackTraceSnippet'].should_not be nil
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                it 'includes rspec in the trace (default is no filter)' do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  sql = Rack::MiniProfiler::SqlTimerStruct.new("SELECT * FROM users", 200, Rack::MiniProfiler::PageTimerStruct.new({}), nil)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  sql['StackTraceSnippet'].should match /rspec/
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                it "doesn't include rspec if we filter for only app" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  Rack::MiniProfiler.config.backtrace_filter = /\/app/
         
     | 
| 
      
 51 
     | 
    
         
            +
                  sql = Rack::MiniProfiler::SqlTimerStruct.new("SELECT * FROM users", 200, Rack::MiniProfiler::PageTimerStruct.new({}), nil)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  sql['StackTraceSnippet'].should_not match /rspec/
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                it "includes rspec if we filter for it" do
         
     | 
| 
      
 56 
     | 
    
         
            +
                  Rack::MiniProfiler.config.backtrace_filter = /\/(app|rspec)/
         
     | 
| 
      
 57 
     | 
    
         
            +
                  sql = Rack::MiniProfiler::SqlTimerStruct.new("SELECT * FROM users", 200, Rack::MiniProfiler::PageTimerStruct.new({}), nil)
         
     | 
| 
      
 58 
     | 
    
         
            +
                  sql['StackTraceSnippet'].should match /rspec/
         
     | 
| 
      
 59 
     | 
    
         
            +
                end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            end
         
     |