Merge branch 'rails3x' - reportable - Fork of reportable required by WarVox, from hdm/reportable.
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
       ---
 (DIR) commit 660e1ab0067ae945b96d8e3503f55f97a5eeb73d
 (DIR) parent ae86ca08fc9ae2a92ca14d17c97bc3415f1f9554
 (HTM) Author: Martin Kavalar <martin@sauspiel.de>
       Date:   Tue, 14 Feb 2012 10:52:48 +0100
       
       Merge branch 'rails3x'
       
       Conflicts:
               Rakefile
       
       Diffstat:
         M Gemfile                             |      10 +++++-----
         M generators/reportable_jquery_flot_… |      49 ++++++++++---------------------
         M generators/reportable_migration/re… |      44 +++++++++----------------------
         M generators/reportable_raphael_asse… |      58 ++++++++++---------------------
         M lib/saulabs/reportable.rb           |       6 ++----
         M lib/saulabs/reportable/cumulated_r… |       2 +-
         M lib/saulabs/reportable/railtie.rb   |      13 ++++++++++++-
         M lib/saulabs/reportable/report_cach… |       7 ++++---
         M lib/saulabs/reportable/report_tag_… |       8 ++++----
         M lib/saulabs/reportable/result_set.… |      10 ++++++++--
         D rails/init.rb                       |      11 -----------
         D spec/boot.rb                        |      22 ----------------------
         M spec/classes/report_cache_spec.rb   |      29 +++++++++++++++++------------
         M spec/classes/report_spec.rb         |       8 ++++----
         M spec/other/report_method_spec.rb    |      17 ++++++++++-------
         M spec/other/report_tag_helper_spec.… |       2 ++
         M spec/spec_helper.rb                 |      43 ++++++++++++++++++++++---------
       
       17 files changed, 146 insertions(+), 193 deletions(-)
       ---
 (DIR) diff --git a/Gemfile b/Gemfile
       @@ -1,9 +1,9 @@
        source "http://rubygems.org"
        
       -gem 'rails',         '~> 2.3.0'
       -gem 'activerecord',  '~> 2.3.0', :require => 'active_record'
       -gem 'activesupport', '~> 2.3.0', :require => 'active_support'
       -gem 'actionpack',    '~> 2.3.0', :require => 'action_pack'
       +gem 'rails',         '~> 3.2.0'
       +gem 'activerecord',  '~> 3.2.0', :require => 'active_record'
       +gem 'activesupport', '~> 3.2.0', :require => 'active_support'
       +gem 'actionpack',    '~> 3.2.0', :require => 'action_pack'
        
        gem 'sqlite3-ruby', '>= 1.2.0'
        gem 'mysql',                                 '>= 2.8.0'
       @@ -11,7 +11,7 @@ gem 'pg',                                         '>= 0.9.0'
        gem 'tzinfo',                         '>= 0.3.0'
        
        gem 'rake',       '>= 0.8.7'
       -gem 'rspec',      '~> 1.3.0'
       +gem 'rspec',      '~> 2.8.0'
        gem 'simplecov'
        gem 'excellent',  '>= 1.5.4'
        gem 'yard',       '>= 0.4.0'
 (DIR) diff --git a/generators/reportable_jquery_flot_assets/reportable_jquery_flot_assets_generator.rb b/generators/reportable_jquery_flot_assets/reportable_jquery_flot_assets_generator.rb
       @@ -1,37 +1,18 @@
       -if Saulabs::Reportable::RailsAdapter::IS_RAILS3
       -
       -  class ReportableJqueryFlotAssetsGenerator < Rails::Generators::Base
       -
       -    include Rails::Generators::Actions
       -
       -    def create_jquery_flot_file
       -      empty_directory('public/javascripts')
       -      copy_file(
       -        File.join(File.dirname(__FILE__), 'templates', 'jquery.flot.min.js'),
       -        'public/javascripts/jquery.flot.min.js'
       -      )
       -      copy_file(
       -        File.join(File.dirname(__FILE__), 'templates', 'excanvas.min.js'),
       -        'public/javascripts/excanvas.min.js'
       -      )
       -      readme(File.join(File.dirname(__FILE__), 'templates', 'NOTES'))
       -    end
       -
       -  end
       -
       -else
       -
       -  class ReportableJqueryFlotAssetsGenerator < Rails::Generator::Base
       -
       -    def manifest
       -      record do |m|
       -        m.directory('public/javascripts')
       -        m.file('jquery.flot.min.js', 'public/javascripts/jquery.flot.min.js')
       -        m.file('excanvas.min.js', 'public/javascripts/excanvas.min.js')
       -        m.readme('NOTES')
       -      end
       -    end
       -
       +class ReportableJqueryFlotAssetsGenerator < Rails::Generators::Base
       +
       +  include Rails::Generators::Actions
       +
       +  def create_jquery_flot_file
       +    empty_directory('public/javascripts')
       +    copy_file(
       +      File.join(File.dirname(__FILE__), 'templates', 'jquery.flot.min.js'),
       +      'public/javascripts/jquery.flot.min.js'
       +    )
       +    copy_file(
       +      File.join(File.dirname(__FILE__), 'templates', 'excanvas.min.js'),
       +      'public/javascripts/excanvas.min.js'
       +    )
       +    readme(File.join(File.dirname(__FILE__), 'templates', 'NOTES'))
          end
        
        end
 (DIR) diff --git a/generators/reportable_migration/reportable_migration_generator.rb b/generators/reportable_migration/reportable_migration_generator.rb
       @@ -1,40 +1,20 @@
       -if Saulabs::Reportable::RailsAdapter::IS_RAILS3
       +class ReportableMigrationGenerator < Rails::Generators::Base
        
       -  class ReportableMigrationGenerator < Rails::Generators::Base
       -
       -    include Rails::Generators::Migration
       -
       -    def create_migration
       -      migration_template(
       -        File.join(File.dirname(__FILE__), 'templates', 'migration.rb'),
       -        'db/migrate/create_reportable_cache.rb'
       -      )
       -    end
       -
       -    def self.next_migration_number(dirname)
       -      if ActiveRecord::Base.timestamped_migrations
       -        Time.now.utc.strftime("%Y%m%d%H%M%S")
       -      else
       -        "%.3d" % (current_migration_number(dirname) + 1)
       -      end
       -    end
       +  include Rails::Generators::Migration
        
       +  def create_migration
       +    migration_template(
       +      File.join(File.dirname(__FILE__), 'templates', 'migration.rb'),
       +      'db/migrate/create_reportable_cache.rb'
       +    )
          end
        
       -else
       -
       -  class ReportableMigrationGenerator < Rails::Generator::Base
       -
       -    def manifest
       -      record do |m|
       -        m.migration_template('migration.rb', 'db/migrate')
       -      end
       +  def self.next_migration_number(dirname)
       +    if ActiveRecord::Base.timestamped_migrations
       +      Time.now.utc.strftime("%Y%m%d%H%M%S")
       +    else
       +      "%.3d" % (current_migration_number(dirname) + 1)
            end
       -
       -    def file_name
       -      'create_reportable_cache'
       -    end
       -
          end
        
        end
 (DIR) diff --git a/generators/reportable_raphael_assets/reportable_raphael_assets_generator.rb b/generators/reportable_raphael_assets/reportable_raphael_assets_generator.rb
       @@ -1,42 +1,22 @@
       -if Saulabs::Reportable::RailsAdapter::IS_RAILS3
       -
       -  class ReportableRaphaelAssetsGenerator < Rails::Generators::Base
       -
       -    include Rails::Generators::Actions
       -
       -    def create_raphael_file
       -      empty_directory('public/javascripts')
       -      copy_file(
       -        File.join(File.dirname(__FILE__), 'templates', 'raphael.min.js'),
       -        'public/javascripts/raphael.min.js'
       -      )
       -      copy_file(
       -        File.join(File.dirname(__FILE__), 'templates', 'g.raphael.min.js'),
       -        'public/javascripts/g.raphael.min.js'
       -      )
       -      copy_file(
       -        File.join(File.dirname(__FILE__), 'templates', 'g.line.min.js'),
       -        'public/javascripts/g.line.min.js'
       -      )
       -      readme(File.join(File.dirname(__FILE__), 'templates', 'NOTES'))
       -    end
       -
       -  end
       -
       -else
       -
       -  class ReportableRaphaelAssetsGenerator < Rails::Generator::Base
       -
       -    def manifest
       -      record do |m|
       -        m.directory('public/javascripts')
       -        m.file('raphael.min.js', 'public/javascripts/raphael.min.js')
       -        m.file('g.raphael.min.js', 'public/javascripts/g.raphael.min.js')
       -        m.file('g.line.min.js', 'public/javascripts/g.line.min.js')
       -        m.readme('NOTES')
       -      end
       -    end
       -
       +class ReportableRaphaelAssetsGenerator < Rails::Generators::Base
       +
       +  include Rails::Generators::Actions
       +
       +  def create_raphael_file
       +    empty_directory('public/javascripts')
       +    copy_file(
       +      File.join(File.dirname(__FILE__), 'templates', 'raphael.min.js'),
       +      'public/javascripts/raphael.min.js'
       +    )
       +    copy_file(
       +      File.join(File.dirname(__FILE__), 'templates', 'g.raphael.min.js'),
       +      'public/javascripts/g.raphael.min.js'
       +    )
       +    copy_file(
       +      File.join(File.dirname(__FILE__), 'templates', 'g.line.min.js'),
       +      'public/javascripts/g.line.min.js'
       +    )
       +    readme(File.join(File.dirname(__FILE__), 'templates', 'NOTES'))
          end
        
        end
 (DIR) diff --git a/lib/saulabs/reportable.rb b/lib/saulabs/reportable.rb
       @@ -1,5 +1,7 @@
       +
        require 'saulabs/reportable/report'
        require 'saulabs/reportable/cumulated_report'
       +require 'saulabs/reportable/railtie'
        
        module Saulabs
        
       @@ -9,10 +11,6 @@ module Saulabs
            #
            module RailsAdapter
        
       -      IS_RAILS3 = defined?(Rails) && Rails::VERSION::MAJOR >= 3
       -
       -      require 'saulabs/reportable/railtie' if IS_RAILS3
       -
              # Extends the {Saulabs::Reportable::ClassMethods#reportable} method into +base+.
              #
              def self.included(base)
 (DIR) diff --git a/lib/saulabs/reportable/cumulated_report.rb b/lib/saulabs/reportable/cumulated_report.rb
       @@ -25,7 +25,7 @@ module Saulabs
                  first_reporting_period = ReportingPeriod.first(options[:grouping], options[:limit], options[:end_date])
                  acc = initial_cumulative_value(first_reporting_period.date_time, options)
                  result = []
       -          data.each do |element|
       +          data.to_a.each do |element|
                    acc += element[1].to_f
                    result << [element[0], acc]
                  end
 (DIR) diff --git a/lib/saulabs/reportable/railtie.rb b/lib/saulabs/reportable/railtie.rb
       @@ -1,4 +1,5 @@
        require 'saulabs/reportable'
       +require 'saulabs/reportable/report_tag_helper'
        require 'rails'
        
        module Saulabs
       @@ -10,7 +11,17 @@ module Saulabs
              GEM_ROOT = File.join(File.dirname(__FILE__), '..', '..', '..')
        
              initializer 'saulabs.reportable.initialization' do
       -        require File.join(GEM_ROOT, 'rails', 'init')
       +        ActiveSupport.on_load :active_record do
       +          ActiveRecord::Base.class_eval do
       +            include Saulabs::Reportable::RailsAdapter
       +          end
       +        end
       +        ActiveSupport.on_load :action_view do
       +          ActionView::Base.class_eval do
       +            include Saulabs::Reportable::ReportTagHelper
       +          end
       +        end
       +
              end
        
              generators do
 (DIR) diff --git a/lib/saulabs/reportable/report_cache.rb b/lib/saulabs/reportable/report_cache.rb
       @@ -1,5 +1,6 @@
        require 'saulabs/reportable/reporting_period'
        require 'saulabs/reportable/result_set'
       +require 'active_record'
        
        module Saulabs
        
       @@ -10,7 +11,7 @@ module Saulabs
            #
            class ReportCache < ActiveRecord::Base
        
       -      set_table_name :reportable_cache
       +      self.table_name = :reportable_cache
        
              validates_presence_of :model_name
              validates_presence_of :report_name
       @@ -63,7 +64,7 @@ module Saulabs
              # @option options [DateTime, Boolean] :end_date (false)
              #   when specified, the report will only include data for the +:limit+ reporting periods until this date.
              #
       -      # @return [Array<Array<DateTime, Float>>]
       +      # @return [ResultSet<Array<DateTime, Float>>]
              #   the result of the report as pairs of {DateTime}s and {Float}s
              #
              def self.process(report, options, &block)
       @@ -122,7 +123,7 @@ module Saulabs
                  elsif conditions.is_a?(Hash) && conditions.any?
                    conditions.map.sort{|x,y|x.to_s<=>y.to_s}.flatten.join
                  else
       -            conditions.to_s
       +            conditions.empty? ? '' : conditions.to_s
                  end
                end
        
 (DIR) diff --git a/lib/saulabs/reportable/report_tag_helper.rb b/lib/saulabs/reportable/report_tag_helper.rb
       @@ -37,7 +37,7 @@ module Saulabs
              #
              def google_report_tag(data, options = {})
                options.reverse_merge!(Config.google_options)
       -        data = data.collect { |d| d[1] }
       +        data = data.to_a.collect { |d| d[1] }
                labels = ''
                unless options[:labels].empty?
                  chxr = {}
       @@ -93,8 +93,8 @@ module Saulabs
                  var graph = Raphael('#{options[:dom_id]}');
                  graph.g.linechart(
                    -10, 4, #{options[:width]}, #{options[:height]},
       -            #{(0..data.size).to_a.to_json},
       -            #{data.map { |d| d[1].send(:eval, options[:format]) }.to_json},
       +            #{(0..data.to_a.size).to_a.to_json},
       +            #{data.to_a.map { |d| d[1].send(:eval, options[:format]) }.to_json},
                    #{raphael_options.to_json}
                  ).hover(function() {
                    this.disc = graph.g.disc(this.x, this.y, 3).attr({fill: "#{options[:hover_fill_color]}", stroke: '#{options[:hover_line_color]}' }).insertBefore(this);
       @@ -146,7 +146,7 @@ module Saulabs
                %Q{<div id="#{options[:dom_id]}" style="width:#{options[:width]}px;height:#{options[:height]}px;"></div>
                <script type="text\/javascript" charset="utf-8">
                $(function() {
       -          var set = #{data.map{|d| d[1] }.to_json},
       +          var set = #{data.to_a.map{|d| d[1] }.to_json},
                  data = [];
                  for (var i = 0; i < set.length; i++) {
                    data.push([i, set[i]]);
 (DIR) diff --git a/lib/saulabs/reportable/result_set.rb b/lib/saulabs/reportable/result_set.rb
       @@ -8,7 +8,7 @@ module Saulabs
            # the name of the model and the report the result set
            # was generated from.
            #
       -    class ResultSet < ::Array
       +    class ResultSet
        
              # the name of the model the result set is based on
              #
       @@ -18,6 +18,12 @@ module Saulabs
              #
              attr_reader :report_name
        
       +      # array representation of the result
       +      #
       +      def to_a
       +        @results
       +      end
       +
              # Initializes a new result set.
              #
              # @param [Array] array
       @@ -28,7 +34,7 @@ module Saulabs
              #   the name of the report the result is based on
              #
              def initialize(array, model_name, report_name)
       -        super(array)
       +        @results = array
                @model_name  = model_name
                @report_name = report_name.to_s
              end
 (DIR) diff --git a/rails/init.rb b/rails/init.rb
       @@ -1,11 +0,0 @@
       -require 'action_view'
       -require 'saulabs/reportable'
       -require 'saulabs/reportable/report_tag_helper'
       -
       -ActiveRecord::Base.class_eval do
       -  include Saulabs::Reportable::RailsAdapter
       -end
       -
       -ActionView::Base.class_eval do
       -  include Saulabs::Reportable::ReportTagHelper
       -end
 (DIR) diff --git a/spec/boot.rb b/spec/boot.rb
       @@ -1,22 +0,0 @@
       -plugin_root = File.join(File.dirname(__FILE__), '..')
       -
       -$:.unshift "#{plugin_root}/lib"
       -
       -Bundler.require
       -require 'initializer'
       -
       -RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + '/../') unless defined?(RAILS_ROOT)
       -Rails::Initializer.run(:set_load_path)
       -Rails::Initializer.run(:set_autoload_paths)
       -Rails::Initializer.run(:initialize_time_zone) do |config|
       -  config.time_zone = 'Pacific Time (US & Canada)'
       -end
       -
       -require File.join(File.dirname(__FILE__), '..', 'rails', 'init.rb')
       -
       -FileUtils.mkdir_p File.join(File.dirname(__FILE__), 'log')
       -ActiveRecord::Base.logger = Logger.new(File.join(File.dirname(__FILE__), 'log', 'spec.log'))
       -
       -databases = YAML::load(IO.read(File.join(File.dirname(__FILE__), 'db', 'database.yml')))
       -ActiveRecord::Base.establish_connection(databases[ENV['DB'] || 'sqlite3'])
       -load(File.join(File.dirname(__FILE__), 'db', 'schema.rb'))
 (DIR) diff --git a/spec/classes/report_cache_spec.rb b/spec/classes/report_cache_spec.rb
       @@ -214,7 +214,7 @@ describe Saulabs::Reportable::ReportCache do
                  @report.name.to_s,
                  @report.options[:grouping].identifier.to_s,
                  @report.aggregation.to_s,
       -          @report.options[:conditions].to_s,
       +          '',
                  Saulabs::Reportable::ReportingPeriod.first(@report.options[:grouping], 10).date_time
                ],
                :limit => 10,
       @@ -235,7 +235,7 @@ describe Saulabs::Reportable::ReportCache do
                  @report.name.to_s,
                  @report.options[:grouping].identifier.to_s,
                  @report.aggregation.to_s,
       -          @report.options[:conditions].to_s,
       +          '',
                  Saulabs::Reportable::ReportingPeriod.first(@report.options[:grouping], 9).date_time,
                  Saulabs::Reportable::ReportingPeriod.new(@report.options[:grouping], end_date).date_time
                ],
       @@ -248,8 +248,7 @@ describe Saulabs::Reportable::ReportCache do
        
            it "should read existing data from the cache for the correct grouping if one other than the report's default grouping is specified" do
              grouping = Saulabs::Reportable::Grouping.new(:month)
       -      Saulabs::Reportable::ReportCache.should_receive(:find).once.with(
       -        :all,
       +      Saulabs::Reportable::ReportCache.should_receive(:all).once.with(
                :conditions => [
                  %w(model_name report_name grouping aggregation conditions).map do |column_name|
                    "#{Saulabs::Reportable::ReportCache.connection.quote_column_name(column_name)} = ?"
       @@ -258,7 +257,7 @@ describe Saulabs::Reportable::ReportCache do
                  @report.name.to_s,
                  grouping.identifier.to_s,
                  @report.aggregation.to_s,
       -          @report.options[:conditions].to_s,
       +          '',
                  Saulabs::Reportable::ReportingPeriod.first(grouping, 10).date_time
                ],
                :limit => 10,
       @@ -279,6 +278,11 @@ describe Saulabs::Reportable::ReportCache do
          
          describe '.serialize_conditions' do
            
       +    it 'should serialize empty conditions correctly' do
       +      result = Saulabs::Reportable::ReportCache.send(:serialize_conditions, [])
       +      result.should eql('')
       +    end
       +    
            it 'should serialize a conditions array correctly' do
              result = Saulabs::Reportable::ReportCache.send(:serialize_conditions, ['active = ? AND gender = ?', true, 'male'])
              result.should eql('active = ? AND gender = ?truemale')
       @@ -334,7 +338,7 @@ describe Saulabs::Reportable::ReportCache do
            end
        
            it 'should save the created Saulabs::Reportable::ReportCache' do
       -      @cached.should_receive(:save!).once
       +      @cached.should_receive(:save!)
        
              Saulabs::Reportable::ReportCache.send(:prepare_result, @new_data, [], @report, @report.options)
            end
       @@ -342,16 +346,17 @@ describe Saulabs::Reportable::ReportCache do
            it 'should return an array of arrays of Dates and Floats' do
              result = Saulabs::Reportable::ReportCache.send(:prepare_result, @new_data, [], @report, @report.options)
        
       -      result.should be_kind_of(Array)
       -      result[0].should be_kind_of(Array)
       -      result[0][0].should be_kind_of(Date)
       -      result[0][1].should be_kind_of(Float)
       +      result.should be_kind_of(Saulabs::Reportable::ResultSet)
       +      result.to_a.should be_kind_of(Array)
       +      result.to_a[0].should be_kind_of(Array)
       +      result.to_a[0][0].should be_kind_of(Date)
       +      result.to_a[0][1].should be_kind_of(Float)
            end
        
            describe 'with :live_data = false' do
        
              before do
       -        @result = Saulabs::Reportable::ReportCache.send(:prepare_result, @new_data, [], @report, @report.options)
       +        @result = Saulabs::Reportable::ReportCache.send(:prepare_result, @new_data, [], @report, @report.options).to_a
              end
        
              it 'should return an array of length :limit' do
       @@ -368,7 +373,7 @@ describe Saulabs::Reportable::ReportCache do
        
              before do
                options = @report.options.merge(:live_data => true)
       -        @result = Saulabs::Reportable::ReportCache.send(:prepare_result, @new_data, [], @report, options)
       +        @result = Saulabs::Reportable::ReportCache.send(:prepare_result, @new_data, [], @report, options).to_a
              end
        
              it 'should return an array of length (:limit + 1)' do
 (DIR) diff --git a/spec/classes/report_spec.rb b/spec/classes/report_spec.rb
       @@ -56,13 +56,13 @@ describe Saulabs::Reportable::Report do
            it 'should return an array of the same length as the specified limit when :live_data is false' do
              @report = Saulabs::Reportable::Report.new(User, :cumulated_registrations, :limit => 10, :live_data => false)
        
       -      @report.run.length.should == 10
       +      @report.run.to_a.length.should == 10
            end
        
            it 'should return an array of the same length as the specified limit + 1 when :live_data is true' do
              @report = Saulabs::Reportable::Report.new(User, :cumulated_registrations, :limit => 10, :live_data => true)
        
       -      @report.run.length.should == 11
       +      @report.run.to_a.length.should == 11
            end
        
            for grouping in [:hour, :day, :week, :month] do
       @@ -98,7 +98,7 @@ describe Saulabs::Reportable::Report do
                        :limit    => 10,
                        :end_date => @end_date
                      )
       -              @result = @report.run
       +              @result = @report.run.to_a
                    end
        
                    it "should start with the reporting period (end_date - limit.#{grouping.to_s})" do
       @@ -127,7 +127,7 @@ describe Saulabs::Reportable::Report do
                          :limit     => 10,
                          :live_data => live_data
                        )
       -                @result = @report.run
       +                @result = @report.run.to_a
                      end
        
                      it "should be an array starting reporting period (Time.now - limit.#{grouping.to_s})" do
 (DIR) diff --git a/spec/other/report_method_spec.rb b/spec/other/report_method_spec.rb
       @@ -1,7 +1,17 @@
        require File.join(File.dirname(File.dirname(File.expand_path(__FILE__))),'spec_helper')
        
        describe Saulabs::Reportable do
       +  
       +  ActiveRecord::Base.class_eval do
       +    include Saulabs::Reportable::RailsAdapter
       +  end
       +  
       +  class User < ActiveRecord::Base
       +    reportable :registrations, :limit => 10
       +  end
        
       +  class SpecialUser < User; end
       +  
          before(:all) do
            User.create!(:login => 'test 1', :created_at => Time.now - 1.days,  :profile_visits => 1)
            User.create!(:login => 'test 2', :created_at => Time.now - 2.days, :profile_visits => 2)
       @@ -59,10 +69,3 @@ describe Saulabs::Reportable do
        
        end
        
       -class User < ActiveRecord::Base
       -
       -  reportable :registrations, :limit => 10
       -
       -end
       -
       -class SpecialUser < User; end
 (DIR) diff --git a/spec/other/report_tag_helper_spec.rb b/spec/other/report_tag_helper_spec.rb
       @@ -1,5 +1,7 @@
        require File.join(File.dirname(File.dirname(File.expand_path(__FILE__))),'spec_helper')
        
       +require 'reportable/report_tag_helper'
       +
        describe Saulabs::Reportable::ReportTagHelper do
        
          before do
 (DIR) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
       @@ -1,19 +1,39 @@
        ENV['RAILS_ENV'] = 'test'
        
        require 'rubygems'
       -require 'bundler'
       -Bundler.setup
       -
       -require File.join(File.dirname(__FILE__), 'boot')
       -
       -class User < ActiveRecord::Base; end
       -
       -class YieldMatchException < Exception; end
       +require 'bundler/setup'
       +require 'active_record'
       +require 'active_record/version'
       +require 'active_support'
        
        begin
          require 'ruby-debug'
       -  Debugger.start
       -  Debugger.settings[:autoeval] = true if Debugger.respond_to?(:settings)
       +  # Debugger.start
       +  # Debugger.settings[:autoeval] = true if Debugger.respond_to?(:settings)
        rescue LoadError
          # ruby-debug wasn't available so neither can the debugging be
       -end
       -\ No newline at end of file
       +end
       +
       +ROOT = Pathname(File.expand_path(File.join(File.dirname(__FILE__), '..')))
       +
       +$LOAD_PATH << File.join(ROOT, 'lib')
       +$LOAD_PATH << File.join(ROOT, 'lib/saulabs')
       +
       +require File.join(ROOT, 'lib', 'saulabs', 'reportable.rb')
       +
       +# Rails::Initializer.run(:set_load_path)
       +# Rails::Initializer.run(:set_autoload_paths)
       +# Rails::Initializer.run(:initialize_time_zone) do |config|
       +#   config.time_zone = 'Pacific Time (US & Canada)'
       +# end
       +
       +FileUtils.mkdir_p File.join(File.dirname(__FILE__), 'log')
       +ActiveRecord::Base.logger = ActiveSupport::BufferedLogger.new(File.dirname(__FILE__) + "/log/spec.log")
       +
       +databases = YAML::load(IO.read(File.join(File.dirname(__FILE__), 'db', 'database.yml')))
       +ActiveRecord::Base.establish_connection(databases[ENV['DB'] || 'sqlite3'])
       +load(File.join(File.dirname(__FILE__), 'db', 'schema.rb'))
       +
       +class User < ActiveRecord::Base; end
       +
       +class YieldMatchException < Exception; end