ranked-model 0.4.4 → 0.4.8
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.
- checksums.yaml +5 -5
 - data/.gitignore +1 -0
 - data/.rspec +1 -0
 - data/.travis.yml +32 -25
 - data/Appraisals +40 -35
 - data/Gemfile +12 -0
 - data/Readme.mkd +61 -12
 - data/gemfiles/rails_4_2.gemfile +8 -7
 - data/gemfiles/rails_5_0.gemfile +8 -8
 - data/gemfiles/rails_5_1.gemfile +8 -8
 - data/gemfiles/rails_5_2.gemfile +7 -4
 - data/gemfiles/rails_6_0.gemfile +22 -0
 - data/gemfiles/rails_6_1.gemfile +22 -0
 - data/lib/ranked-model/ranker.rb +356 -351
 - data/lib/ranked-model/version.rb +1 -1
 - data/lib/ranked-model.rb +1 -1
 - data/ranked-model.gemspec +4 -4
 - data/spec/duck-model/column_default_ducks_spec.rb +1 -1
 - data/spec/duck-model/duck_spec.rb +84 -46
 - data/spec/duck-model/lots_of_ducks_spec.rb +29 -33
 - data/spec/ego-model/ego_spec.rb +3 -3
 - data/spec/number-model/number_spec.rb +10 -2
 - data/spec/player-model/records_already_exist_spec.rb +1 -1
 - data/spec/ranked-model/ranker_spec.rb +18 -0
 - data/spec/sti-model/element_spec.rb +24 -24
 - data/spec/sti-model/vehicle_spec.rb +4 -4
 - data/spec/support/active_record.rb +7 -5
 - metadata +16 -16
 - data/gemfiles/rails_4_1.gemfile +0 -22
 
    
        data/lib/ranked-model/version.rb
    CHANGED
    
    
    
        data/lib/ranked-model.rb
    CHANGED
    
    
    
        data/ranked-model.gemspec
    CHANGED
    
    | 
         @@ -9,16 +9,16 @@ Gem::Specification.new do |s| 
     | 
|
| 
       9 
9 
     | 
    
         
             
              s.authors     = ["Matthew Beale"]
         
     | 
| 
       10 
10 
     | 
    
         
             
              s.email       = ["matt.beale@madhatted.com"]
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.homepage    = "https://github.com/mixonic/ranked-model"
         
     | 
| 
       12 
     | 
    
         
            -
              s.summary     = %q{An acts_as_sortable replacement built for Rails  
     | 
| 
       13 
     | 
    
         
            -
              s.description = %q{ranked-model is a modern row sorting library built for Rails  
     | 
| 
      
 12 
     | 
    
         
            +
              s.summary     = %q{An acts_as_sortable replacement built for Rails 4.2+}
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.description = %q{ranked-model is a modern row sorting library built for Rails 4.2+. It uses ARel aggressively and is better optimized than most other libraries.}
         
     | 
| 
       14 
14 
     | 
    
         
             
              s.license     = 'MIT'
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
              s.add_dependency "activerecord", ">= 4. 
     | 
| 
      
 16 
     | 
    
         
            +
              s.add_dependency "activerecord", ">= 4.2"
         
     | 
| 
       17 
17 
     | 
    
         
             
              s.add_development_dependency "rspec", "~> 3"
         
     | 
| 
       18 
18 
     | 
    
         
             
              s.add_development_dependency "rspec-its"
         
     | 
| 
       19 
19 
     | 
    
         
             
              s.add_development_dependency "mocha"
         
     | 
| 
       20 
20 
     | 
    
         
             
              s.add_development_dependency "database_cleaner", "~> 1.7.0"
         
     | 
| 
       21 
     | 
    
         
            -
              s.add_development_dependency "rake", " 
     | 
| 
      
 21 
     | 
    
         
            +
              s.add_development_dependency "rake", ">= 12.3.3"
         
     | 
| 
       22 
22 
     | 
    
         
             
              s.add_development_dependency "appraisal"
         
     | 
| 
       23 
23 
     | 
    
         
             
              s.add_development_dependency "pry"
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
         @@ -48,9 +48,9 @@ describe Duck do 
     | 
|
| 
       48 
48 
     | 
    
         
             
                }
         
     | 
| 
       49 
49 
     | 
    
         
             
                @ducks.each { |name, duck|
         
     | 
| 
       50 
50 
     | 
    
         
             
                  duck.reload
         
     | 
| 
       51 
     | 
    
         
            -
                  duck. 
     | 
| 
       52 
     | 
    
         
            -
                  duck. 
     | 
| 
       53 
     | 
    
         
            -
                  duck. 
     | 
| 
      
 51 
     | 
    
         
            +
                  duck.update :row_position => 0
         
     | 
| 
      
 52 
     | 
    
         
            +
                  duck.update :size_position => 0
         
     | 
| 
      
 53 
     | 
    
         
            +
                  duck.update :age_position => 0
         
     | 
| 
       54 
54 
     | 
    
         
             
                  duck.save!
         
     | 
| 
       55 
55 
     | 
    
         
             
                }
         
     | 
| 
       56 
56 
     | 
    
         
             
                @ducks.each {|name, duck| duck.reload }
         
     | 
| 
         @@ -59,8 +59,8 @@ describe Duck do 
     | 
|
| 
       59 
59 
     | 
    
         
             
              describe "sorting by size on in_shin_pond" do
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                before {
         
     | 
| 
       62 
     | 
    
         
            -
                  @ducks[:quacky]. 
     | 
| 
       63 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
      
 62 
     | 
    
         
            +
                  @ducks[:quacky].update :size_position => 0
         
     | 
| 
      
 63 
     | 
    
         
            +
                  @ducks[:wingy].update :size_position => 2
         
     | 
| 
       64 
64 
     | 
    
         
             
                }
         
     | 
| 
       65 
65 
     | 
    
         | 
| 
       66 
66 
     | 
    
         
             
                subject { Duck.in_shin_pond.rank(:size).to_a }
         
     | 
| 
         @@ -76,8 +76,8 @@ describe Duck do 
     | 
|
| 
       76 
76 
     | 
    
         
             
              describe "sorting by age on Shin pond" do
         
     | 
| 
       77 
77 
     | 
    
         | 
| 
       78 
78 
     | 
    
         
             
                before {
         
     | 
| 
       79 
     | 
    
         
            -
                  @ducks[:feathers]. 
     | 
| 
       80 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
      
 79 
     | 
    
         
            +
                  @ducks[:feathers].update :age_position => 0
         
     | 
| 
      
 80 
     | 
    
         
            +
                  @ducks[:wingy].update :age_position => 0
         
     | 
| 
       81 
81 
     | 
    
         
             
                }
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
       83 
83 
     | 
    
         
             
                subject { Duck.where(:pond => 'Shin').rank(:age).to_a }
         
     | 
| 
         @@ -93,10 +93,10 @@ describe Duck do 
     | 
|
| 
       93 
93 
     | 
    
         
             
              describe "sorting by row" do
         
     | 
| 
       94 
94 
     | 
    
         | 
| 
       95 
95 
     | 
    
         
             
                before {
         
     | 
| 
       96 
     | 
    
         
            -
                  @ducks[:beaky]. 
     | 
| 
       97 
     | 
    
         
            -
                  @ducks[:webby]. 
     | 
| 
       98 
     | 
    
         
            -
                  @ducks[:waddly]. 
     | 
| 
       99 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
      
 96 
     | 
    
         
            +
                  @ducks[:beaky].update :row_position => 0
         
     | 
| 
      
 97 
     | 
    
         
            +
                  @ducks[:webby].update :row_position => 2
         
     | 
| 
      
 98 
     | 
    
         
            +
                  @ducks[:waddly].update :row_position => 2
         
     | 
| 
      
 99 
     | 
    
         
            +
                  @ducks[:wingy].update :row_position => 6
         
     | 
| 
       100 
100 
     | 
    
         
             
                }
         
     | 
| 
       101 
101 
     | 
    
         | 
| 
       102 
102 
     | 
    
         
             
                subject { Duck.rank(:row).to_a }
         
     | 
| 
         @@ -112,13 +112,13 @@ describe Duck do 
     | 
|
| 
       112 
112 
     | 
    
         
             
              describe "mixed sorting by" do
         
     | 
| 
       113 
113 
     | 
    
         | 
| 
       114 
114 
     | 
    
         
             
                before {
         
     | 
| 
       115 
     | 
    
         
            -
                  @ducks[:quacky]. 
     | 
| 
       116 
     | 
    
         
            -
                  @ducks[:beaky]. 
     | 
| 
       117 
     | 
    
         
            -
                  @ducks[:webby]. 
     | 
| 
       118 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
       119 
     | 
    
         
            -
                  @ducks[:waddly]. 
     | 
| 
       120 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
       121 
     | 
    
         
            -
                  @ducks[:webby]. 
     | 
| 
      
 115 
     | 
    
         
            +
                  @ducks[:quacky].update :size_position => 0
         
     | 
| 
      
 116 
     | 
    
         
            +
                  @ducks[:beaky].update :row_position => 0
         
     | 
| 
      
 117 
     | 
    
         
            +
                  @ducks[:webby].update :row_position => 2
         
     | 
| 
      
 118 
     | 
    
         
            +
                  @ducks[:wingy].update :size_position => 1
         
     | 
| 
      
 119 
     | 
    
         
            +
                  @ducks[:waddly].update :row_position => 2
         
     | 
| 
      
 120 
     | 
    
         
            +
                  @ducks[:wingy].update :row_position => 6
         
     | 
| 
      
 121 
     | 
    
         
            +
                  @ducks[:webby].update :row_position => 6
         
     | 
| 
       122 
122 
     | 
    
         
             
                }
         
     | 
| 
       123 
123 
     | 
    
         | 
| 
       124 
124 
     | 
    
         
             
                describe "row" do
         
     | 
| 
         @@ -153,7 +153,7 @@ describe Duck do 
     | 
|
| 
       153 
153 
     | 
    
         
             
                  # puts Duck.rank(:age).collect {|duck| "#{duck.name} #{duck.age}" }
         
     | 
| 
       154 
154 
     | 
    
         
             
                  duck = Duck.rank(:age)[2]
         
     | 
| 
       155 
155 
     | 
    
         
             
                  expect(->{
         
     | 
| 
       156 
     | 
    
         
            -
                    duck. 
     | 
| 
      
 156 
     | 
    
         
            +
                    duck.update :name => 'New Name'
         
     | 
| 
       157 
157 
     | 
    
         
             
                  }).to_not change(duck.reload, :age)
         
     | 
| 
       158 
158 
     | 
    
         
             
                  # puts Duck.rank(:age).collect {|duck| "#{duck.name} #{duck.age}" }
         
     | 
| 
       159 
159 
     | 
    
         
             
                end
         
     | 
| 
         @@ -187,7 +187,7 @@ describe Duck do 
     | 
|
| 
       187 
187 
     | 
    
         | 
| 
       188 
188 
     | 
    
         
             
                  before {
         
     | 
| 
       189 
189 
     | 
    
         
             
                    @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect {|duck| duck.id }
         
     | 
| 
       190 
     | 
    
         
            -
                    @ducks[:wingy]. 
     | 
| 
      
 190 
     | 
    
         
            +
                    @ducks[:wingy].update :row_position => 2
         
     | 
| 
       191 
191 
     | 
    
         
             
                  }
         
     | 
| 
       192 
192 
     | 
    
         | 
| 
       193 
193 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -214,7 +214,7 @@ describe Duck do 
     | 
|
| 
       214 
214 
     | 
    
         | 
| 
       215 
215 
     | 
    
         
             
                  before {
         
     | 
| 
       216 
216 
     | 
    
         
             
                    @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect {|duck| duck.id }
         
     | 
| 
       217 
     | 
    
         
            -
                    @ducks[:wingy]. 
     | 
| 
      
 217 
     | 
    
         
            +
                    @ducks[:wingy].update :row_position => 0
         
     | 
| 
       218 
218 
     | 
    
         
             
                  }
         
     | 
| 
       219 
219 
     | 
    
         | 
| 
       220 
220 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -254,7 +254,7 @@ describe Duck do 
     | 
|
| 
       254 
254 
     | 
    
         | 
| 
       255 
255 
     | 
    
         
             
                  context {
         
     | 
| 
       256 
256 
     | 
    
         | 
| 
       257 
     | 
    
         
            -
                    before { @ducks[:wingy]. 
     | 
| 
      
 257 
     | 
    
         
            +
                    before { @ducks[:wingy].update :row_position => (@ducks.size - 2) }
         
     | 
| 
       258 
258 
     | 
    
         | 
| 
       259 
259 
     | 
    
         
             
                    subject { Duck.ranker(:row).with(Duck.new).current_at_position(@ducks.size - 2).instance }
         
     | 
| 
       260 
260 
     | 
    
         | 
| 
         @@ -264,7 +264,7 @@ describe Duck do 
     | 
|
| 
       264 
264 
     | 
    
         | 
| 
       265 
265 
     | 
    
         
             
                  context {
         
     | 
| 
       266 
266 
     | 
    
         | 
| 
       267 
     | 
    
         
            -
                    before { @ducks[:wingy]. 
     | 
| 
      
 267 
     | 
    
         
            +
                    before { @ducks[:wingy].update :row_position => :down }
         
     | 
| 
       268 
268 
     | 
    
         | 
| 
       269 
269 
     | 
    
         
             
                    subject { Duck.ranker(:row).with(Duck.new).current_at_position(@ducks.size - 2).instance }
         
     | 
| 
       270 
270 
     | 
    
         | 
| 
         @@ -278,7 +278,7 @@ describe Duck do 
     | 
|
| 
       278 
278 
     | 
    
         | 
| 
       279 
279 
     | 
    
         
             
                  before {
         
     | 
| 
       280 
280 
     | 
    
         
             
                    @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect {|duck| duck.id }
         
     | 
| 
       281 
     | 
    
         
            -
                    @ducks[:wingy]. 
     | 
| 
      
 281 
     | 
    
         
            +
                    @ducks[:wingy].update :row_position => (@ducks.size - 1)
         
     | 
| 
       282 
282 
     | 
    
         
             
                  }
         
     | 
| 
       283 
283 
     | 
    
         | 
| 
       284 
284 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -319,7 +319,7 @@ describe Duck do 
     | 
|
| 
       319 
319 
     | 
    
         | 
| 
       320 
320 
     | 
    
         
             
                  before {
         
     | 
| 
       321 
321 
     | 
    
         
             
                    @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect {|duck| duck.id }
         
     | 
| 
       322 
     | 
    
         
            -
                    @ducks[:wingy]. 
     | 
| 
      
 322 
     | 
    
         
            +
                    @ducks[:wingy].update :row_position => :last
         
     | 
| 
       323 
323 
     | 
    
         
             
                  }
         
     | 
| 
       324 
324 
     | 
    
         | 
| 
       325 
325 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -360,7 +360,7 @@ describe Duck do 
     | 
|
| 
       360 
360 
     | 
    
         | 
| 
       361 
361 
     | 
    
         
             
                  before {
         
     | 
| 
       362 
362 
     | 
    
         
             
                    @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect {|duck| duck.id }
         
     | 
| 
       363 
     | 
    
         
            -
                    @ducks[:wingy]. 
     | 
| 
      
 363 
     | 
    
         
            +
                    @ducks[:wingy].update :row_position => 'last'
         
     | 
| 
       364 
364 
     | 
    
         
             
                  }
         
     | 
| 
       365 
365 
     | 
    
         | 
| 
       366 
366 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -403,7 +403,7 @@ describe Duck do 
     | 
|
| 
       403 
403 
     | 
    
         | 
| 
       404 
404 
     | 
    
         
             
                    before {
         
     | 
| 
       405 
405 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect { |duck| duck.id }
         
     | 
| 
       406 
     | 
    
         
            -
                      @ducks[:wingy]. 
     | 
| 
      
 406 
     | 
    
         
            +
                      @ducks[:wingy].update :row_position => :down
         
     | 
| 
       407 
407 
     | 
    
         
             
                    }
         
     | 
| 
       408 
408 
     | 
    
         | 
| 
       409 
409 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -430,7 +430,7 @@ describe Duck do 
     | 
|
| 
       430 
430 
     | 
    
         | 
| 
       431 
431 
     | 
    
         
             
                    before {
         
     | 
| 
       432 
432 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:quacky].id).collect { |duck| duck.id }
         
     | 
| 
       433 
     | 
    
         
            -
                      @ducks[:quacky]. 
     | 
| 
      
 433 
     | 
    
         
            +
                      @ducks[:quacky].update :row_position => :down
         
     | 
| 
       434 
434 
     | 
    
         
             
                    }
         
     | 
| 
       435 
435 
     | 
    
         | 
| 
       436 
436 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -455,7 +455,7 @@ describe Duck do 
     | 
|
| 
       455 
455 
     | 
    
         | 
| 
       456 
456 
     | 
    
         
             
                    before {
         
     | 
| 
       457 
457 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:feathers].id).collect { |duck| duck.id }
         
     | 
| 
       458 
     | 
    
         
            -
                      @ducks[:feathers]. 
     | 
| 
      
 458 
     | 
    
         
            +
                      @ducks[:feathers].update :row_position => :down
         
     | 
| 
       459 
459 
     | 
    
         
             
                    }
         
     | 
| 
       460 
460 
     | 
    
         | 
| 
       461 
461 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -484,7 +484,7 @@ describe Duck do 
     | 
|
| 
       484 
484 
     | 
    
         | 
| 
       485 
485 
     | 
    
         
             
                    before {
         
     | 
| 
       486 
486 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect { |duck| duck.id }
         
     | 
| 
       487 
     | 
    
         
            -
                      @ducks[:wingy]. 
     | 
| 
      
 487 
     | 
    
         
            +
                      @ducks[:wingy].update :row_position => 'down'
         
     | 
| 
       488 
488 
     | 
    
         
             
                    }
         
     | 
| 
       489 
489 
     | 
    
         | 
| 
       490 
490 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -511,7 +511,7 @@ describe Duck do 
     | 
|
| 
       511 
511 
     | 
    
         | 
| 
       512 
512 
     | 
    
         
             
                    before {
         
     | 
| 
       513 
513 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:quacky].id).collect { |duck| duck.id }
         
     | 
| 
       514 
     | 
    
         
            -
                      @ducks[:quacky]. 
     | 
| 
      
 514 
     | 
    
         
            +
                      @ducks[:quacky].update :row_position => 'down'
         
     | 
| 
       515 
515 
     | 
    
         
             
                    }
         
     | 
| 
       516 
516 
     | 
    
         | 
| 
       517 
517 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -536,7 +536,7 @@ describe Duck do 
     | 
|
| 
       536 
536 
     | 
    
         | 
| 
       537 
537 
     | 
    
         
             
                    before {
         
     | 
| 
       538 
538 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:feathers].id).collect { |duck| duck.id }
         
     | 
| 
       539 
     | 
    
         
            -
                      @ducks[:feathers]. 
     | 
| 
      
 539 
     | 
    
         
            +
                      @ducks[:feathers].update :row_position => 'down'
         
     | 
| 
       540 
540 
     | 
    
         
             
                    }
         
     | 
| 
       541 
541 
     | 
    
         | 
| 
       542 
542 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -565,7 +565,7 @@ describe Duck do 
     | 
|
| 
       565 
565 
     | 
    
         | 
| 
       566 
566 
     | 
    
         
             
                    before {
         
     | 
| 
       567 
567 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect { |duck| duck.id }
         
     | 
| 
       568 
     | 
    
         
            -
                      @ducks[:wingy]. 
     | 
| 
      
 568 
     | 
    
         
            +
                      @ducks[:wingy].update :row_position => :up
         
     | 
| 
       569 
569 
     | 
    
         
             
                    }
         
     | 
| 
       570 
570 
     | 
    
         | 
| 
       571 
571 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -592,7 +592,7 @@ describe Duck do 
     | 
|
| 
       592 
592 
     | 
    
         | 
| 
       593 
593 
     | 
    
         
             
                    before {
         
     | 
| 
       594 
594 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:beaky].id).collect { |duck| duck.id }
         
     | 
| 
       595 
     | 
    
         
            -
                      @ducks[:beaky]. 
     | 
| 
      
 595 
     | 
    
         
            +
                      @ducks[:beaky].update :row_position => :up
         
     | 
| 
       596 
596 
     | 
    
         
             
                    }
         
     | 
| 
       597 
597 
     | 
    
         | 
| 
       598 
598 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -617,7 +617,7 @@ describe Duck do 
     | 
|
| 
       617 
617 
     | 
    
         | 
| 
       618 
618 
     | 
    
         
             
                    before {
         
     | 
| 
       619 
619 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:waddly].id).collect { |duck| duck.id }
         
     | 
| 
       620 
     | 
    
         
            -
                      @ducks[:waddly]. 
     | 
| 
      
 620 
     | 
    
         
            +
                      @ducks[:waddly].update :row_position => :up
         
     | 
| 
       621 
621 
     | 
    
         
             
                    }
         
     | 
| 
       622 
622 
     | 
    
         | 
| 
       623 
623 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -645,7 +645,7 @@ describe Duck do 
     | 
|
| 
       645 
645 
     | 
    
         
             
                        Duck.where(id: @ducks[name].id).update_all(row: i)
         
     | 
| 
       646 
646 
     | 
    
         
             
                        @ducks[name].reload
         
     | 
| 
       647 
647 
     | 
    
         
             
                      end
         
     | 
| 
       648 
     | 
    
         
            -
                      @ducks[:wingy]. 
     | 
| 
      
 648 
     | 
    
         
            +
                      @ducks[:wingy].update :row_position => :up
         
     | 
| 
       649 
649 
     | 
    
         
             
                    }
         
     | 
| 
       650 
650 
     | 
    
         | 
| 
       651 
651 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -675,7 +675,7 @@ describe Duck do 
     | 
|
| 
       675 
675 
     | 
    
         | 
| 
       676 
676 
     | 
    
         
             
                    before {
         
     | 
| 
       677 
677 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:wingy].id).collect { |duck| duck.id }
         
     | 
| 
       678 
     | 
    
         
            -
                      @ducks[:wingy]. 
     | 
| 
      
 678 
     | 
    
         
            +
                      @ducks[:wingy].update :row_position => 'up'
         
     | 
| 
       679 
679 
     | 
    
         
             
                    }
         
     | 
| 
       680 
680 
     | 
    
         | 
| 
       681 
681 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -702,7 +702,7 @@ describe Duck do 
     | 
|
| 
       702 
702 
     | 
    
         | 
| 
       703 
703 
     | 
    
         
             
                    before {
         
     | 
| 
       704 
704 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:beaky].id).collect { |duck| duck.id }
         
     | 
| 
       705 
     | 
    
         
            -
                      @ducks[:beaky]. 
     | 
| 
      
 705 
     | 
    
         
            +
                      @ducks[:beaky].update :row_position => 'up'
         
     | 
| 
       706 
706 
     | 
    
         
             
                    }
         
     | 
| 
       707 
707 
     | 
    
         | 
| 
       708 
708 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -727,7 +727,7 @@ describe Duck do 
     | 
|
| 
       727 
727 
     | 
    
         | 
| 
       728 
728 
     | 
    
         
             
                    before {
         
     | 
| 
       729 
729 
     | 
    
         
             
                      @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_eq @ducks[:waddly].id).collect { |duck| duck.id }
         
     | 
| 
       730 
     | 
    
         
            -
                      @ducks[:waddly]. 
     | 
| 
      
 730 
     | 
    
         
            +
                      @ducks[:waddly].update :row_position => 'up'
         
     | 
| 
       731 
731 
     | 
    
         
             
                    }
         
     | 
| 
       732 
732 
     | 
    
         | 
| 
       733 
733 
     | 
    
         
             
                    context {
         
     | 
| 
         @@ -779,6 +779,44 @@ describe Duck do 
     | 
|
| 
       779 
779 
     | 
    
         
             
                }
         
     | 
| 
       780 
780 
     | 
    
         
             
              end
         
     | 
| 
       781 
781 
     | 
    
         | 
| 
      
 782 
     | 
    
         
            +
              describe "when moving between ponds should work when rebalancing" do
         
     | 
| 
      
 783 
     | 
    
         
            +
                before do
         
     | 
| 
      
 784 
     | 
    
         
            +
                  [:feathers, :wingy, :webby, :waddly, :beaky].each_with_index do |name, i|
         
     | 
| 
      
 785 
     | 
    
         
            +
                    Duck.where(id: @ducks[name].id)
         
     | 
| 
      
 786 
     | 
    
         
            +
                      .update_all(age: RankedModel::MIN_RANK_VALUE + i, pond: "Boyden")
         
     | 
| 
      
 787 
     | 
    
         
            +
                  end
         
     | 
| 
      
 788 
     | 
    
         
            +
             
     | 
| 
      
 789 
     | 
    
         
            +
                  @ducks[:quacky].update!(age_position: 2, pond: "Boyden")
         
     | 
| 
      
 790 
     | 
    
         
            +
                end
         
     | 
| 
      
 791 
     | 
    
         
            +
             
     | 
| 
      
 792 
     | 
    
         
            +
                it 'rebalances ranks correctly' do
         
     | 
| 
      
 793 
     | 
    
         
            +
                  expect(@ducks[:feathers].reload.age_rank).to eq 0
         
     | 
| 
      
 794 
     | 
    
         
            +
                  expect(@ducks[:quacky].reload.age_rank).to eq 2
         
     | 
| 
      
 795 
     | 
    
         
            +
                  expect(@ducks[:beaky].reload.age_rank).to eq 5
         
     | 
| 
      
 796 
     | 
    
         
            +
                end
         
     | 
| 
      
 797 
     | 
    
         
            +
             
     | 
| 
      
 798 
     | 
    
         
            +
                context 'when attempting to update position to a non-unique value' do
         
     | 
| 
      
 799 
     | 
    
         
            +
                  before do
         
     | 
| 
      
 800 
     | 
    
         
            +
                    @duck_one = Duck.create(landing_order: RankedModel::MIN_RANK_VALUE,
         
     | 
| 
      
 801 
     | 
    
         
            +
                                           lake_id: 42, flock_id: 42)
         
     | 
| 
      
 802 
     | 
    
         
            +
                    # Duck one's landing order will be rebalanced to -715_827_883.
         
     | 
| 
      
 803 
     | 
    
         
            +
                    # Given a unique index on [:landing_order, :lake_id, :flock_id] we
         
     | 
| 
      
 804 
     | 
    
         
            +
                    # verify that the operation succeeds despite the value already being
         
     | 
| 
      
 805 
     | 
    
         
            +
                    # occupied by duck two.
         
     | 
| 
      
 806 
     | 
    
         
            +
                    @duck_two = Duck.create(landing_order: -715_827_883,
         
     | 
| 
      
 807 
     | 
    
         
            +
                                            lake_id: 42, flock_id: 42)
         
     | 
| 
      
 808 
     | 
    
         
            +
                  end
         
     | 
| 
      
 809 
     | 
    
         
            +
             
     | 
| 
      
 810 
     | 
    
         
            +
                  it 'rebalances ranks correctly' do
         
     | 
| 
      
 811 
     | 
    
         
            +
                    @ducks[:quacky].update!(landing_order_position: :first,
         
     | 
| 
      
 812 
     | 
    
         
            +
                                            lake_id: 42, flock_id: 42)
         
     | 
| 
      
 813 
     | 
    
         
            +
                    expect(@ducks[:quacky].reload.landing_order_rank).to eq 0
         
     | 
| 
      
 814 
     | 
    
         
            +
                    expect(@duck_one.reload.landing_order_rank).to eq 1
         
     | 
| 
      
 815 
     | 
    
         
            +
                    expect(@duck_two.reload.landing_order_rank).to eq 2
         
     | 
| 
      
 816 
     | 
    
         
            +
                  end
         
     | 
| 
      
 817 
     | 
    
         
            +
                end
         
     | 
| 
      
 818 
     | 
    
         
            +
              end
         
     | 
| 
      
 819 
     | 
    
         
            +
             
     | 
| 
       782 
820 
     | 
    
         
             
            end
         
     | 
| 
       783 
821 
     | 
    
         | 
| 
       784 
822 
     | 
    
         
             
            describe Duck do
         
     | 
| 
         @@ -812,7 +850,7 @@ describe Duck do 
     | 
|
| 
       812 
850 
     | 
    
         
             
                }
         
     | 
| 
       813 
851 
     | 
    
         
             
                @ducks.each { |name, duck|
         
     | 
| 
       814 
852 
     | 
    
         
             
                  duck.reload
         
     | 
| 
       815 
     | 
    
         
            -
                  duck. 
     | 
| 
      
 853 
     | 
    
         
            +
                  duck.update :landing_order_position => 0
         
     | 
| 
       816 
854 
     | 
    
         
             
                  duck.save!
         
     | 
| 
       817 
855 
     | 
    
         
             
                }
         
     | 
| 
       818 
856 
     | 
    
         
             
                @ducks.each {|name, duck| duck.reload }
         
     | 
| 
         @@ -821,8 +859,8 @@ describe Duck do 
     | 
|
| 
       821 
859 
     | 
    
         
             
              describe "sorting by landing_order" do
         
     | 
| 
       822 
860 
     | 
    
         | 
| 
       823 
861 
     | 
    
         
             
                before {
         
     | 
| 
       824 
     | 
    
         
            -
                  @ducks[:quacky]. 
     | 
| 
       825 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
      
 862 
     | 
    
         
            +
                  @ducks[:quacky].update :landing_order_position => 0
         
     | 
| 
      
 863 
     | 
    
         
            +
                  @ducks[:wingy].update :landing_order_position => 1
         
     | 
| 
       826 
864 
     | 
    
         
             
                }
         
     | 
| 
       827 
865 
     | 
    
         | 
| 
       828 
866 
     | 
    
         
             
                subject { Duck.in_lake_and_flock(0,0).rank(:landing_order).to_a }
         
     | 
| 
         @@ -846,10 +884,10 @@ describe Duck do 
     | 
|
| 
       846 
884 
     | 
    
         | 
| 
       847 
885 
     | 
    
         
             
                  @previous_ranks = @untouchable_ranks.call
         
     | 
| 
       848 
886 
     | 
    
         | 
| 
       849 
     | 
    
         
            -
                  @ducks[:quacky]. 
     | 
| 
       850 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
       851 
     | 
    
         
            -
                  @ducks[:feathers]. 
     | 
| 
       852 
     | 
    
         
            -
                  @ducks[:wingy]. 
     | 
| 
      
 887 
     | 
    
         
            +
                  @ducks[:quacky].update :landing_order_position => 0
         
     | 
| 
      
 888 
     | 
    
         
            +
                  @ducks[:wingy].update :landing_order_position => 1
         
     | 
| 
      
 889 
     | 
    
         
            +
                  @ducks[:feathers].update :landing_order_position => 0
         
     | 
| 
      
 890 
     | 
    
         
            +
                  @ducks[:wingy].update :landing_order_position => 1
         
     | 
| 
       853 
891 
     | 
    
         
             
                }
         
     | 
| 
       854 
892 
     | 
    
         | 
| 
       855 
893 
     | 
    
         
             
                subject { @untouchable_ranks.call }
         
     | 
| 
         @@ -5,7 +5,7 @@ describe Duck do 
     | 
|
| 
       5 
5 
     | 
    
         
             
              before {
         
     | 
| 
       6 
6 
     | 
    
         
             
                200.times do |i|
         
     | 
| 
       7 
7 
     | 
    
         
             
                  Duck.create \
         
     | 
| 
       8 
     | 
    
         
            -
                    :name => "Duck #{i}"
         
     | 
| 
      
 8 
     | 
    
         
            +
                    :name => "Duck #{i + 1}"
         
     | 
| 
       9 
9 
     | 
    
         
             
                end
         
     | 
| 
       10 
10 
     | 
    
         
             
              }
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
         @@ -29,7 +29,7 @@ describe Duck do 
     | 
|
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                  before {
         
     | 
| 
       31 
31 
     | 
    
         
             
                    @last = Duck.last
         
     | 
| 
       32 
     | 
    
         
            -
                    @last. 
     | 
| 
      
 32 
     | 
    
         
            +
                    @last.update :row_position => 137
         
     | 
| 
       33 
33 
     | 
    
         
             
                  }
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
35 
     | 
    
         
             
                  subject { Duck.ranker(:row).with(Duck.new).current_at_position(137).instance }
         
     | 
| 
         @@ -42,7 +42,7 @@ describe Duck do 
     | 
|
| 
       42 
42 
     | 
    
         | 
| 
       43 
43 
     | 
    
         
             
                  before {
         
     | 
| 
       44 
44 
     | 
    
         
             
                    @last = Duck.last
         
     | 
| 
       45 
     | 
    
         
            -
                    @last. 
     | 
| 
      
 45 
     | 
    
         
            +
                    @last.update :row_position => 2
         
     | 
| 
       46 
46 
     | 
    
         
             
                  }
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
                  subject { Duck.ranker(:row).with(Duck.new).current_at_position(2).instance }
         
     | 
| 
         @@ -55,7 +55,7 @@ describe Duck do 
     | 
|
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
                  before {
         
     | 
| 
       57 
57 
     | 
    
         
             
                    @last = Duck.last
         
     | 
| 
       58 
     | 
    
         
            -
                    @last. 
     | 
| 
      
 58 
     | 
    
         
            +
                    @last.update :row_position => :last
         
     | 
| 
       59 
59 
     | 
    
         
             
                  }
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
       61 
61 
     | 
    
         
             
                  subject { Duck.rank(:row).last }
         
     | 
| 
         @@ -68,7 +68,7 @@ describe Duck do 
     | 
|
| 
       68 
68 
     | 
    
         | 
| 
       69 
69 
     | 
    
         
             
                  before {
         
     | 
| 
       70 
70 
     | 
    
         
             
                    @last = Duck.last
         
     | 
| 
       71 
     | 
    
         
            -
                    @last. 
     | 
| 
      
 71 
     | 
    
         
            +
                    @last.update :row_position => :first
         
     | 
| 
       72 
72 
     | 
    
         
             
                  }
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
                  subject { Duck.rank(:row).first }
         
     | 
| 
         @@ -87,8 +87,8 @@ describe Duck do 
     | 
|
| 
       87 
87 
     | 
    
         
             
                    @first = Duck.first
         
     | 
| 
       88 
88 
     | 
    
         
             
                    @second = Duck.offset(1).first
         
     | 
| 
       89 
89 
     | 
    
         
             
                    @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_in([@first.id, @second.id])).collect {|d| d.id }
         
     | 
| 
       90 
     | 
    
         
            -
                    @first. 
     | 
| 
       91 
     | 
    
         
            -
                    @second. 
     | 
| 
      
 90 
     | 
    
         
            +
                    @first.update :row => RankedModel::MAX_RANK_VALUE
         
     | 
| 
      
 91 
     | 
    
         
            +
                    @second.update :row => RankedModel::MAX_RANK_VALUE
         
     | 
| 
       92 
92 
     | 
    
         
             
                  }
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
       94 
94 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -105,13 +105,13 @@ describe Duck do 
     | 
|
| 
       105 
105 
     | 
    
         | 
| 
       106 
106 
     | 
    
         
             
                  before {
         
     | 
| 
       107 
107 
     | 
    
         
             
                    Duck.first(50).each_with_index do |d, index|
         
     | 
| 
       108 
     | 
    
         
            -
                      d. 
     | 
| 
      
 108 
     | 
    
         
            +
                      d.update :age => index % 10, :pond => "Pond #{index / 10}"
         
     | 
| 
       109 
109 
     | 
    
         
             
                    end
         
     | 
| 
       110 
110 
     | 
    
         
             
                    @duck_11 = Duck.where(:pond => 'Pond 1').rank(:age).first
         
     | 
| 
       111 
111 
     | 
    
         
             
                    @duck_12 = Duck.where(:pond => 'Pond 1').rank(:age).second
         
     | 
| 
       112 
112 
     | 
    
         
             
                    @ordered = Duck.where(:pond => 'Pond 1').rank(:age).where(Duck.arel_table[:id].not_in([@duck_11.id, @duck_12.id])).collect {|d| d.id }
         
     | 
| 
       113 
     | 
    
         
            -
                    @duck_11. 
     | 
| 
       114 
     | 
    
         
            -
                    @duck_12. 
     | 
| 
      
 113 
     | 
    
         
            +
                    @duck_11.update :age => RankedModel::MAX_RANK_VALUE
         
     | 
| 
      
 114 
     | 
    
         
            +
                    @duck_12.update :age => RankedModel::MAX_RANK_VALUE
         
     | 
| 
       115 
115 
     | 
    
         
             
                  }
         
     | 
| 
       116 
116 
     | 
    
         | 
| 
       117 
117 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -133,8 +133,8 @@ describe Duck do 
     | 
|
| 
       133 
133 
     | 
    
         
             
                    @first = Duck.first
         
     | 
| 
       134 
134 
     | 
    
         
             
                    @second = Duck.offset(1).first
         
     | 
| 
       135 
135 
     | 
    
         
             
                    @ordered = Duck.rank(:row).where(Duck.arel_table[:id].not_in([@first.id, @second.id])).collect {|d| d.id }
         
     | 
| 
       136 
     | 
    
         
            -
                    @first. 
     | 
| 
       137 
     | 
    
         
            -
                    @second. 
     | 
| 
      
 136 
     | 
    
         
            +
                    @first.update :row => RankedModel::MIN_RANK_VALUE
         
     | 
| 
      
 137 
     | 
    
         
            +
                    @second.update :row => RankedModel::MIN_RANK_VALUE
         
     | 
| 
       138 
138 
     | 
    
         
             
                  }
         
     | 
| 
       139 
139 
     | 
    
         | 
| 
       140 
140 
     | 
    
         
             
                  context {
         
     | 
| 
         @@ -149,34 +149,30 @@ describe Duck do 
     | 
|
| 
       149 
149 
     | 
    
         | 
| 
       150 
150 
     | 
    
         
             
                describe "with no more gaps" do
         
     | 
| 
       151 
151 
     | 
    
         | 
| 
       152 
     | 
    
         
            -
                  before  
     | 
| 
      
 152 
     | 
    
         
            +
                  before do
         
     | 
| 
       153 
153 
     | 
    
         
             
                    @first = Duck.rank(:row).first
         
     | 
| 
       154 
154 
     | 
    
         
             
                    @second = Duck.rank(:row).offset(1).first
         
     | 
| 
       155 
155 
     | 
    
         
             
                    @third = Duck.rank(:row).offset(2).first
         
     | 
| 
       156 
     | 
    
         
            -
                    @fourth = Duck.rank(:row).offset( 
     | 
| 
       157 
     | 
    
         
            -
                    @fifth = Duck.rank(:row).offset(5).first
         
     | 
| 
      
 156 
     | 
    
         
            +
                    @fourth = Duck.rank(:row).offset(3).first
         
     | 
| 
       158 
157 
     | 
    
         
             
                    @lower = Duck.rank(:row).
         
     | 
| 
       159 
     | 
    
         
            -
                      where(Duck.arel_table[:id].not_in([@first.id, @second.id, @third.id, @fourth.id 
     | 
| 
      
 158 
     | 
    
         
            +
                      where(Duck.arel_table[:id].not_in([@first.id, @second.id, @third.id, @fourth.id])).
         
     | 
| 
       160 
159 
     | 
    
         
             
                      where(Duck.arel_table[:row].lt(RankedModel::MAX_RANK_VALUE / 2)).
         
     | 
| 
       161 
     | 
    
         
            -
                       
     | 
| 
      
 160 
     | 
    
         
            +
                      pluck(:id)
         
     | 
| 
       162 
161 
     | 
    
         
             
                    @upper = Duck.rank(:row).
         
     | 
| 
       163 
     | 
    
         
            -
                      where(Duck.arel_table[:id].not_in([@first.id, @second.id, @third.id, @fourth.id 
     | 
| 
      
 162 
     | 
    
         
            +
                      where(Duck.arel_table[:id].not_in([@first.id, @second.id, @third.id, @fourth.id])).
         
     | 
| 
       164 
163 
     | 
    
         
             
                      where(Duck.arel_table[:row].gteq(RankedModel::MAX_RANK_VALUE / 2)).
         
     | 
| 
       165 
     | 
    
         
            -
                       
     | 
| 
       166 
     | 
    
         
            -
                    @first. 
     | 
| 
       167 
     | 
    
         
            -
                    @second. 
     | 
| 
       168 
     | 
    
         
            -
                    @third. 
     | 
| 
       169 
     | 
    
         
            -
                     
     | 
| 
       170 
     | 
    
         
            -
             
     | 
| 
       171 
     | 
    
         
            -
             
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
                     
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
                    it { is_expected.to eq([@first.id] + @lower + [@fourth.id, @third.id, @fifth.id] + @upper + [@second.id]) }
         
     | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
       179 
     | 
    
         
            -
                  }
         
     | 
| 
      
 164 
     | 
    
         
            +
                      pluck(:id)
         
     | 
| 
      
 165 
     | 
    
         
            +
                    @first.update(row: RankedModel::MIN_RANK_VALUE)
         
     | 
| 
      
 166 
     | 
    
         
            +
                    @second.update(row: RankedModel::MAX_RANK_VALUE)
         
     | 
| 
      
 167 
     | 
    
         
            +
                    @third.update(row: (RankedModel::MAX_RANK_VALUE / 2))
         
     | 
| 
      
 168 
     | 
    
         
            +
                    @fourth.update(row: @third.row)
         
     | 
| 
      
 169 
     | 
    
         
            +
                  end
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                  it 'works correctly' do
         
     | 
| 
      
 172 
     | 
    
         
            +
                    result = Duck.rank(:row).pluck(:id)
         
     | 
| 
      
 173 
     | 
    
         
            +
                    expected = [@first.id, *@lower, @fourth.id, @third.id, *@upper, @second.id]
         
     | 
| 
      
 174 
     | 
    
         
            +
                    expect(result).to eq(expected)
         
     | 
| 
      
 175 
     | 
    
         
            +
                  end
         
     | 
| 
       180 
176 
     | 
    
         | 
| 
       181 
177 
     | 
    
         
             
                end
         
     | 
| 
       182 
178 
     | 
    
         | 
    
        data/spec/ego-model/ego_spec.rb
    CHANGED
    
    | 
         @@ -10,7 +10,7 @@ describe Ego do 
     | 
|
| 
       10 
10 
     | 
    
         
             
                }
         
     | 
| 
       11 
11 
     | 
    
         
             
                @egos.each { |name, ego|
         
     | 
| 
       12 
12 
     | 
    
         
             
                  ego.reload
         
     | 
| 
       13 
     | 
    
         
            -
                  ego. 
     | 
| 
      
 13 
     | 
    
         
            +
                  ego.update :size_position => 0
         
     | 
| 
       14 
14 
     | 
    
         
             
                  ego.save!
         
     | 
| 
       15 
15 
     | 
    
         
             
                }
         
     | 
| 
       16 
16 
     | 
    
         
             
                @egos.each {|name, ego| ego.reload }
         
     | 
| 
         @@ -19,8 +19,8 @@ describe Ego do 
     | 
|
| 
       19 
19 
     | 
    
         
             
              describe "sorting on size alternative primary key" do
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                before {
         
     | 
| 
       22 
     | 
    
         
            -
                  @egos[:nick]. 
     | 
| 
       23 
     | 
    
         
            -
                  @egos[:sally]. 
     | 
| 
      
 22 
     | 
    
         
            +
                  @egos[:nick].update :size_position => 0
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @egos[:sally].update :size_position => 2
         
     | 
| 
       24 
24 
     | 
    
         
             
                }
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
                subject { Ego.rank(:size).to_a }
         
     | 
| 
         @@ -14,8 +14,8 @@ describe Number do 
     | 
|
| 
       14 
14 
     | 
    
         
             
                  @first = Number.first
         
     | 
| 
       15 
15 
     | 
    
         
             
                  @second = Number.offset(1).first
         
     | 
| 
       16 
16 
     | 
    
         
             
                  @ordered = Number.rank(:order).where(Number.arel_table[:id].not_in([@first.id, @second.id])).collect {|d| d.id }
         
     | 
| 
       17 
     | 
    
         
            -
                  @first. 
     | 
| 
       18 
     | 
    
         
            -
                  @second. 
     | 
| 
      
 17 
     | 
    
         
            +
                  @first.update :order => RankedModel::MAX_RANK_VALUE
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @second.update :order => RankedModel::MAX_RANK_VALUE
         
     | 
| 
       19 
19 
     | 
    
         
             
                }
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
21 
     | 
    
         
             
                context {
         
     | 
| 
         @@ -28,4 +28,12 @@ describe Number do 
     | 
|
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
              end
         
     | 
| 
       30 
30 
     | 
    
         | 
| 
      
 31 
     | 
    
         
            +
              describe "getting a position with keyword column name" do
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                subject { Number.first }
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                its(:order_rank) { should == 0 }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
       31 
39 
     | 
    
         
             
            end
         
     | 
| 
         @@ -16,7 +16,7 @@ describe Player do 
     | 
|
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         
             
              describe "setting the position of a record that already exists" do
         
     | 
| 
       18 
18 
     | 
    
         
             
                it "sets the rank without error" do
         
     | 
| 
       19 
     | 
    
         
            -
                  expect{@players[:bob]. 
     | 
| 
      
 19 
     | 
    
         
            +
                  expect{@players[:bob].update! :score_position => 1}.to_not raise_error
         
     | 
| 
       20 
20 
     | 
    
         
             
                end
         
     | 
| 
       21 
21 
     | 
    
         
             
              end
         
     | 
| 
       22 
22 
     | 
    
         
             
            end
         
     | 
| 
         @@ -62,3 +62,21 @@ describe RankedModel::Ranker, 'unless as Proc' do 
     | 
|
| 
       62 
62 
     | 
    
         
             
                }
         
     | 
| 
       63 
63 
     | 
    
         
             
              end
         
     | 
| 
       64 
64 
     | 
    
         
             
            end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            describe RankedModel::Ranker, 'unless as lambda' do
         
     | 
| 
      
 67 
     | 
    
         
            +
              context 'returns true' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                subject { RankedModel::Ranker.new(:overview, unless: ->(_) { true }).with(Class.new) }
         
     | 
| 
      
 69 
     | 
    
         
            +
                its(:handle_ranking) { should == nil }
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              context 'returns false' do
         
     | 
| 
      
 73 
     | 
    
         
            +
                subject { RankedModel::Ranker.new(:overview, unless: ->(_) { false }).with(Class.new) }
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                it {
         
     | 
| 
      
 76 
     | 
    
         
            +
                  subject.expects(:update_index_from_position).once
         
     | 
| 
      
 77 
     | 
    
         
            +
                  subject.expects(:assure_unique_position).once
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  subject.handle_ranking
         
     | 
| 
      
 80 
     | 
    
         
            +
                }
         
     | 
| 
      
 81 
     | 
    
         
            +
              end
         
     | 
| 
      
 82 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -12,7 +12,7 @@ describe Element do 
     | 
|
| 
       12 
12 
     | 
    
         
             
                }
         
     | 
| 
       13 
13 
     | 
    
         
             
                @elements.each { |name, element|
         
     | 
| 
       14 
14 
     | 
    
         
             
                  element.reload
         
     | 
| 
       15 
     | 
    
         
            -
                  element. 
     | 
| 
      
 15 
     | 
    
         
            +
                  element.update :combination_order_position => 0
         
     | 
| 
       16 
16 
     | 
    
         
             
                }
         
     | 
| 
       17 
17 
     | 
    
         
             
                @elements.each {|name, element| element.reload }
         
     | 
| 
       18 
18 
     | 
    
         
             
              }
         
     | 
| 
         @@ -20,9 +20,9 @@ describe Element do 
     | 
|
| 
       20 
20 
     | 
    
         
             
              describe "rebalancing on an STI class should not affect the other class" do
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                before {
         
     | 
| 
       23 
     | 
    
         
            -
                  @elements[:helium]. 
     | 
| 
       24 
     | 
    
         
            -
                  @elements[:xenon]. 
     | 
| 
       25 
     | 
    
         
            -
                  @elements[:argon]. 
     | 
| 
      
 23 
     | 
    
         
            +
                  @elements[:helium].update :combination_order_position => :first
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @elements[:xenon].update :combination_order_position => :first
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @elements[:argon].update :combination_order_position => :last
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
                  TransitionMetal.ranker(:combination_order).with(@elements[:chromium]).instance_eval { rebalance_ranks }
         
     | 
| 
       28 
28 
     | 
    
         
             
                }
         
     | 
| 
         @@ -40,16 +40,16 @@ describe Element do 
     | 
|
| 
       40 
40 
     | 
    
         
             
              describe "setting positions on STI classes" do
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                before {
         
     | 
| 
       43 
     | 
    
         
            -
                  @elements[:helium]. 
     | 
| 
       44 
     | 
    
         
            -
                  @elements[:xenon]. 
     | 
| 
       45 
     | 
    
         
            -
                  @elements[:argon]. 
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                  @elements[:chromium]. 
     | 
| 
       48 
     | 
    
         
            -
                  @elements[:manganese]. 
     | 
| 
       49 
     | 
    
         
            -
                  @elements[:manganese]. 
     | 
| 
       50 
     | 
    
         
            -
                  @elements[:chromium]. 
     | 
| 
       51 
     | 
    
         
            -
                  @elements[:manganese]. 
     | 
| 
       52 
     | 
    
         
            -
                  @elements[:chromium]. 
     | 
| 
      
 43 
     | 
    
         
            +
                  @elements[:helium].update :combination_order_position => :first
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @elements[:xenon].update :combination_order_position => :first
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @elements[:argon].update :combination_order_position => :first
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                  @elements[:chromium].update :combination_order_position => 1
         
     | 
| 
      
 48 
     | 
    
         
            +
                  @elements[:manganese].update :combination_order_position => 1
         
     | 
| 
      
 49 
     | 
    
         
            +
                  @elements[:manganese].update :combination_order_position => 0
         
     | 
| 
      
 50 
     | 
    
         
            +
                  @elements[:chromium].update :combination_order_position => 0
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @elements[:manganese].update :combination_order_position => 0
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @elements[:chromium].update :combination_order_position => 0
         
     | 
| 
       53 
53 
     | 
    
         
             
                }
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
       55 
55 
     | 
    
         
             
                describe "NobleGas" do
         
     | 
| 
         @@ -81,16 +81,16 @@ describe Element do 
     | 
|
| 
       81 
81 
     | 
    
         
             
              describe "setting positions on STI classes" do
         
     | 
| 
       82 
82 
     | 
    
         | 
| 
       83 
83 
     | 
    
         
             
                before {
         
     | 
| 
       84 
     | 
    
         
            -
                  @elements[:helium]. 
     | 
| 
       85 
     | 
    
         
            -
                  @elements[:xenon]. 
     | 
| 
       86 
     | 
    
         
            -
                  @elements[:argon]. 
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                  @elements[:chromium]. 
     | 
| 
       89 
     | 
    
         
            -
                  @elements[:manganese]. 
     | 
| 
       90 
     | 
    
         
            -
                  @elements[:manganese]. 
     | 
| 
       91 
     | 
    
         
            -
                  @elements[:chromium]. 
     | 
| 
       92 
     | 
    
         
            -
                  @elements[:manganese]. 
     | 
| 
       93 
     | 
    
         
            -
                  @elements[:chromium]. 
     | 
| 
      
 84 
     | 
    
         
            +
                  @elements[:helium].update :combination_order_position => :first
         
     | 
| 
      
 85 
     | 
    
         
            +
                  @elements[:xenon].update :combination_order_position => :first
         
     | 
| 
      
 86 
     | 
    
         
            +
                  @elements[:argon].update :combination_order_position => :first
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                  @elements[:chromium].update :combination_order_position => 1
         
     | 
| 
      
 89 
     | 
    
         
            +
                  @elements[:manganese].update :combination_order_position => 1
         
     | 
| 
      
 90 
     | 
    
         
            +
                  @elements[:manganese].update :combination_order_position => 0
         
     | 
| 
      
 91 
     | 
    
         
            +
                  @elements[:chromium].update :combination_order_position => 0
         
     | 
| 
      
 92 
     | 
    
         
            +
                  @elements[:manganese].update :combination_order_position => 0
         
     | 
| 
      
 93 
     | 
    
         
            +
                  @elements[:chromium].update :combination_order_position => 0
         
     | 
| 
       94 
94 
     | 
    
         
             
                }
         
     | 
| 
       95 
95 
     | 
    
         | 
| 
       96 
96 
     | 
    
         
             
                describe "NobleGas" do
         
     |