ranked-model 0.4.2 → 0.4.5

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
- SHA1:
3
- metadata.gz: 5cfad22b2acf05bc3deda080d1bb11b96ade3c9d
4
- data.tar.gz: cd2d02de24cf6465ee4211818beb6696ec41e616
2
+ SHA256:
3
+ metadata.gz: c342543b3341c81d62ceca340fc0966a3386a6115fc2ee36f309582995f8af52
4
+ data.tar.gz: 25408af509201219ce0539dbfe3324c8b3806bce367d3e00b80a2f15dc6e7dc4
5
5
  SHA512:
6
- metadata.gz: fd1dbb2069c730aeda634d15cc4cd5a5fa0be8def4cca8db3b6bb320e40ef97f29f88bac16f2ba12720a1287cbb06ae3188e7862f5586599757fc2c56f6d3e6e
7
- data.tar.gz: b5f0896c2a4979b3f8d157bc20f3ee1bc7846ea6ef2ffb3432b50d5696e0852f803026bea3d0177c8db22b949c3d8c89022582b4c79da84c8ff8fc4a2611d3a6
6
+ metadata.gz: 139bcf7c985b68e017e03bb3718a4377ec878ec7b249ac32ad20900d1467e5026a093e82725f8e39e1d8a378a7db0959f6a37f7571d1bccae40e9b8f70244a55
7
+ data.tar.gz: ca739746fb067e6de9ae52bcb08f352fcdf676a02063e04f5d3b5f3b8a54d773ff57227d5dc5fca7c6d402155920b3da39c73d83d495680ff988f67248fac321
data/.gitignore CHANGED
@@ -5,3 +5,4 @@ pkg/*
5
5
 
6
6
  Gemfile.lock
7
7
  *.gemfile.lock
8
+ .ruby-version
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --color
2
+ --warnings
2
3
  --format documentation
data/.travis.yml CHANGED
@@ -1,47 +1,35 @@
1
- sudo: false # use newer travis infrastructure
2
1
  language: ruby
3
2
  cache: bundler
3
+ sudo: false
4
4
  before_install:
5
- - gem install bundler -v 1.16.1
5
+ - gem update --system
6
+ - gem install bundler
6
7
  before_script:
7
8
  - mysql -e 'create database ranked_model_test;'
8
9
  - psql -c 'create database ranked_model_test;' -U postgres
9
10
  rvm:
10
- - 1.9.3
11
- - 2.1.10
12
- - 2.2.10
13
- - 2.3.7
14
11
  - 2.4.4
15
12
  - 2.5.1
13
+ - 2.6.4
16
14
  - jruby-9.1.17.0
17
- - rbx-3.107
18
15
  env:
19
16
  - DB=sqlite
20
17
  - DB=mysql
21
18
  - DB=postgresql
19
+ services:
20
+ - mysql
21
+ - postgresql
22
22
  gemfile:
23
- - gemfiles/rails_4_1.gemfile
24
23
  - gemfiles/rails_4_2.gemfile
25
24
  - gemfiles/rails_5_0.gemfile
26
25
  - gemfiles/rails_5_1.gemfile
27
26
  - gemfiles/rails_5_2.gemfile
27
+ - gemfiles/rails_6_0.gemfile
28
28
  matrix:
29
29
  exclude:
30
- - rvm: 1.9.3
31
- gemfile: gemfiles/rails_5_0.gemfile
32
- - rvm: 1.9.3
33
- gemfile: gemfiles/rails_5_1.gemfile
34
- - rvm: 1.9.3
35
- gemfile: gemfiles/rails_5_2.gemfile
36
- - rvm: 2.1.10
37
- gemfile: gemfiles/rails_5_0.gemfile
38
- - rvm: 2.1.10
39
- gemfile: gemfiles/rails_5_1.gemfile
40
- - rvm: 2.1.10
41
- gemfile: gemfiles/rails_5_2.gemfile
42
30
  - rvm: jruby-9.1.17.0
43
31
  gemfile: gemfiles/rails_5_2.gemfile
44
32
  - rvm: 2.4.4
45
- gemfile: gemfiles/rails_4_1.gemfile
46
- - rvm: 2.5.1
47
- gemfile: gemfiles/rails_4_1.gemfile
33
+ gemfile: gemfiles/rails_6_0.gemfile
34
+ - rvm: jruby-9.1.17.0
35
+ gemfile: gemfiles/rails_6_0.gemfile
data/Appraisals CHANGED
@@ -1,81 +1,71 @@
1
- appraise "rails-4-1" do
1
+ appraise "rails-4-2" do
2
2
  group :sqlite do
3
- gem "sqlite3", platform: :ruby
4
3
  gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
5
4
  end
6
5
  group :mysql do
7
- gem "mysql2", "~> 0.3.21", platform: :ruby
6
+ gem "mysql2", "~> 0.4.0", platform: :ruby
8
7
  gem "activerecord-jdbcmysql-adapter", "~> 1.3.24", platform: :jruby
9
8
  end
10
9
  group :postgresql do
11
- gem "pg", "~> 0.18.0", platform: :ruby
10
+ gem "pg", "~> 0.18.4", platform: :ruby
12
11
  gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.24", platform: :jruby
13
12
  end
14
13
 
15
- gem "activerecord", "~> 4.1.16"
14
+ gem "activerecord", "~> 4.2.0"
16
15
  end
17
16
 
18
- appraise "rails-4-2" do
17
+ appraise "rails-5-0" do
19
18
  group :sqlite do
20
- gem "sqlite3", platform: :ruby
21
- gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.24", platform: :jruby
19
+ gem "activerecord-jdbcsqlite3-adapter", "~> 50.0", platform: :jruby
22
20
  end
23
21
  group :mysql do
24
- gem "mysql2", "~> 0.4.10", platform: :ruby
25
- gem "activerecord-jdbcmysql-adapter", "~> 1.3.24", platform: :jruby
22
+ gem "activerecord-jdbcmysql-adapter", "~> 50.0", platform: :jruby
26
23
  end
27
24
  group :postgresql do
28
- gem "pg", "~> 0.18.0", platform: :ruby
29
- gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.24", platform: :jruby
25
+ gem "activerecord-jdbcpostgresql-adapter", "~> 50.0", platform: :jruby
30
26
  end
31
27
 
32
- gem "activerecord", "~> 4.2.10"
28
+ gem "activerecord", "~> 5.0.0"
33
29
  end
34
30
 
35
- appraise "rails-5-0" do
31
+ appraise "rails-5-1" do
36
32
  group :sqlite do
37
- gem "sqlite3", platform: :ruby
38
- gem "activerecord-jdbcsqlite3-adapter", "~> 50.1", platform: :jruby
33
+ gem "activerecord-jdbcsqlite3-adapter", "~> 51.0", platform: :jruby
39
34
  end
40
35
  group :mysql do
41
- gem "mysql2", "~> 0.4.10", platform: :ruby
42
- gem "activerecord-jdbcmysql-adapter", "~> 50.1", platform: :jruby
36
+ gem "activerecord-jdbcmysql-adapter", "~> 51.0", platform: :jruby
43
37
  end
44
38
  group :postgresql do
45
- gem "pg", "~> 0.21.0", platform: :ruby
46
- gem "activerecord-jdbcpostgresql-adapter", "~> 50.1", platform: :jruby
39
+ gem "activerecord-jdbcpostgresql-adapter", "~> 51.0", platform: :jruby
47
40
  end
48
41
 
49
- gem "activerecord", "~> 5.0.7"
42
+ gem "activerecord", "~> 5.1.0"
50
43
  end
51
44
 
52
- appraise "rails-5-1" do
45
+ appraise "rails-5-2" do
53
46
  group :sqlite do
54
- gem "sqlite3", platform: :ruby
55
- gem "activerecord-jdbcsqlite3-adapter", "~> 51.1", platform: :jruby
47
+ gem "activerecord-jdbcsqlite3-adapter", "~> 52.0", platform: :jruby
56
48
  end
57
49
  group :mysql do
58
- gem "mysql2", "~> 0.4.10", platform: :ruby
59
- gem "activerecord-jdbcmysql-adapter", "~> 51.1", platform: :jruby
50
+ gem "activerecord-jdbcmysql-adapter", "~> 52.0", platform: :jruby
60
51
  end
61
52
  group :postgresql do
62
- gem "pg", "~> 0.21.0", platform: :ruby
63
- gem "activerecord-jdbcpostgresql-adapter", "~> 51.1", platform: :jruby
53
+ gem "activerecord-jdbcpostgresql-adapter", "~> 52.0", platform: :jruby
64
54
  end
65
55
 
66
- gem "activerecord", "~> 5.1.6"
56
+ gem "activerecord", "~> 5.2.0"
67
57
  end
68
58
 
69
- appraise "rails-5-2" do
59
+ appraise "rails-6-0" do
70
60
  group :sqlite do
71
- gem "sqlite3", platform: :ruby
61
+ gem "sqlite3", "~> 1.4", platform: :ruby
62
+ gem "activerecord-jdbcsqlite3-adapter", "~> 60.0", platform: :jruby
72
63
  end
73
64
  group :mysql do
74
- gem "mysql2", "~> 0.4.10", platform: :ruby
65
+ gem "activerecord-jdbcmysql-adapter", "~> 60.0", platform: :jruby
75
66
  end
76
67
  group :postgresql do
77
- gem "pg", "~> 0.21.0", platform: :ruby
68
+ gem "activerecord-jdbcpostgresql-adapter", "~> 60.0", platform: :jruby
78
69
  end
79
-
80
- gem "activerecord", "~> 5.2.0"
81
- end
70
+ gem "activerecord", "~> 6.0.0"
71
+ end
data/Gemfile CHANGED
@@ -2,3 +2,15 @@ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in ranked-model.gemspec
4
4
  gemspec
5
+
6
+ group :sqlite do
7
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
8
+ end
9
+
10
+ group :postgresql do
11
+ gem "pg", "~> 1.1.4", platform: :ruby
12
+ end
13
+
14
+ group :mysql do
15
+ gem "mysql2", "~> 0.5.0", platform: :ruby
16
+ end
data/Readme.mkd CHANGED
@@ -5,7 +5,7 @@
5
5
  Installation
6
6
  ------------
7
7
 
8
- ranked-model passes specs with Rails 4.1, 4.2, 5.0, 5.1 and 5.2 for MySQL, Postgres, and SQLite on Ruby 1.9.3, 2.1 through 2.5, jruby-9.1.17.0, and rbx-3.107 where Rails supports the platform. This is with the exception of Postgres before Rails 4.0 on all platforms, which is unsupported by `ranked-model`. Note that the `pg` gem has pulled support for rbx (Rubinius) from version 1 onward.
8
+ ranked-model passes specs with Rails 4.2, 5.0, 5.1, 5.2, 6.0 for MySQL, Postgres, and SQLite on Ruby 2.4 through 2.6, and jruby-9.1.17.0 where Rails supports the platform. This is with the exception of Postgres before Rails 4.0 on all platforms, which is unsupported by `ranked-model`. Note that the `pg` gem has pulled support for rbx (Rubinius) from version 1 onward.
9
9
 
10
10
  TL;DR, if you are using Rails 4 and up you are 100% good to go. Before Rails 4, be wary of Postgres.
11
11
 
@@ -52,7 +52,7 @@ The ranking integers stored in the `row_order` column will be big and spaced apa
52
52
  implement a sorting UI, just update the resource by appending the column name with `_position` and indicating the desired position:
53
53
 
54
54
  ``` ruby
55
- @duck.update_attribute :row_order_position, 0 # or 1, 2, 37. :first, :last, :up and :down are also valid
55
+ @duck.update :row_order_position => 0 # or 1, 2, 37. :first, :last, :up and :down are also valid
56
56
  ```
57
57
 
58
58
  **IMPORTANT: Note that you MUST append _position to the column name when setting a new position on an instance. This is a fake column that can take relative as well as absolute index-based values for position.**
@@ -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
 
@@ -2,21 +2,21 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 4.2.10"
5
+ gem "activerecord", "~> 4.2.0"
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
 
12
- group :mysql do
13
- gem "mysql2", "~> 0.4.10", platform: :ruby
14
- gem "activerecord-jdbcmysql-adapter", "~> 1.3.24", platform: :jruby
15
- end
16
-
17
12
  group :postgresql do
18
- gem "pg", "~> 0.18.0", platform: :ruby
13
+ gem "pg", "~> 0.18.4", platform: :ruby
19
14
  gem "activerecord-jdbcpostgresql-adapter", "~> 1.3.24", platform: :jruby
20
15
  end
21
16
 
17
+ group :mysql do
18
+ gem "mysql2", "~> 0.4.0", platform: :ruby
19
+ gem "activerecord-jdbcmysql-adapter", "~> 1.3.24", platform: :jruby
20
+ end
21
+
22
22
  gemspec path: "../"
@@ -2,21 +2,21 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.0.7"
5
+ gem "activerecord", "~> 5.0.0"
6
6
 
7
7
  group :sqlite do
8
- gem "sqlite3", platform: :ruby
9
- gem "activerecord-jdbcsqlite3-adapter", "~> 50.1", platform: :jruby
8
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 50.0", platform: :jruby
10
10
  end
11
11
 
12
- group :mysql do
13
- gem "mysql2", "~> 0.4.10", platform: :ruby
14
- gem "activerecord-jdbcmysql-adapter", "~> 50.1", platform: :jruby
12
+ group :postgresql do
13
+ gem "pg", "~> 1.1.4", platform: :ruby
14
+ gem "activerecord-jdbcpostgresql-adapter", "~> 50.0", platform: :jruby
15
15
  end
16
16
 
17
- group :postgresql do
18
- gem "pg", "~> 0.21.0", platform: :ruby
19
- gem "activerecord-jdbcpostgresql-adapter", "~> 50.1", platform: :jruby
17
+ group :mysql do
18
+ gem "mysql2", "~> 0.5.0", platform: :ruby
19
+ gem "activerecord-jdbcmysql-adapter", "~> 50.0", platform: :jruby
20
20
  end
21
21
 
22
22
  gemspec path: "../"
@@ -2,21 +2,21 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "~> 5.1.6"
5
+ gem "activerecord", "~> 5.1.0"
6
6
 
7
7
  group :sqlite do
8
- gem "sqlite3", platform: :ruby
9
- gem "activerecord-jdbcsqlite3-adapter", "~> 51.1", platform: :jruby
8
+ gem "sqlite3", "~> 1.3.13", platform: :ruby
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 51.0", platform: :jruby
10
10
  end
11
11
 
12
- group :mysql do
13
- gem "mysql2", "~> 0.4.10", platform: :ruby
14
- gem "activerecord-jdbcmysql-adapter", "~> 51.1", platform: :jruby
12
+ group :postgresql do
13
+ gem "pg", "~> 1.1.4", platform: :ruby
14
+ gem "activerecord-jdbcpostgresql-adapter", "~> 51.0", platform: :jruby
15
15
  end
16
16
 
17
- group :postgresql do
18
- gem "pg", "~> 0.21.0", platform: :ruby
19
- gem "activerecord-jdbcpostgresql-adapter", "~> 51.1", platform: :jruby
17
+ group :mysql do
18
+ gem "mysql2", "~> 0.5.0", platform: :ruby
19
+ gem "activerecord-jdbcmysql-adapter", "~> 51.0", platform: :jruby
20
20
  end
21
21
 
22
22
  gemspec path: "../"
@@ -5,15 +5,18 @@ 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
+ gem "activerecord-jdbcsqlite3-adapter", "~> 52.0", platform: :jruby
9
10
  end
10
11
 
11
- group :mysql do
12
- gem "mysql2", "~> 0.4.10", platform: :ruby
12
+ group :postgresql do
13
+ gem "pg", "~> 1.1.4", platform: :ruby
14
+ gem "activerecord-jdbcpostgresql-adapter", "~> 52.0", platform: :jruby
13
15
  end
14
16
 
15
- group :postgresql do
16
- gem "pg", "~> 0.21.0", platform: :ruby
17
+ group :mysql do
18
+ gem "mysql2", "~> 0.5.0", platform: :ruby
19
+ gem "activerecord-jdbcmysql-adapter", "~> 52.0", platform: :jruby
17
20
  end
18
21
 
19
22
  gemspec path: "../"
@@ -0,0 +1,22 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 6.0.0"
6
+
7
+ group :sqlite do
8
+ gem "sqlite3", "~> 1.4", platform: :ruby
9
+ gem "activerecord-jdbcsqlite3-adapter", "~> 60.0", platform: :jruby
10
+ end
11
+
12
+ group :postgresql do
13
+ gem "pg", "~> 1.1.4", platform: :ruby
14
+ gem "activerecord-jdbcpostgresql-adapter", "~> 60.0", platform: :jruby
15
+ end
16
+
17
+ group :mysql do
18
+ gem "mysql2", "~> 0.5.0", platform: :ruby
19
+ gem "activerecord-jdbcmysql-adapter", "~> 60.0", platform: :jruby
20
+ end
21
+
22
+ gemspec path: "../"
@@ -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
@@ -171,7 +175,7 @@ module RankedModel
171
175
 
172
176
  def assure_unique_position
173
177
  if ( new_record? || rank_changed? )
174
- if (rank > RankedModel::MAX_RANK_VALUE) || current_at_rank(rank)
178
+ if (rank > RankedModel::MAX_RANK_VALUE) || rank_taken?
175
179
  rearrange_ranks
176
180
  end
177
181
  end
@@ -205,12 +209,14 @@ module RankedModel
205
209
  end
206
210
 
207
211
  def rebalance_ranks
208
- if rank
212
+ if rank && instance.persisted?
209
213
  origin = current_order.index { |item| item.instance.id == instance.id }
210
- destination = current_order.index { |item| rank <= item.rank }
211
- destination -= 1 if origin < destination
214
+ if origin
215
+ destination = current_order.index { |item| rank <= item.rank }
216
+ destination -= 1 if origin < destination
212
217
 
213
- current_order.insert destination, current_order.delete_at(origin)
218
+ current_order.insert destination, current_order.delete_at(origin)
219
+ end
214
220
  end
215
221
 
216
222
  gaps = current_order.size + 1
@@ -256,7 +262,7 @@ module RankedModel
256
262
  _finder = _finder.where.not instance_class.primary_key.to_sym => instance.id
257
263
  end
258
264
 
259
- _finder.order(ranker.column.to_sym => order).select(columns)
265
+ _finder.reorder(ranker.column.to_sym => order).select(columns)
260
266
  end
261
267
  end
262
268
 
@@ -286,13 +292,8 @@ module RankedModel
286
292
  end
287
293
  end
288
294
 
289
- def current_at_rank _rank
290
- if (ordered_instance = finder.
291
- except( :order ).
292
- where( ranker.column => _rank ).
293
- first)
294
- RankedModel::Ranker::Mapper.new ranker, ordered_instance
295
- end
295
+ def rank_taken?
296
+ finder.except(:order).where(ranker.column => rank).exists?
296
297
  end
297
298
 
298
299
  def neighbors_at_position _pos
@@ -1,3 +1,3 @@
1
1
  module RankedModel
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.5"
3
3
  end
data/lib/ranked-model.rb CHANGED
@@ -3,6 +3,8 @@ require File.dirname(__FILE__)+'/ranked-model/railtie' if defined?(Rails::Railti
3
3
 
4
4
  module RankedModel
5
5
 
6
+ class NonNilColumnDefault < StandardError; end
7
+
6
8
  # Signed INT in MySQL
7
9
  #
8
10
  MAX_RANK_VALUE = 2147483647
@@ -18,7 +20,7 @@ module RankedModel
18
20
  before_save :handle_ranking
19
21
 
20
22
  scope :rank, lambda { |name|
21
- order ranker(name.to_sym).column
23
+ reorder ranker(name.to_sym).column
22
24
  }
23
25
  end
24
26
 
@@ -45,6 +47,11 @@ module RankedModel
45
47
  def ranks *args
46
48
  self.rankers ||= []
47
49
  ranker = RankedModel::Ranker.new(*args)
50
+
51
+ if column_default(ranker)
52
+ raise NonNilColumnDefault, %Q{Your ranked model column "#{ranker.name}" must not have a default value in the database.}
53
+ end
54
+
48
55
  self.rankers << ranker
49
56
  attr_reader "#{ranker.name}_position"
50
57
  define_method "#{ranker.name}_position=" do |position|
@@ -54,9 +61,17 @@ module RankedModel
54
61
  end
55
62
  end
56
63
 
64
+ define_method "#{ranker.name}_rank" do
65
+ ranker.with(self).relative_rank
66
+ end
67
+
57
68
  public "#{ranker.name}_position", "#{ranker.name}_position="
58
69
  end
59
70
 
71
+ def column_default ranker
72
+ column_defaults[ranker.name.to_s] if ActiveRecord::Base.connected? && table_exists?
73
+ end
74
+
60
75
  end
61
76
 
62
77
  end
data/ranked-model.gemspec CHANGED
@@ -9,11 +9,11 @@ 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 3 & 4}
13
- s.description = %q{ranked-model is a modern row sorting library built for Rails 3 & 4. It uses ARel aggressively and is better optimized than most other libraries.}
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.1.16"
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"
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ColumnDefaultDuck' do
4
+
5
+ it "should raise an error if we try to initialise ranked_model on a column with a default value" do
6
+ expect {
7
+ class ColumnDefaultDuck < ActiveRecord::Base
8
+ include RankedModel
9
+ ranks :size, :with_same => :pond
10
+ end
11
+ }.to raise_error(RankedModel::NonNilColumnDefault, 'Your ranked model column "size" must not have a default value in the database.')
12
+ end
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(ENV['DB'].to_sym)
26
+ end
27
+ end
28
+
29
+ end