ranked-model 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8b5933c81c7b8db9b1a26b327b7805d0aa0f6334
4
- data.tar.gz: eaf6954358557ed51528cf76d9848f6d3961a7a1
3
+ metadata.gz: e92bbed2da4ae8cd7a3705fed451fb73a27b6eee
4
+ data.tar.gz: da248775ef6a763b5a6342587fd5343c06db9adb
5
5
  SHA512:
6
- metadata.gz: 1b905fc8d5ffb24b27eacbe3de7a7de5be4ff16c23ed2ca6256a1a73f6424076660bbbd74f1b99e472421f50fcd637c2732edf574a22f217ad8963af0f418901
7
- data.tar.gz: f917f55c584657fe4d744592e04f131ec7cf58e9cf3abba73b532075a2776ec21d759d488d028e413deaedc946bf9b91b2b5a4c72980a2f535c46cfbc6e59cf9
6
+ metadata.gz: 638948178a3dd3c45bdc811e43ea8b5ca2cd8401ae7a74124c97e2cf09d5a68381bcce5e810db1d42b311281a07633cfb69946c0994e8f1a1675fb564501e70b
7
+ data.tar.gz: 3d37e0b29d0aac037f6ca3edf7258ffac9b17aefa55f46f472d0789999eddf37e5258ea30969a94d7f1543a95e63bf964d40b0d4c517354f6e64b057f1054cc0
data/Appraisals CHANGED
@@ -1,6 +1,6 @@
1
1
  appraise "rails-4-1" do
2
2
  group :sqlite do
3
- gem "sqlite3", platform: :ruby
3
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
4
4
  gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
5
5
  end
6
6
  group :mysql do
@@ -17,7 +17,7 @@ end
17
17
 
18
18
  appraise "rails-4-2" do
19
19
  group :sqlite do
20
- gem "sqlite3", platform: :ruby
20
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
21
21
  gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
22
22
  end
23
23
  group :mysql do
@@ -34,7 +34,7 @@ end
34
34
 
35
35
  appraise "rails-5-0" do
36
36
  group :sqlite do
37
- gem "sqlite3", platform: :ruby
37
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
38
38
  gem "activerecord-jdbcsqlite3-adapter", "~> 50.1", platform: :jruby
39
39
  end
40
40
  group :mysql do
@@ -51,7 +51,7 @@ end
51
51
 
52
52
  appraise "rails-5-1" do
53
53
  group :sqlite do
54
- gem "sqlite3", platform: :ruby
54
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
55
55
  gem "activerecord-jdbcsqlite3-adapter", "~> 51.1", platform: :jruby
56
56
  end
57
57
  group :mysql do
@@ -68,7 +68,7 @@ end
68
68
 
69
69
  appraise "rails-5-2" do
70
70
  group :sqlite do
71
- gem "sqlite3", platform: :ruby
71
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
72
72
  end
73
73
  group :mysql do
74
74
  gem "mysql2", "~> 0.4.10", platform: :ruby
data/Readme.mkd CHANGED
@@ -72,6 +72,15 @@ $.ajax({
72
72
  });
73
73
  ```
74
74
 
75
+ If you need to find the rank of an item with respect to other ranked items, you can use the `{column_name}_rank` method on the model instance. `{column_name}` is your resource ranking column.
76
+
77
+ Following on from our examples above, the `row_order_rank` method will return the position of the duck object in the list with respect to the order defined by the row_order column.
78
+
79
+ ``` ruby
80
+ Duck.rank(:row_order).first.row_order_rank # => 0
81
+ Duck.rank(:row_order).third.row_order_rank # => 2
82
+ ```
83
+
75
84
  Complex Use
76
85
  -----------
77
86
 
@@ -5,7 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activerecord", "~> 4.1.16"
6
6
 
7
7
  group :sqlite do
8
- gem "sqlite3", platform: :ruby
8
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
9
9
  gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
10
10
  end
11
11
 
@@ -5,7 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activerecord", "~> 4.2.10"
6
6
 
7
7
  group :sqlite do
8
- gem "sqlite3", platform: :ruby
8
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
9
9
  gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
10
10
  end
11
11
 
@@ -5,7 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activerecord", "~> 5.0.7"
6
6
 
7
7
  group :sqlite do
8
- gem "sqlite3", platform: :ruby
8
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
9
9
  gem "activerecord-jdbcsqlite3-adapter", "~> 50.1", platform: :jruby
10
10
  end
11
11
 
@@ -5,7 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activerecord", "~> 5.1.6"
6
6
 
7
7
  group :sqlite do
8
- gem "sqlite3", platform: :ruby
8
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
9
9
  gem "activerecord-jdbcsqlite3-adapter", "~> 51.1", platform: :jruby
10
10
  end
11
11
 
@@ -5,7 +5,7 @@ source "https://rubygems.org"
5
5
  gem "activerecord", "~> 5.2.0"
6
6
 
7
7
  group :sqlite do
8
- gem "sqlite3", platform: :ruby
8
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
9
9
  end
10
10
 
11
11
  group :mysql do
@@ -48,7 +48,7 @@ module RankedModel
48
48
  self.rankers ||= []
49
49
  ranker = RankedModel::Ranker.new(*args)
50
50
 
51
- if column_defaults[ranker.name.to_s]
51
+ if column_default(ranker)
52
52
  raise NonNilColumnDefault, %Q{Your ranked model column "#{ranker.name}" must not have a default value in the database.}
53
53
  end
54
54
 
@@ -61,9 +61,17 @@ module RankedModel
61
61
  end
62
62
  end
63
63
 
64
+ define_method "#{ranker.name}_rank" do
65
+ ranker.with(self).relative_rank
66
+ end
67
+
64
68
  public "#{ranker.name}_position", "#{ranker.name}_position="
65
69
  end
66
70
 
71
+ def column_default ranker
72
+ column_defaults[ranker.name.to_s] if ActiveRecord::Base.connected?
73
+ end
74
+
67
75
  end
68
76
 
69
77
  end
@@ -73,6 +73,10 @@ module RankedModel
73
73
  instance.send "#{ranker.name}_position"
74
74
  end
75
75
 
76
+ def relative_rank
77
+ finder.where("#{ranker.column} < #{rank}").count(:all)
78
+ end
79
+
76
80
  def rank
77
81
  instance.send "#{ranker.column}"
78
82
  end
@@ -1,3 +1,3 @@
1
1
  module RankedModel
2
- VERSION = "0.4.3"
2
+ VERSION = "0.4.4"
3
3
  end
@@ -11,4 +11,19 @@ describe 'ColumnDefaultDuck' do
11
11
  }.to raise_error(RankedModel::NonNilColumnDefault, 'Your ranked model column "size" must not have a default value in the database.')
12
12
  end
13
13
 
14
+ it "should not raise an error if we don't have a database connection when checking for default value" do
15
+ begin
16
+ ActiveRecord::Base.remove_connection
17
+
18
+ expect {
19
+ class ColumnDefaultDuck < ActiveRecord::Base
20
+ include RankedModel
21
+ ranks :size, :with_same => :pond
22
+ end
23
+ }.not_to raise_error
24
+ ensure
25
+ ActiveRecord::Base.establish_connection(DB_CONFIG.to_sym)
26
+ end
27
+ end
28
+
14
29
  end
@@ -10,12 +10,16 @@ describe Duck do
10
10
 
11
11
  it { expect(subject).to respond_to(:row_position) }
12
12
  it { expect(subject).to respond_to(:row_position=) }
13
+ it { expect(subject).to respond_to(:row_rank) }
13
14
  it { expect(subject).to respond_to(:size_position) }
14
15
  it { expect(subject).to respond_to(:size_position=) }
16
+ it { expect(subject).to respond_to(:size_rank) }
15
17
  it { expect(subject).to respond_to(:age_position) }
16
18
  it { expect(subject).to respond_to(:age_position=) }
19
+ it { expect(subject).to respond_to(:age_rank) }
17
20
  it { expect(subject).to respond_to(:landing_order_position) }
18
21
  it { expect(subject).to respond_to(:landing_order_position=) }
22
+ it { expect(subject).to respond_to(:landing_order_rank) }
19
23
 
20
24
  end
21
25
 
@@ -748,6 +752,33 @@ describe Duck do
748
752
 
749
753
  end
750
754
 
755
+ describe "fetching rank for an instance" do
756
+ before {
757
+ [:quacky, :feathers, :wingy, :webby, :waddly, :beaky].each_with_index do |name, i|
758
+ Duck.where(id: @ducks[name].id).update_all(row: RankedModel::MAX_RANK_VALUE - i)
759
+ @ducks[name].reload
760
+ end
761
+ }
762
+
763
+ context {
764
+ subject { Duck.find_by(id: @ducks[:beaky]).row_rank }
765
+
766
+ it { should == 0 }
767
+ }
768
+
769
+ context {
770
+ subject { Duck.find_by(id: @ducks[:wingy]).row_rank }
771
+
772
+ it { should == 3 }
773
+ }
774
+
775
+ context {
776
+ subject { Duck.find_by(id: @ducks[:quacky]).row_rank }
777
+
778
+ it { should == 5 }
779
+ }
780
+ end
781
+
751
782
  end
752
783
 
753
784
  describe Duck do
@@ -17,6 +17,6 @@ postgresql:
17
17
  database: ranked_model_test
18
18
  pool: 5
19
19
  timeout: 5000
20
- username: brendon
20
+ username: postgres
21
21
  password:
22
22
  min_messages: ERROR
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ranked-model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Beale
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-13 00:00:00.000000000 Z
11
+ date: 2019-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -138,7 +138,6 @@ files:
138
138
  - LICENSE
139
139
  - Rakefile
140
140
  - Readme.mkd
141
- - gemfiles/rails_3_2.gemfile
142
141
  - gemfiles/rails_4_1.gemfile
143
142
  - gemfiles/rails_4_2.gemfile
144
143
  - gemfiles/rails_5_0.gemfile
@@ -1,22 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 3.2.22.5"
6
-
7
- group :sqlite do
8
- gem "sqlite3", platform: :ruby
9
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
10
- end
11
-
12
- group :mysql do
13
- gem "mysql2", "~> 0.3.21", platform: :ruby
14
- gem "activerecord-jdbcmysql-adapter", "~> 1.3.24", platform: :jruby
15
- end
16
-
17
- group :postgresql do
18
- gem "pg", "~> 0.18.0", platform: :ruby
19
- gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.24", platform: :jruby
20
- end
21
-
22
- gemspec path: "../"