ranked-model 0.4.3 → 0.4.4

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 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: "../"