dm-aggregates 1.1.0 → 1.2.0.rc1
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/Gemfile +8 -8
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/dm-aggregates.gemspec +22 -31
- data/spec/public/collection_spec.rb +45 -61
- data/spec/public/model_spec.rb +3 -6
- data/spec/public/shared/aggregate_shared_spec.rb +171 -152
- metadata +65 -36
    
        data/Gemfile
    CHANGED
    
    | @@ -5,26 +5,26 @@ source 'http://rubygems.org' | |
| 5 5 | 
             
            SOURCE         = ENV.fetch('SOURCE', :git).to_sym
         | 
| 6 6 | 
             
            REPO_POSTFIX   = SOURCE == :path ? ''                                : '.git'
         | 
| 7 7 | 
             
            DATAMAPPER     = SOURCE == :path ? Pathname(__FILE__).dirname.parent : 'http://github.com/datamapper'
         | 
| 8 | 
            -
            DM_VERSION     = '~> 1. | 
| 9 | 
            -
            DO_VERSION     = '~> 0.10. | 
| 8 | 
            +
            DM_VERSION     = '~> 1.2.0.rc1'
         | 
| 9 | 
            +
            DO_VERSION     = '~> 0.10.6'
         | 
| 10 10 | 
             
            DM_DO_ADAPTERS = %w[ sqlite postgres mysql oracle sqlserver ]
         | 
| 11 11 |  | 
| 12 12 | 
             
            gem 'dm-core', DM_VERSION, SOURCE => "#{DATAMAPPER}/dm-core#{REPO_POSTFIX}"
         | 
| 13 13 |  | 
| 14 14 | 
             
            group :development do
         | 
| 15 15 |  | 
| 16 | 
            -
              gem 'jeweler', '~> 1. | 
| 17 | 
            -
              gem 'rake',    '~> 0. | 
| 18 | 
            -
              gem 'rspec',   '~> 1.3. | 
| 16 | 
            +
              gem 'jeweler', '~> 1.6.4'
         | 
| 17 | 
            +
              gem 'rake',    '~> 0.9.2'
         | 
| 18 | 
            +
              gem 'rspec',   '~> 1.3.2'
         | 
| 19 19 |  | 
| 20 20 | 
             
            end
         | 
| 21 21 |  | 
| 22 22 | 
             
            platforms :mri_18 do
         | 
| 23 23 | 
             
              group :quality do
         | 
| 24 24 |  | 
| 25 | 
            -
                gem 'rcov',      '~> 0.9. | 
| 26 | 
            -
                gem 'yard',      '~> 0. | 
| 27 | 
            -
                gem 'yardstick', '~> 0. | 
| 25 | 
            +
                gem 'rcov',      '~> 0.9.10'
         | 
| 26 | 
            +
                gem 'yard',      '~> 0.7.2'
         | 
| 27 | 
            +
                gem 'yardstick', '~> 0.4'
         | 
| 28 28 |  | 
| 29 29 | 
             
              end
         | 
| 30 30 | 
             
            end
         | 
    
        data/Rakefile
    CHANGED
    
    
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            1. | 
| 1 | 
            +
            1.2.0.rc1
         | 
    
        data/dm-aggregates.gemspec
    CHANGED
    
    | @@ -4,14 +4,14 @@ | |
| 4 4 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 | 
            -
              s.name =  | 
| 8 | 
            -
              s.version = "1. | 
| 7 | 
            +
              s.name = "dm-aggregates"
         | 
| 8 | 
            +
              s.version = "1.2.0.rc1"
         | 
| 9 9 |  | 
| 10 | 
            -
              s.required_rubygems_version = Gem::Requirement.new(" | 
| 10 | 
            +
              s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Foy Savas"]
         | 
| 12 | 
            -
              s.date =  | 
| 13 | 
            -
              s.description =  | 
| 14 | 
            -
              s.email =  | 
| 12 | 
            +
              s.date = "2011-09-09"
         | 
| 13 | 
            +
              s.description = "DataMapper plugin providing support for aggregates on collections"
         | 
| 14 | 
            +
              s.email = "foysavas [a] gmail [d] com"
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
| 16 16 | 
             
                "LICENSE",
         | 
| 17 17 | 
             
                "README.rdoc"
         | 
| @@ -46,40 +46,31 @@ Gem::Specification.new do |s| | |
| 46 46 | 
             
                "tasks/yard.rake",
         | 
| 47 47 | 
             
                "tasks/yardstick.rake"
         | 
| 48 48 | 
             
              ]
         | 
| 49 | 
            -
              s.homepage =  | 
| 49 | 
            +
              s.homepage = "http://github.com/datamapper/dm-aggregates"
         | 
| 50 50 | 
             
              s.require_paths = ["lib"]
         | 
| 51 | 
            -
              s.rubyforge_project =  | 
| 52 | 
            -
              s.rubygems_version =  | 
| 53 | 
            -
              s.summary =  | 
| 54 | 
            -
              s.test_files = [
         | 
| 55 | 
            -
                "spec/isolated/require_after_setup_spec.rb",
         | 
| 56 | 
            -
                "spec/isolated/require_before_setup_spec.rb",
         | 
| 57 | 
            -
                "spec/isolated/require_spec.rb",
         | 
| 58 | 
            -
                "spec/public/collection_spec.rb",
         | 
| 59 | 
            -
                "spec/public/model_spec.rb",
         | 
| 60 | 
            -
                "spec/public/shared/aggregate_shared_spec.rb",
         | 
| 61 | 
            -
                "spec/spec_helper.rb"
         | 
| 62 | 
            -
              ]
         | 
| 51 | 
            +
              s.rubyforge_project = "datamapper"
         | 
| 52 | 
            +
              s.rubygems_version = "1.8.10"
         | 
| 53 | 
            +
              s.summary = "DataMapper plugin providing support for aggregates on collections"
         | 
| 63 54 |  | 
| 64 55 | 
             
              if s.respond_to? :specification_version then
         | 
| 65 56 | 
             
                s.specification_version = 3
         | 
| 66 57 |  | 
| 67 58 | 
             
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 68 | 
            -
                  s.add_runtime_dependency(%q<dm-core>, ["~> 1. | 
| 69 | 
            -
                  s.add_development_dependency(%q<jeweler>, ["~> 1. | 
| 70 | 
            -
                  s.add_development_dependency(%q<rake>, ["~> 0. | 
| 71 | 
            -
                  s.add_development_dependency(%q<rspec>, ["~> 1.3. | 
| 59 | 
            +
                  s.add_runtime_dependency(%q<dm-core>, ["~> 1.2.0.rc1"])
         | 
| 60 | 
            +
                  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
         | 
| 61 | 
            +
                  s.add_development_dependency(%q<rake>, ["~> 0.9.2"])
         | 
| 62 | 
            +
                  s.add_development_dependency(%q<rspec>, ["~> 1.3.2"])
         | 
| 72 63 | 
             
                else
         | 
| 73 | 
            -
                  s.add_dependency(%q<dm-core>, ["~> 1. | 
| 74 | 
            -
                  s.add_dependency(%q<jeweler>, ["~> 1. | 
| 75 | 
            -
                  s.add_dependency(%q<rake>, ["~> 0. | 
| 76 | 
            -
                  s.add_dependency(%q<rspec>, ["~> 1.3. | 
| 64 | 
            +
                  s.add_dependency(%q<dm-core>, ["~> 1.2.0.rc1"])
         | 
| 65 | 
            +
                  s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
         | 
| 66 | 
            +
                  s.add_dependency(%q<rake>, ["~> 0.9.2"])
         | 
| 67 | 
            +
                  s.add_dependency(%q<rspec>, ["~> 1.3.2"])
         | 
| 77 68 | 
             
                end
         | 
| 78 69 | 
             
              else
         | 
| 79 | 
            -
                s.add_dependency(%q<dm-core>, ["~> 1. | 
| 80 | 
            -
                s.add_dependency(%q<jeweler>, ["~> 1. | 
| 81 | 
            -
                s.add_dependency(%q<rake>, ["~> 0. | 
| 82 | 
            -
                s.add_dependency(%q<rspec>, ["~> 1.3. | 
| 70 | 
            +
                s.add_dependency(%q<dm-core>, ["~> 1.2.0.rc1"])
         | 
| 71 | 
            +
                s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
         | 
| 72 | 
            +
                s.add_dependency(%q<rake>, ["~> 0.9.2"])
         | 
| 73 | 
            +
                s.add_dependency(%q<rspec>, ["~> 1.3.2"])
         | 
| 83 74 | 
             
              end
         | 
| 84 75 | 
             
            end
         | 
| 85 76 |  | 
| @@ -1,141 +1,125 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe DataMapper::Collection do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              before :all do
         | 
| 6 | 
            -
                @dragons   = Dragon.all
         | 
| 7 | 
            -
                @countries = Country.all
         | 
| 8 | 
            -
              end
         | 
| 9 | 
            -
             | 
| 10 4 | 
             
              supported_by :sqlite, :mysql, :postgres do
         | 
| 5 | 
            +
                let(:dragons)   { Dragon.all  }
         | 
| 6 | 
            +
                let(:countries) { Country.all }
         | 
| 11 7 |  | 
| 12 8 | 
             
                it_should_behave_like 'It Has Setup Resources'
         | 
| 13 9 | 
             
                it_should_behave_like 'An Aggregatable Class'
         | 
| 14 10 |  | 
| 15 11 | 
             
                describe 'ignore invalid query' do
         | 
| 16 | 
            -
                   | 
| 17 | 
            -
                    @dragons = @dragons.all(:id => [])
         | 
| 18 | 
            -
                  end
         | 
| 12 | 
            +
                  let(:dragons) { Dragon.all.all(:id => []) }
         | 
| 19 13 |  | 
| 20 14 | 
             
                  [ :size, :count ].each do |method|
         | 
| 21 15 | 
             
                    describe "##{method}" do
         | 
| 22 | 
            -
                       | 
| 23 | 
            -
             | 
| 24 | 
            -
                       | 
| 16 | 
            +
                      subject { dragons.send(method) }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      it { should == 0 }
         | 
| 25 19 | 
             
                    end
         | 
| 26 20 | 
             
                  end
         | 
| 27 21 |  | 
| 28 22 | 
             
                  describe '#min' do
         | 
| 29 | 
            -
                     | 
| 30 | 
            -
             | 
| 31 | 
            -
                     | 
| 23 | 
            +
                    subject { dragons.min(:id) }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    it { should be_nil }
         | 
| 32 26 | 
             
                  end
         | 
| 33 27 |  | 
| 34 28 | 
             
                  describe '#max' do
         | 
| 35 | 
            -
                     | 
| 36 | 
            -
             | 
| 37 | 
            -
                     | 
| 29 | 
            +
                    subject { dragons.max(:id) }
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    it { should be_nil }
         | 
| 38 32 | 
             
                  end
         | 
| 39 33 |  | 
| 40 34 | 
             
                  describe '#avg' do
         | 
| 41 | 
            -
                     | 
| 42 | 
            -
             | 
| 43 | 
            -
                     | 
| 35 | 
            +
                    subject { dragons.avg(:id) }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                    it { should be_nil }
         | 
| 44 38 | 
             
                  end
         | 
| 45 39 |  | 
| 46 40 | 
             
                  describe '#sum' do
         | 
| 47 | 
            -
                     | 
| 48 | 
            -
             | 
| 49 | 
            -
                     | 
| 41 | 
            +
                    subject { dragons.sum(:id) }
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    it { should be_nil }
         | 
| 50 44 | 
             
                  end
         | 
| 51 45 |  | 
| 52 46 | 
             
                  describe '#aggregate' do
         | 
| 53 | 
            -
                     | 
| 54 | 
            -
             | 
| 55 | 
            -
                     | 
| 47 | 
            +
                    subject { dragons.aggregate(:id) }
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                    it { should == [] }
         | 
| 56 50 | 
             
                  end
         | 
| 57 51 | 
             
                end
         | 
| 58 52 |  | 
| 59 | 
            -
                 | 
| 60 | 
            -
                   | 
| 61 | 
            -
                    @collection = @dragons.all(:name => 'George') | @dragons.all(:name => 'Puff')
         | 
| 62 | 
            -
                  end
         | 
| 53 | 
            +
                context 'with collections created with Set operations' do
         | 
| 54 | 
            +
                  let(:collection) { dragons.all(:name => 'George') | dragons.all(:name => 'Puff') }
         | 
| 63 55 |  | 
| 64 56 | 
             
                  describe '#size' do
         | 
| 65 | 
            -
                    subject {  | 
| 57 | 
            +
                    subject { collection.size }
         | 
| 66 58 |  | 
| 67 59 | 
             
                    it { should == 2 }
         | 
| 68 60 | 
             
                  end
         | 
| 69 61 |  | 
| 70 62 | 
             
                  describe '#count' do
         | 
| 71 | 
            -
                    subject {  | 
| 63 | 
            +
                    subject { collection.count }
         | 
| 72 64 |  | 
| 73 65 | 
             
                    it { should == 2 }
         | 
| 74 66 | 
             
                  end
         | 
| 75 67 |  | 
| 76 68 | 
             
                  describe '#min' do
         | 
| 77 | 
            -
                    subject {  | 
| 69 | 
            +
                    subject { collection.min(:toes_on_claw) }
         | 
| 78 70 |  | 
| 79 71 | 
             
                    it { should == 3 }
         | 
| 80 72 | 
             
                  end
         | 
| 81 73 |  | 
| 82 74 | 
             
                  describe '#max' do
         | 
| 83 | 
            -
                    subject {  | 
| 75 | 
            +
                    subject { collection.max(:toes_on_claw) }
         | 
| 84 76 |  | 
| 85 77 | 
             
                    it { should == 4 }
         | 
| 86 78 | 
             
                  end
         | 
| 87 79 |  | 
| 88 80 | 
             
                  describe '#avg' do
         | 
| 89 | 
            -
                    subject {  | 
| 81 | 
            +
                    subject { collection.avg(:toes_on_claw) }
         | 
| 90 82 |  | 
| 91 83 | 
             
                    it { should == 3.5 }
         | 
| 92 84 | 
             
                  end
         | 
| 93 85 |  | 
| 94 86 | 
             
                  describe '#sum' do
         | 
| 95 | 
            -
                    subject {  | 
| 87 | 
            +
                    subject { collection.sum(:toes_on_claw) }
         | 
| 96 88 |  | 
| 97 89 | 
             
                    it { should == 7 }
         | 
| 98 90 | 
             
                  end
         | 
| 99 91 |  | 
| 100 92 | 
             
                  describe '#aggregate' do
         | 
| 101 | 
            -
                    subject {  | 
| 93 | 
            +
                    subject { collection.aggregate(:all.count, :name.count, :toes_on_claw.min, :toes_on_claw.max, :toes_on_claw.avg, :toes_on_claw.sum)}
         | 
| 102 94 |  | 
| 103 95 | 
             
                    it { should == [ 2, 2, 3, 4, 3.5, 7 ] }
         | 
| 104 96 | 
             
                  end
         | 
| 105 97 | 
             
                end
         | 
| 106 98 |  | 
| 107 | 
            -
                 | 
| 99 | 
            +
                context 'with a collection limited to 1 result' do
         | 
| 100 | 
            +
                  let(:dragons) { Dragon.all(:limit => 1) }
         | 
| 108 101 |  | 
| 109 | 
            -
                   | 
| 110 | 
            -
                     | 
| 111 | 
            -
                  end
         | 
| 102 | 
            +
                  describe '#size' do
         | 
| 103 | 
            +
                    subject { dragons.size }
         | 
| 112 104 |  | 
| 113 | 
            -
             | 
| 114 | 
            -
                    it 'should return 1' do
         | 
| 115 | 
            -
                      @dragons.size.should == 1
         | 
| 116 | 
            -
                    end
         | 
| 105 | 
            +
                    it { should == 1 }
         | 
| 117 106 | 
             
                  end
         | 
| 118 107 |  | 
| 119 | 
            -
                  describe  | 
| 120 | 
            -
                     | 
| 121 | 
            -
                      pending 'TODO: make count apply to the limited collection. Currently limit applies after the count' do
         | 
| 122 | 
            -
                        @dragons.count.should == 1
         | 
| 123 | 
            -
                      end
         | 
| 124 | 
            -
                    end
         | 
| 125 | 
            -
                  end
         | 
| 108 | 
            +
                  describe '#count' do
         | 
| 109 | 
            +
                    subject { dragons.count }
         | 
| 126 110 |  | 
| 111 | 
            +
                    it { pending('TODO: make count apply to the limited collection. Currently limit applies after the count') { should == 1 } }
         | 
| 112 | 
            +
                  end
         | 
| 127 113 | 
             
                end
         | 
| 128 114 |  | 
| 129 | 
            -
                 | 
| 130 | 
            -
                   | 
| 131 | 
            -
                    @dragons = Dragon.all(:order => [ :birth_at.desc ])
         | 
| 132 | 
            -
                  end
         | 
| 115 | 
            +
                context 'with the order reversed by the grouping field' do
         | 
| 116 | 
            +
                  subject { dragons.aggregate(:birth_at, :all.count) }
         | 
| 133 117 |  | 
| 134 | 
            -
                   | 
| 135 | 
            -
             | 
| 118 | 
            +
                  let(:dragons) { Dragon.all(:order => [ :birth_at.desc ]) }
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                  it 'displays the results in reverse order' do
         | 
| 121 | 
            +
                    should == Dragon.aggregate(:birth_at, :all.count).reverse
         | 
| 136 122 | 
             
                  end
         | 
| 137 123 | 
             
                end
         | 
| 138 | 
            -
             | 
| 139 124 | 
             
              end
         | 
| 140 | 
            -
             | 
| 141 125 | 
             
            end
         | 
    
        data/spec/public/model_spec.rb
    CHANGED
    
    | @@ -1,13 +1,10 @@ | |
| 1 1 | 
             
            require 'spec_helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            describe DataMapper::Model do
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              before :all do
         | 
| 6 | 
            -
                @dragons   = Dragon
         | 
| 7 | 
            -
                @countries = Country
         | 
| 8 | 
            -
              end
         | 
| 9 | 
            -
             | 
| 10 4 | 
             
              supported_by :sqlite, :mysql, :postgres do
         | 
| 5 | 
            +
                let(:dragons)   { Dragon  }
         | 
| 6 | 
            +
                let(:countries) { Country }
         | 
| 7 | 
            +
             | 
| 11 8 | 
             
                it_should_behave_like 'It Has Setup Resources'
         | 
| 12 9 | 
             
                it_should_behave_like 'An Aggregatable Class'
         | 
| 13 10 | 
             
              end
         | 
| @@ -7,7 +7,6 @@ shared_examples_for 'It Has Setup Resources' do | |
| 7 7 | 
             
              end
         | 
| 8 8 |  | 
| 9 9 | 
             
              before :all do
         | 
| 10 | 
            -
             | 
| 11 10 | 
             
                DataMapper.auto_migrate!
         | 
| 12 11 |  | 
| 13 12 | 
             
                @birth_at   = DateTime.now
         | 
| @@ -17,46 +16,66 @@ shared_examples_for 'It Has Setup Resources' do | |
| 17 16 | 
             
                @chuck = Knight.create(:name => 'Chuck')
         | 
| 18 17 | 
             
                @larry = Knight.create(:name => 'Larry')
         | 
| 19 18 |  | 
| 20 | 
            -
                Dragon.create(:name => 'George', :is_fire_breathing => false, :toes_on_claw => 3, :birth_at => @birth_at, :birth_on => @birth_on, :birth_time => @birth_time, :knight => @chuck | 
| 21 | 
            -
                Dragon.create(:name => 'Puff',   :is_fire_breathing => true,  :toes_on_claw => 4, :birth_at => @birth_at, :birth_on => @birth_on, :birth_time => @birth_time, :knight => @larry | 
| 19 | 
            +
                Dragon.create(:name => 'George', :is_fire_breathing => false, :toes_on_claw => 3, :birth_at => @birth_at, :birth_on => @birth_on, :birth_time => @birth_time, :knight => @chuck)
         | 
| 20 | 
            +
                Dragon.create(:name => 'Puff',   :is_fire_breathing => true,  :toes_on_claw => 4, :birth_at => @birth_at, :birth_on => @birth_on, :birth_time => @birth_time, :knight => @larry)
         | 
| 22 21 | 
             
                Dragon.create(:name => nil,      :is_fire_breathing => true,  :toes_on_claw => 5, :birth_at => nil,       :birth_on => nil,       :birth_time => nil)
         | 
| 23 22 |  | 
| 24 | 
            -
                gold_kilo_price | 
| 23 | 
            +
                gold_kilo_price   = 277738.70
         | 
| 25 24 | 
             
                @gold_tonne_price = gold_kilo_price * 10000
         | 
| 26 25 |  | 
| 27 | 
            -
                Country.create( | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
                 | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 26 | 
            +
                Country.create(
         | 
| 27 | 
            +
                  :name                => 'China',
         | 
| 28 | 
            +
                  :population          => 1330044605,
         | 
| 29 | 
            +
                  :birth_rate          => 13.71,
         | 
| 30 | 
            +
                  :gold_reserve_tonnes => 600.0,
         | 
| 31 | 
            +
                  :gold_reserve_value  => 600.0 * @gold_tonne_price  # => 32150000
         | 
| 32 | 
            +
                )
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                Country.create(
         | 
| 35 | 
            +
                  :name                => 'United States',
         | 
| 36 | 
            +
                  :population          => 303824646,
         | 
| 37 | 
            +
                  :birth_rate          => 14.18,
         | 
| 38 | 
            +
                  :gold_reserve_tonnes => 8133.5,
         | 
| 39 | 
            +
                  :gold_reserve_value  => 8133.5 * @gold_tonne_price
         | 
| 40 | 
            +
                )
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                Country.create(
         | 
| 43 | 
            +
                  :name                => 'Brazil',
         | 
| 44 | 
            +
                  :population          => 191908598,
         | 
| 45 | 
            +
                  :birth_rate          => 16.04,
         | 
| 46 | 
            +
                  :gold_reserve_tonnes => nil  # example of no stats available
         | 
| 47 | 
            +
                )
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                Country.create(
         | 
| 50 | 
            +
                  :name                => 'Russia',
         | 
| 51 | 
            +
                  :population          => 140702094,
         | 
| 52 | 
            +
                  :birth_rate          => 11.03,
         | 
| 53 | 
            +
                  :gold_reserve_tonnes => 438.2,
         | 
| 54 | 
            +
                  :gold_reserve_value  => 438.2 * @gold_tonne_price
         | 
| 55 | 
            +
                )
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                Country.create(
         | 
| 58 | 
            +
                  :name                => 'Japan',
         | 
| 59 | 
            +
                  :population          => 127288419,
         | 
| 60 | 
            +
                  :birth_rate          => 7.87,
         | 
| 61 | 
            +
                  :gold_reserve_tonnes => 765.2,
         | 
| 62 | 
            +
                  :gold_reserve_value  => 765.2 * @gold_tonne_price
         | 
| 63 | 
            +
                )
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                Country.create(
         | 
| 66 | 
            +
                  :name                => 'Mexico',
         | 
| 67 | 
            +
                  :population          => 109955400,
         | 
| 68 | 
            +
                  :birth_rate          => 20.04,
         | 
| 69 | 
            +
                  :gold_reserve_tonnes => nil  # example of no stats available
         | 
| 70 | 
            +
                )
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                Country.create(
         | 
| 73 | 
            +
                  :name                => 'Germany',
         | 
| 74 | 
            +
                  :population          => 82369548,
         | 
| 75 | 
            +
                  :birth_rate          => 8.18,
         | 
| 76 | 
            +
                  :gold_reserve_tonnes => 3417.4,
         | 
| 77 | 
            +
                  :gold_reserve_value  => 3417.4 * @gold_tonne_price
         | 
| 78 | 
            +
                )
         | 
| 60 79 |  | 
| 61 80 | 
             
                @approx_by = 0.0001
         | 
| 62 81 | 
             
              end
         | 
| @@ -70,234 +89,234 @@ shared_examples_for 'An Aggregatable Class' do | |
| 70 89 | 
             
              describe '#count' do
         | 
| 71 90 | 
             
                it_should_behave_like 'count with no arguments'
         | 
| 72 91 |  | 
| 73 | 
            -
                 | 
| 74 | 
            -
                  it ' | 
| 75 | 
            -
                     | 
| 92 | 
            +
                context 'with a property name' do
         | 
| 93 | 
            +
                  it 'counts the results' do
         | 
| 94 | 
            +
                    dragons.count(:name).should == 2
         | 
| 76 95 | 
             
                  end
         | 
| 77 96 |  | 
| 78 | 
            -
                  it ' | 
| 79 | 
            -
                     | 
| 97 | 
            +
                  it 'counts the results with conditions having operators' do
         | 
| 98 | 
            +
                    dragons.count(:name, :toes_on_claw.gt => 3).should == 1
         | 
| 80 99 | 
             
                  end
         | 
| 81 100 |  | 
| 82 | 
            -
                  it ' | 
| 101 | 
            +
                  it 'counts the results with raw conditions' do
         | 
| 83 102 | 
             
                    statement = 'is_fire_breathing = ?'
         | 
| 84 | 
            -
                     | 
| 85 | 
            -
                     | 
| 103 | 
            +
                    dragons.count(:name, :conditions => [ statement, false ]).should == 1
         | 
| 104 | 
            +
                    dragons.count(:name, :conditions => [ statement, true  ]).should == 1
         | 
| 86 105 | 
             
                  end
         | 
| 87 106 | 
             
                end
         | 
| 88 107 | 
             
              end
         | 
| 89 108 |  | 
| 90 109 | 
             
              describe '#min' do
         | 
| 91 | 
            -
                 | 
| 92 | 
            -
                  it ' | 
| 93 | 
            -
                     | 
| 110 | 
            +
                context 'with no arguments' do
         | 
| 111 | 
            +
                  it 'raises an error' do
         | 
| 112 | 
            +
                    expect { dragons.min }.to raise_error(ArgumentError)
         | 
| 94 113 | 
             
                  end
         | 
| 95 114 | 
             
                end
         | 
| 96 115 |  | 
| 97 | 
            -
                 | 
| 98 | 
            -
                  it ' | 
| 99 | 
            -
                     | 
| 100 | 
            -
                     | 
| 116 | 
            +
                context 'with a property name' do
         | 
| 117 | 
            +
                  it 'provides the lowest value of an Integer property' do
         | 
| 118 | 
            +
                    dragons.min(:toes_on_claw).should == 3
         | 
| 119 | 
            +
                    countries.min(:population).should == 82369548
         | 
| 101 120 | 
             
                  end
         | 
| 102 121 |  | 
| 103 | 
            -
                  it ' | 
| 104 | 
            -
                     | 
| 105 | 
            -
                     | 
| 106 | 
            -
                     | 
| 122 | 
            +
                  it 'provides the lowest value of a Float property' do
         | 
| 123 | 
            +
                    countries.min(:birth_rate).should be_kind_of(Float)
         | 
| 124 | 
            +
                    countries.min(:birth_rate).should >= 7.87 - @approx_by  # approx match
         | 
| 125 | 
            +
                    countries.min(:birth_rate).should <= 7.87 + @approx_by  # approx match
         | 
| 107 126 | 
             
                  end
         | 
| 108 127 |  | 
| 109 | 
            -
                  it ' | 
| 110 | 
            -
                     | 
| 111 | 
            -
                     | 
| 128 | 
            +
                  it 'provides the lowest value of a BigDecimal property' do
         | 
| 129 | 
            +
                    countries.min(:gold_reserve_value).should be_kind_of(BigDecimal)
         | 
| 130 | 
            +
                    countries.min(:gold_reserve_value).should == BigDecimal('1217050983400.0')
         | 
| 112 131 | 
             
                  end
         | 
| 113 132 |  | 
| 114 | 
            -
                  it ' | 
| 133 | 
            +
                  it 'provides the lowest value of a DateTime property' do
         | 
| 115 134 | 
             
                    pending_if 'TODO: returns incorrect value until DO handles TZs properly', @skip do
         | 
| 116 | 
            -
                       | 
| 117 | 
            -
                       | 
| 135 | 
            +
                      dragons.min(:birth_at).should be_kind_of(DateTime)
         | 
| 136 | 
            +
                      dragons.min(:birth_at).to_s.should == @birth_at.to_s
         | 
| 118 137 | 
             
                    end
         | 
| 119 138 | 
             
                  end
         | 
| 120 139 |  | 
| 121 | 
            -
                  it ' | 
| 122 | 
            -
                     | 
| 123 | 
            -
                     | 
| 140 | 
            +
                  it 'provides the lowest value of a Date property' do
         | 
| 141 | 
            +
                    dragons.min(:birth_on).should be_kind_of(Date)
         | 
| 142 | 
            +
                    dragons.min(:birth_on).should == @birth_on
         | 
| 124 143 | 
             
                  end
         | 
| 125 144 |  | 
| 126 | 
            -
                  it ' | 
| 127 | 
            -
                     | 
| 128 | 
            -
                     | 
| 145 | 
            +
                  it 'provides the lowest value of a Time property' do
         | 
| 146 | 
            +
                    dragons.min(:birth_time).should be_kind_of(Time)
         | 
| 147 | 
            +
                    dragons.min(:birth_time).to_s.should == @birth_time.to_s
         | 
| 129 148 | 
             
                  end
         | 
| 130 149 |  | 
| 131 | 
            -
                  it ' | 
| 132 | 
            -
                     | 
| 133 | 
            -
                     | 
| 150 | 
            +
                  it 'provides the lowest value when conditions provided' do
         | 
| 151 | 
            +
                    dragons.min(:toes_on_claw, :is_fire_breathing => true).should  == 4
         | 
| 152 | 
            +
                    dragons.min(:toes_on_claw, :is_fire_breathing => false).should == 3
         | 
| 134 153 | 
             
                  end
         | 
| 135 154 | 
             
                end
         | 
| 136 155 | 
             
              end
         | 
| 137 156 |  | 
| 138 157 | 
             
              describe '#max' do
         | 
| 139 | 
            -
                 | 
| 140 | 
            -
                  it ' | 
| 141 | 
            -
                     | 
| 158 | 
            +
                context 'with no arguments' do
         | 
| 159 | 
            +
                  it 'raises an error' do
         | 
| 160 | 
            +
                    expect { dragons.max }.to raise_error(ArgumentError)
         | 
| 142 161 | 
             
                  end
         | 
| 143 162 | 
             
                end
         | 
| 144 163 |  | 
| 145 | 
            -
                 | 
| 146 | 
            -
                  it ' | 
| 147 | 
            -
                     | 
| 148 | 
            -
                     | 
| 164 | 
            +
                context 'with a property name' do
         | 
| 165 | 
            +
                  it 'provides the highest value of an Integer property' do
         | 
| 166 | 
            +
                    dragons.max(:toes_on_claw).should == 5
         | 
| 167 | 
            +
                    countries.max(:population).should == 1330044605
         | 
| 149 168 | 
             
                  end
         | 
| 150 169 |  | 
| 151 | 
            -
                  it ' | 
| 152 | 
            -
                     | 
| 153 | 
            -
                     | 
| 154 | 
            -
                     | 
| 170 | 
            +
                  it 'provides the highest value of a Float property' do
         | 
| 171 | 
            +
                    countries.max(:birth_rate).should be_kind_of(Float)
         | 
| 172 | 
            +
                    countries.max(:birth_rate).should >= 20.04 - @approx_by  # approx match
         | 
| 173 | 
            +
                    countries.max(:birth_rate).should <= 20.04 + @approx_by  # approx match
         | 
| 155 174 | 
             
                  end
         | 
| 156 175 |  | 
| 157 | 
            -
                  it ' | 
| 158 | 
            -
                     | 
| 176 | 
            +
                  it 'provides the highest value of a BigDecimal property' do
         | 
| 177 | 
            +
                    countries.max(:gold_reserve_value).should == BigDecimal('22589877164500.0')
         | 
| 159 178 | 
             
                  end
         | 
| 160 179 |  | 
| 161 | 
            -
                  it ' | 
| 180 | 
            +
                  it 'provides the highest value of a DateTime property' do
         | 
| 162 181 | 
             
                    pending_if 'TODO: returns incorrect value until DO handles TZs properly', @skip do
         | 
| 163 | 
            -
                       | 
| 164 | 
            -
                       | 
| 182 | 
            +
                      dragons.min(:birth_at).should be_kind_of(DateTime)
         | 
| 183 | 
            +
                      dragons.min(:birth_at).to_s.should == @birth_at.to_s
         | 
| 165 184 | 
             
                    end
         | 
| 166 185 | 
             
                  end
         | 
| 167 186 |  | 
| 168 | 
            -
                  it ' | 
| 169 | 
            -
                     | 
| 170 | 
            -
                     | 
| 187 | 
            +
                  it 'provides the highest value of a Date property' do
         | 
| 188 | 
            +
                    dragons.min(:birth_on).should be_kind_of(Date)
         | 
| 189 | 
            +
                    dragons.min(:birth_on).should == @birth_on
         | 
| 171 190 | 
             
                  end
         | 
| 172 191 |  | 
| 173 | 
            -
                  it ' | 
| 174 | 
            -
                     | 
| 175 | 
            -
                     | 
| 192 | 
            +
                  it 'provides the highest value of a Time property' do
         | 
| 193 | 
            +
                    dragons.min(:birth_time).should be_kind_of(Time)
         | 
| 194 | 
            +
                    dragons.min(:birth_time).to_s.should == @birth_time.to_s
         | 
| 176 195 | 
             
                  end
         | 
| 177 196 |  | 
| 178 | 
            -
                  it ' | 
| 179 | 
            -
                     | 
| 180 | 
            -
                     | 
| 197 | 
            +
                  it 'provides the highest value when conditions provided' do
         | 
| 198 | 
            +
                    dragons.max(:toes_on_claw, :is_fire_breathing => true).should  == 5
         | 
| 199 | 
            +
                    dragons.max(:toes_on_claw, :is_fire_breathing => false).should == 3
         | 
| 181 200 | 
             
                  end
         | 
| 182 201 | 
             
                end
         | 
| 183 202 | 
             
              end
         | 
| 184 203 |  | 
| 185 204 | 
             
              describe '#avg' do
         | 
| 186 | 
            -
                 | 
| 187 | 
            -
                  it ' | 
| 188 | 
            -
                     | 
| 205 | 
            +
                context 'with no arguments' do
         | 
| 206 | 
            +
                  it 'raises an error' do
         | 
| 207 | 
            +
                    expect { dragons.avg }.to raise_error(ArgumentError)
         | 
| 189 208 | 
             
                  end
         | 
| 190 209 | 
             
                end
         | 
| 191 210 |  | 
| 192 | 
            -
                 | 
| 193 | 
            -
                  it ' | 
| 194 | 
            -
                     | 
| 195 | 
            -
                     | 
| 211 | 
            +
                context 'with a property name' do
         | 
| 212 | 
            +
                  it 'provides the average value of an Integer property' do
         | 
| 213 | 
            +
                    dragons.avg(:toes_on_claw).should be_kind_of(Float)
         | 
| 214 | 
            +
                    dragons.avg(:toes_on_claw).should == 4.0
         | 
| 196 215 | 
             
                  end
         | 
| 197 216 |  | 
| 198 | 
            -
                  it ' | 
| 217 | 
            +
                  it 'provides the average value of a Float property' do
         | 
| 199 218 | 
             
                    mean_birth_rate = (13.71 + 14.18 + 16.04 + 11.03 + 7.87 + 20.04 + 8.18) / 7
         | 
| 200 | 
            -
                     | 
| 201 | 
            -
                     | 
| 202 | 
            -
                     | 
| 219 | 
            +
                    countries.avg(:birth_rate).should be_kind_of(Float)
         | 
| 220 | 
            +
                    countries.avg(:birth_rate).should >= mean_birth_rate - @approx_by  # approx match
         | 
| 221 | 
            +
                    countries.avg(:birth_rate).should <= mean_birth_rate + @approx_by  # approx match
         | 
| 203 222 | 
             
                  end
         | 
| 204 223 |  | 
| 205 | 
            -
                  it ' | 
| 224 | 
            +
                  it 'provides the average value of a BigDecimal property' do
         | 
| 206 225 | 
             
                    mean_gold_reserve_value = ((600.0 + 8133.50 + 438.20 + 765.20 + 3417.40) * @gold_tonne_price) / 5
         | 
| 207 | 
            -
                     | 
| 208 | 
            -
                     | 
| 226 | 
            +
                    countries.avg(:gold_reserve_value).should be_kind_of(BigDecimal)
         | 
| 227 | 
            +
                    countries.avg(:gold_reserve_value).should == BigDecimal(mean_gold_reserve_value.to_s)
         | 
| 209 228 | 
             
                  end
         | 
| 210 229 |  | 
| 211 | 
            -
                  it ' | 
| 212 | 
            -
                     | 
| 213 | 
            -
                     | 
| 230 | 
            +
                  it 'provides the average value when conditions provided' do
         | 
| 231 | 
            +
                    dragons.avg(:toes_on_claw, :is_fire_breathing => true).should  == 4.5
         | 
| 232 | 
            +
                    dragons.avg(:toes_on_claw, :is_fire_breathing => false).should == 3
         | 
| 214 233 | 
             
                  end
         | 
| 215 234 | 
             
                end
         | 
| 216 235 | 
             
              end
         | 
| 217 236 |  | 
| 218 237 | 
             
              describe '#sum' do
         | 
| 219 | 
            -
                 | 
| 220 | 
            -
                  it ' | 
| 221 | 
            -
                     | 
| 238 | 
            +
                context 'with no arguments' do
         | 
| 239 | 
            +
                  it 'raises an error' do
         | 
| 240 | 
            +
                    expect { dragons.sum }.to raise_error(ArgumentError)
         | 
| 222 241 | 
             
                  end
         | 
| 223 242 | 
             
                end
         | 
| 224 243 |  | 
| 225 | 
            -
                 | 
| 226 | 
            -
                  it ' | 
| 227 | 
            -
                     | 
| 244 | 
            +
                context 'with a property name' do
         | 
| 245 | 
            +
                  it 'provides the sum of values for an Integer property' do
         | 
| 246 | 
            +
                    dragons.sum(:toes_on_claw).should == 12
         | 
| 228 247 |  | 
| 229 248 | 
             
                    total_population = 1330044605 + 303824646 + 191908598 + 140702094 +
         | 
| 230 249 | 
             
                                       127288419 + 109955400 + 82369548
         | 
| 231 | 
            -
                     | 
| 250 | 
            +
                    countries.sum(:population).should == total_population
         | 
| 232 251 | 
             
                  end
         | 
| 233 252 |  | 
| 234 | 
            -
                  it ' | 
| 253 | 
            +
                  it 'provides the sum of values for a Float property' do
         | 
| 235 254 | 
             
                    total_tonnes = 600.0 + 8133.5 + 438.2 + 765.2 + 3417.4
         | 
| 236 | 
            -
                     | 
| 237 | 
            -
                     | 
| 238 | 
            -
                     | 
| 255 | 
            +
                    countries.sum(:gold_reserve_tonnes).should be_kind_of(Float)
         | 
| 256 | 
            +
                    countries.sum(:gold_reserve_tonnes).should >= total_tonnes - @approx_by  # approx match
         | 
| 257 | 
            +
                    countries.sum(:gold_reserve_tonnes).should <= total_tonnes + @approx_by  # approx match
         | 
| 239 258 | 
             
                  end
         | 
| 240 259 |  | 
| 241 | 
            -
                  it ' | 
| 242 | 
            -
                     | 
| 260 | 
            +
                  it 'provides the sum of values for a BigDecimal property' do
         | 
| 261 | 
            +
                    countries.sum(:gold_reserve_value).should == BigDecimal('37090059214100.0')
         | 
| 243 262 | 
             
                  end
         | 
| 244 263 |  | 
| 245 | 
            -
                  it ' | 
| 246 | 
            -
                     | 
| 247 | 
            -
                     | 
| 264 | 
            +
                  it 'provides the average value when conditions provided' do
         | 
| 265 | 
            +
                    dragons.sum(:toes_on_claw, :is_fire_breathing => true).should  == 9
         | 
| 266 | 
            +
                    dragons.sum(:toes_on_claw, :is_fire_breathing => false).should == 3
         | 
| 248 267 | 
             
                  end
         | 
| 249 268 | 
             
                end
         | 
| 250 269 | 
             
              end
         | 
| 251 270 |  | 
| 252 271 | 
             
              describe '#aggregate' do
         | 
| 253 | 
            -
                 | 
| 254 | 
            -
                  it ' | 
| 255 | 
            -
                     | 
| 272 | 
            +
                context 'with no arguments' do
         | 
| 273 | 
            +
                  it 'raises an error' do
         | 
| 274 | 
            +
                    expect { dragons.aggregate }.to raise_error(ArgumentError)
         | 
| 256 275 | 
             
                  end
         | 
| 257 276 | 
             
                end
         | 
| 258 277 |  | 
| 259 | 
            -
                 | 
| 260 | 
            -
                  it ' | 
| 261 | 
            -
                    results =  | 
| 278 | 
            +
                context 'with only aggregate fields specified' do
         | 
| 279 | 
            +
                  it 'provides aggregate results' do
         | 
| 280 | 
            +
                    results = dragons.aggregate(:all.count, :name.count, :toes_on_claw.min, :toes_on_claw.max, :toes_on_claw.avg, :toes_on_claw.sum)
         | 
| 262 281 | 
             
                    results.should == [ 3, 2, 3, 5, 4.0, 12 ]
         | 
| 263 282 | 
             
                  end
         | 
| 264 283 | 
             
                end
         | 
| 265 284 |  | 
| 266 | 
            -
                 | 
| 267 | 
            -
                  it ' | 
| 268 | 
            -
                    results =  | 
| 285 | 
            +
                context 'with aggregate fields and a property to group by' do
         | 
| 286 | 
            +
                  it 'provides aggregate results' do
         | 
| 287 | 
            +
                    results = dragons.aggregate(:all.count, :name.count, :toes_on_claw.min, :toes_on_claw.max, :toes_on_claw.avg, :toes_on_claw.sum, :is_fire_breathing)
         | 
| 269 288 | 
             
                    results.should == [ [ 1, 1, 3, 3, 3.0, 3, false ], [ 2, 1, 4, 5, 4.5, 9, true ] ]
         | 
| 270 289 | 
             
                  end
         | 
| 271 290 | 
             
                end
         | 
| 272 291 | 
             
              end
         | 
| 273 292 |  | 
| 274 293 | 
             
              describe 'query path issue' do
         | 
| 275 | 
            -
                it  | 
| 276 | 
            -
                  dragon =  | 
| 294 | 
            +
                it 'does not break when a query path is specified' do
         | 
| 295 | 
            +
                  dragon = dragons.first(Dragon.knight.name => 'Chuck')
         | 
| 277 296 | 
             
                  dragon.name.should == 'George'
         | 
| 278 297 | 
             
                end
         | 
| 279 298 | 
             
              end
         | 
| 280 299 | 
             
            end
         | 
| 281 300 |  | 
| 282 301 | 
             
            shared_examples_for 'count with no arguments' do
         | 
| 283 | 
            -
              it ' | 
| 284 | 
            -
                 | 
| 302 | 
            +
              it 'counts the results' do
         | 
| 303 | 
            +
                dragons.count.should  == 3
         | 
| 285 304 |  | 
| 286 | 
            -
                 | 
| 305 | 
            +
                countries.count.should == 7
         | 
| 287 306 | 
             
              end
         | 
| 288 307 |  | 
| 289 | 
            -
              it ' | 
| 290 | 
            -
                 | 
| 308 | 
            +
              it 'counts the results with conditions having operators' do
         | 
| 309 | 
            +
                dragons.count(:toes_on_claw.gt => 3).should == 2
         | 
| 291 310 |  | 
| 292 | 
            -
                 | 
| 293 | 
            -
                 | 
| 294 | 
            -
                 | 
| 295 | 
            -
                 | 
| 311 | 
            +
                countries.count(:birth_rate.lt => 12).should == 3
         | 
| 312 | 
            +
                countries.count(:population.gt => 1000000000).should == 1
         | 
| 313 | 
            +
                countries.count(:population.gt => 2000000000).should == 0
         | 
| 314 | 
            +
                countries.count(:population.lt => 10).should == 0
         | 
| 296 315 | 
             
              end
         | 
| 297 316 |  | 
| 298 | 
            -
              it ' | 
| 317 | 
            +
              it 'counts the results with raw conditions' do
         | 
| 299 318 | 
             
                dragon_statement = 'is_fire_breathing = ?'
         | 
| 300 | 
            -
                 | 
| 301 | 
            -
                 | 
| 319 | 
            +
                dragons.count(:conditions => [ dragon_statement, false ]).should == 1
         | 
| 320 | 
            +
                dragons.count(:conditions => [ dragon_statement, true  ]).should == 2
         | 
| 302 321 | 
             
              end
         | 
| 303 322 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,8 +1,15 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: dm-aggregates
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
               | 
| 5 | 
            -
               | 
| 4 | 
            +
              hash: 15424023
         | 
| 5 | 
            +
              prerelease: 6
         | 
| 6 | 
            +
              segments: 
         | 
| 7 | 
            +
              - 1
         | 
| 8 | 
            +
              - 2
         | 
| 9 | 
            +
              - 0
         | 
| 10 | 
            +
              - rc
         | 
| 11 | 
            +
              - 1
         | 
| 12 | 
            +
              version: 1.2.0.rc1
         | 
| 6 13 | 
             
            platform: ruby
         | 
| 7 14 | 
             
            authors: 
         | 
| 8 15 | 
             
            - Foy Savas
         | 
| @@ -10,53 +17,74 @@ autorequire: | |
| 10 17 | 
             
            bindir: bin
         | 
| 11 18 | 
             
            cert_chain: []
         | 
| 12 19 |  | 
| 13 | 
            -
            date: 2011- | 
| 14 | 
            -
            default_executable: 
         | 
| 20 | 
            +
            date: 2011-09-09 00:00:00 Z
         | 
| 15 21 | 
             
            dependencies: 
         | 
| 16 22 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 17 | 
            -
               | 
| 18 | 
            -
               | 
| 23 | 
            +
              type: :runtime
         | 
| 24 | 
            +
              version_requirements: &id001 !ruby/object:Gem::Requirement 
         | 
| 19 25 | 
             
                none: false
         | 
| 20 26 | 
             
                requirements: 
         | 
| 21 27 | 
             
                - - ~>
         | 
| 22 28 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 23 | 
            -
                     | 
| 24 | 
            -
             | 
| 29 | 
            +
                    hash: 15424023
         | 
| 30 | 
            +
                    segments: 
         | 
| 31 | 
            +
                    - 1
         | 
| 32 | 
            +
                    - 2
         | 
| 33 | 
            +
                    - 0
         | 
| 34 | 
            +
                    - rc
         | 
| 35 | 
            +
                    - 1
         | 
| 36 | 
            +
                    version: 1.2.0.rc1
         | 
| 25 37 | 
             
              prerelease: false
         | 
| 26 | 
            -
               | 
| 38 | 
            +
              requirement: *id001
         | 
| 39 | 
            +
              name: dm-core
         | 
| 27 40 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 28 | 
            -
               | 
| 29 | 
            -
               | 
| 41 | 
            +
              type: :development
         | 
| 42 | 
            +
              version_requirements: &id002 !ruby/object:Gem::Requirement 
         | 
| 30 43 | 
             
                none: false
         | 
| 31 44 | 
             
                requirements: 
         | 
| 32 45 | 
             
                - - ~>
         | 
| 33 46 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 34 | 
            -
                     | 
| 35 | 
            -
             | 
| 47 | 
            +
                    hash: 7
         | 
| 48 | 
            +
                    segments: 
         | 
| 49 | 
            +
                    - 1
         | 
| 50 | 
            +
                    - 6
         | 
| 51 | 
            +
                    - 4
         | 
| 52 | 
            +
                    version: 1.6.4
         | 
| 36 53 | 
             
              prerelease: false
         | 
| 37 | 
            -
               | 
| 54 | 
            +
              requirement: *id002
         | 
| 55 | 
            +
              name: jeweler
         | 
| 38 56 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 39 | 
            -
               | 
| 40 | 
            -
               | 
| 57 | 
            +
              type: :development
         | 
| 58 | 
            +
              version_requirements: &id003 !ruby/object:Gem::Requirement 
         | 
| 41 59 | 
             
                none: false
         | 
| 42 60 | 
             
                requirements: 
         | 
| 43 61 | 
             
                - - ~>
         | 
| 44 62 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 45 | 
            -
                     | 
| 46 | 
            -
             | 
| 63 | 
            +
                    hash: 63
         | 
| 64 | 
            +
                    segments: 
         | 
| 65 | 
            +
                    - 0
         | 
| 66 | 
            +
                    - 9
         | 
| 67 | 
            +
                    - 2
         | 
| 68 | 
            +
                    version: 0.9.2
         | 
| 47 69 | 
             
              prerelease: false
         | 
| 48 | 
            -
               | 
| 70 | 
            +
              requirement: *id003
         | 
| 71 | 
            +
              name: rake
         | 
| 49 72 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 50 | 
            -
               | 
| 51 | 
            -
               | 
| 73 | 
            +
              type: :development
         | 
| 74 | 
            +
              version_requirements: &id004 !ruby/object:Gem::Requirement 
         | 
| 52 75 | 
             
                none: false
         | 
| 53 76 | 
             
                requirements: 
         | 
| 54 77 | 
             
                - - ~>
         | 
| 55 78 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 56 | 
            -
                     | 
| 57 | 
            -
             | 
| 79 | 
            +
                    hash: 31
         | 
| 80 | 
            +
                    segments: 
         | 
| 81 | 
            +
                    - 1
         | 
| 82 | 
            +
                    - 3
         | 
| 83 | 
            +
                    - 2
         | 
| 84 | 
            +
                    version: 1.3.2
         | 
| 58 85 | 
             
              prerelease: false
         | 
| 59 | 
            -
               | 
| 86 | 
            +
              requirement: *id004
         | 
| 87 | 
            +
              name: rspec
         | 
| 60 88 | 
             
            description: DataMapper plugin providing support for aggregates on collections
         | 
| 61 89 | 
             
            email: foysavas [a] gmail [d] com
         | 
| 62 90 | 
             
            executables: []
         | 
| @@ -95,7 +123,6 @@ files: | |
| 95 123 | 
             
            - tasks/spec.rake
         | 
| 96 124 | 
             
            - tasks/yard.rake
         | 
| 97 125 | 
             
            - tasks/yardstick.rake
         | 
| 98 | 
            -
            has_rdoc: true
         | 
| 99 126 | 
             
            homepage: http://github.com/datamapper/dm-aggregates
         | 
| 100 127 | 
             
            licenses: []
         | 
| 101 128 |  | 
| @@ -109,25 +136,27 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 109 136 | 
             
              requirements: 
         | 
| 110 137 | 
             
              - - ">="
         | 
| 111 138 | 
             
                - !ruby/object:Gem::Version 
         | 
| 139 | 
            +
                  hash: 3
         | 
| 140 | 
            +
                  segments: 
         | 
| 141 | 
            +
                  - 0
         | 
| 112 142 | 
             
                  version: "0"
         | 
| 113 143 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 114 144 | 
             
              none: false
         | 
| 115 145 | 
             
              requirements: 
         | 
| 116 | 
            -
              - - " | 
| 146 | 
            +
              - - ">"
         | 
| 117 147 | 
             
                - !ruby/object:Gem::Version 
         | 
| 118 | 
            -
                   | 
| 148 | 
            +
                  hash: 25
         | 
| 149 | 
            +
                  segments: 
         | 
| 150 | 
            +
                  - 1
         | 
| 151 | 
            +
                  - 3
         | 
| 152 | 
            +
                  - 1
         | 
| 153 | 
            +
                  version: 1.3.1
         | 
| 119 154 | 
             
            requirements: []
         | 
| 120 155 |  | 
| 121 156 | 
             
            rubyforge_project: datamapper
         | 
| 122 | 
            -
            rubygems_version: 1. | 
| 157 | 
            +
            rubygems_version: 1.8.10
         | 
| 123 158 | 
             
            signing_key: 
         | 
| 124 159 | 
             
            specification_version: 3
         | 
| 125 160 | 
             
            summary: DataMapper plugin providing support for aggregates on collections
         | 
| 126 | 
            -
            test_files: 
         | 
| 127 | 
            -
             | 
| 128 | 
            -
            - spec/isolated/require_before_setup_spec.rb
         | 
| 129 | 
            -
            - spec/isolated/require_spec.rb
         | 
| 130 | 
            -
            - spec/public/collection_spec.rb
         | 
| 131 | 
            -
            - spec/public/model_spec.rb
         | 
| 132 | 
            -
            - spec/public/shared/aggregate_shared_spec.rb
         | 
| 133 | 
            -
            - spec/spec_helper.rb
         | 
| 161 | 
            +
            test_files: []
         | 
| 162 | 
            +
             |