order_query 0.3.3 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/spec/spec_helper.rb CHANGED
@@ -1,15 +1,41 @@
1
- # -*- encoding : utf-8 -*-
1
+ # frozen_string_literal: true
2
+
2
3
  # Configure Rails Environment
3
4
  ENV['RAILS_ENV'] = ENV['RACK_ENV'] = 'test'
4
- if ENV['TRAVIS'] && !(defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx')
5
- require 'codeclimate-test-reporter'
6
- CodeClimate::TestReporter.start
5
+ if ENV['COVERAGE'] && !%w[rbx jruby].include?(RUBY_ENGINE)
6
+ require 'simplecov'
7
+ SimpleCov.command_name 'RSpec'
7
8
  end
8
9
  require 'order_query'
9
10
 
10
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+ require_relative './support/order_expectation'
11
12
 
12
13
  require 'fileutils'
13
14
  FileUtils.mkpath 'log' unless File.directory? 'log'
14
15
  ActiveRecord::Base.logger = Logger.new('log/test-queries.log')
15
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
16
+ adapter = ENV.fetch('DB', 'sqlite3')
17
+ case adapter
18
+ when 'mysql2', 'postgresql'
19
+ system({ 'DB' => adapter }, 'script/create-db-users') unless ENV['TRAVIS']
20
+ config = {
21
+ # Host 127.0.0.1 required for default postgres installation on Ubuntu.
22
+ host: '127.0.0.1',
23
+ database: 'order_query_gem_test',
24
+ encoding: 'utf8',
25
+ min_messages: 'WARNING',
26
+ adapter: adapter,
27
+ username: ENV['DB_USERNAME'] || 'order_query',
28
+ password: ENV['DB_PASSWORD'] || 'order_query'
29
+ }
30
+ ActiveRecord::Tasks::DatabaseTasks.create config.stringify_keys
31
+ ActiveRecord::Base.establish_connection config
32
+ when 'sqlite3'
33
+ ActiveRecord::Base.establish_connection adapter: adapter, database: ':memory:'
34
+ else
35
+ fail "Unknown DB adapter #{adapter}. "\
36
+ 'Valid adapters are: mysql2, postgresql, sqlite3.'
37
+ end
38
+
39
+ RSpec.configure do |c|
40
+ c.include OrderExpectations
41
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OrderExpectations
4
+ # rubocop:disable Metrics/AbcSize
5
+
6
+ def expect_next(space, record, next_record, &display)
7
+ point = space.at(record)
8
+ actual = point.next
9
+ failure_message =
10
+ "expected: next(#{display[record]}) == #{display[next_record]}\n" \
11
+ " got: #{actual ? display[actual] : 'nil'}\n" \
12
+ " all: #{space.scope.all.map(&display)}\n" \
13
+ " sql: #{space.at(record).after.limit(1).to_sql}"
14
+ expect(actual ? display[actual] : nil).to eq(display[next_record]),
15
+ failure_message
16
+ end
17
+
18
+ def expect_prev(space, record, prev_record, &display)
19
+ point = space.at(record)
20
+ actual = point.previous
21
+ failure_message =
22
+ "expected: previous(#{display[record]}) == #{display[prev_record]}\n" \
23
+ " got: #{actual ? display[actual] : 'nil'}\n" \
24
+ " all: #{space.scope.all.map(&display)}\n" \
25
+ " sql: #{space.at(record).before.limit(1).to_sql}"
26
+ expect(actual ? display[actual] : nil).to eq(display[prev_record]),
27
+ failure_message
28
+ end
29
+
30
+ def expect_order(space, ordered, &display)
31
+ all_actual = space.scope.all.map(&display)
32
+ all_expected = ordered.map(&display)
33
+ failure_message =
34
+ "expected: #{all_expected * ', '}\n"\
35
+ " got: #{all_actual * ', '}\n"\
36
+ " sql: #{space.scope.to_sql}"
37
+ expect(all_actual).to eq(all_expected), failure_message
38
+
39
+ ordered.each_cons(2) do |record, next_record|
40
+ expect_next space, record, next_record, &display
41
+ expect_prev space, next_record, record, &display
42
+ end
43
+ expect_next space, ordered.last, ordered.first, &display
44
+ expect_prev space, ordered.first, ordered.last, &display
45
+ end
46
+
47
+ # rubocop:enable Metrics/AbcSize
48
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: order_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gleb Mazovetskiy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-05 00:00:00.000000000 Z
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,40 +16,54 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '5.0'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.0'
22
+ version: '7.0'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '4.0'
29
+ version: '5.0'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.0'
32
+ version: '7.0'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: activesupport
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '4.0'
39
+ version: '5.0'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: '6.0'
42
+ version: '7.0'
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '4.0'
49
+ version: '5.0'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: '6.0'
52
+ version: '7.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: rake
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '13.0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '13.0'
53
67
  - !ruby/object:Gem::Dependency
54
68
  name: rspec
55
69
  requirement: !ruby/object:Gem::Requirement
@@ -65,19 +79,19 @@ dependencies:
65
79
  - !ruby/object:Gem::Version
66
80
  version: '3.4'
67
81
  - !ruby/object:Gem::Dependency
68
- name: rake
82
+ name: simplecov
69
83
  requirement: !ruby/object:Gem::Requirement
70
84
  requirements:
71
- - - "~>"
85
+ - - ">="
72
86
  - !ruby/object:Gem::Version
73
- version: '10.2'
87
+ version: '0'
74
88
  type: :development
75
89
  prerelease: false
76
90
  version_requirements: !ruby/object:Gem::Requirement
77
91
  requirements:
78
- - - "~>"
92
+ - - ">="
79
93
  - !ruby/object:Gem::Version
80
- version: '10.2'
94
+ version: '0'
81
95
  description: Find next / previous Active Record(s) in one efficient query
82
96
  email: glex.spb@gmail.com
83
97
  executables: []
@@ -92,18 +106,23 @@ files:
92
106
  - lib/order_query.rb
93
107
  - lib/order_query/column.rb
94
108
  - lib/order_query/direction.rb
109
+ - lib/order_query/errors.rb
110
+ - lib/order_query/nulls_direction.rb
95
111
  - lib/order_query/point.rb
96
112
  - lib/order_query/space.rb
97
113
  - lib/order_query/sql/column.rb
98
114
  - lib/order_query/sql/order_by.rb
99
115
  - lib/order_query/sql/where.rb
100
116
  - lib/order_query/version.rb
101
- - spec/gemfiles/rails_4.gemfile
102
- - spec/gemfiles/rails_4.gemfile.lock
103
- - spec/gemfiles/rails_5.gemfile
104
- - spec/gemfiles/rails_5.gemfile.lock
117
+ - spec/gemfiles/rails_5_0.gemfile
118
+ - spec/gemfiles/rails_5_1.gemfile
119
+ - spec/gemfiles/rails_5_2.gemfile
120
+ - spec/gemfiles/rails_6_0.gemfile
121
+ - spec/gemfiles/rails_6_1.gemfile
122
+ - spec/gemfiles/rubocop.gemfile
105
123
  - spec/order_query_spec.rb
106
124
  - spec/spec_helper.rb
125
+ - spec/support/order_expectation.rb
107
126
  homepage: https://github.com/glebm/order_query
108
127
  licenses:
109
128
  - MIT
@@ -117,22 +136,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
117
136
  requirements:
118
137
  - - ">="
119
138
  - !ruby/object:Gem::Version
120
- version: '0'
139
+ version: 2.3.0
121
140
  required_rubygems_version: !ruby/object:Gem::Requirement
122
141
  requirements:
123
142
  - - ">="
124
143
  - !ruby/object:Gem::Version
125
144
  version: '0'
126
145
  requirements: []
127
- rubyforge_project:
128
- rubygems_version: 2.5.1
146
+ rubygems_version: 3.1.2
129
147
  signing_key:
130
148
  specification_version: 4
131
149
  summary: Find next / previous Active Record(s) in one query
132
150
  test_files:
133
- - spec/gemfiles/rails_4.gemfile
134
- - spec/gemfiles/rails_4.gemfile.lock
135
- - spec/gemfiles/rails_5.gemfile
136
- - spec/gemfiles/rails_5.gemfile.lock
137
- - spec/order_query_spec.rb
138
151
  - spec/spec_helper.rb
152
+ - spec/order_query_spec.rb
153
+ - spec/gemfiles/rails_6_1.gemfile
154
+ - spec/gemfiles/rails_5_2.gemfile
155
+ - spec/gemfiles/rails_6_0.gemfile
156
+ - spec/gemfiles/rails_5_0.gemfile
157
+ - spec/gemfiles/rails_5_1.gemfile
158
+ - spec/gemfiles/rubocop.gemfile
159
+ - spec/support/order_expectation.rb
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../../'
4
-
5
- gem 'activerecord', '~> 4.0'
6
- gem 'activesupport', '~> 4.0'
7
-
8
- eval_gemfile './shared.gemfile'
9
-
@@ -1,73 +0,0 @@
1
- PATH
2
- remote: ../../
3
- specs:
4
- order_query (0.3.2)
5
- activerecord (>= 4.0, < 6.0)
6
- activesupport (>= 4.0, < 6.0)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- activemodel (4.2.5)
12
- activesupport (= 4.2.5)
13
- builder (~> 3.1)
14
- activerecord (4.2.5)
15
- activemodel (= 4.2.5)
16
- activesupport (= 4.2.5)
17
- arel (~> 6.0)
18
- activesupport (4.2.5)
19
- i18n (~> 0.7)
20
- json (~> 1.7, >= 1.7.7)
21
- minitest (~> 5.1)
22
- thread_safe (~> 0.3, >= 0.3.4)
23
- tzinfo (~> 1.1)
24
- arel (6.0.3)
25
- builder (3.2.2)
26
- byebug (8.2.1)
27
- codeclimate-test-reporter (0.4.8)
28
- simplecov (>= 0.7.1, < 1.0.0)
29
- diff-lcs (1.2.5)
30
- docile (1.1.5)
31
- i18n (0.7.0)
32
- json (1.8.3)
33
- minitest (5.8.3)
34
- rake (10.4.2)
35
- rspec (3.4.0)
36
- rspec-core (~> 3.4.0)
37
- rspec-expectations (~> 3.4.0)
38
- rspec-mocks (~> 3.4.0)
39
- rspec-core (3.4.1)
40
- rspec-support (~> 3.4.0)
41
- rspec-expectations (3.4.0)
42
- diff-lcs (>= 1.2.0, < 2.0)
43
- rspec-support (~> 3.4.0)
44
- rspec-mocks (3.4.0)
45
- diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.4.0)
47
- rspec-support (3.4.1)
48
- simplecov (0.11.1)
49
- docile (~> 1.1.0)
50
- json (~> 1.8)
51
- simplecov-html (~> 0.10.0)
52
- simplecov-html (0.10.0)
53
- sqlite3 (1.3.11)
54
- thread_safe (0.3.5)
55
- tzinfo (1.2.2)
56
- thread_safe (~> 0.1)
57
-
58
- PLATFORMS
59
- ruby
60
-
61
- DEPENDENCIES
62
- activerecord (~> 4.0)
63
- activerecord-jdbcsqlite3-adapter
64
- activesupport (~> 4.0)
65
- byebug
66
- codeclimate-test-reporter
67
- order_query!
68
- rake (~> 10.2)
69
- rspec (~> 3.4)
70
- sqlite3 (>= 1.3.11)
71
-
72
- BUNDLED WITH
73
- 1.11.2
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../../'
4
-
5
- gem 'activerecord', '= 5.0.0.beta1'
6
- gem 'activesupport', '= 5.0.0.beta1'
7
-
8
- eval_gemfile './shared.gemfile'
@@ -1,76 +0,0 @@
1
- PATH
2
- remote: ../../
3
- specs:
4
- order_query (0.3.2)
5
- activerecord (>= 4.0, < 6.0)
6
- activesupport (>= 4.0, < 6.0)
7
-
8
- GEM
9
- remote: https://rubygems.org/
10
- specs:
11
- activemodel (5.0.0.beta1)
12
- activesupport (= 5.0.0.beta1)
13
- builder (~> 3.1)
14
- activerecord (5.0.0.beta1)
15
- activemodel (= 5.0.0.beta1)
16
- activesupport (= 5.0.0.beta1)
17
- arel (~> 7.0)
18
- activesupport (5.0.0.beta1)
19
- concurrent-ruby (~> 1.0)
20
- i18n (~> 0.7)
21
- json (~> 1.7, >= 1.7.7)
22
- method_source
23
- minitest (~> 5.1)
24
- tzinfo (~> 1.1)
25
- arel (7.0.0)
26
- builder (3.2.2)
27
- byebug (8.2.1)
28
- codeclimate-test-reporter (0.4.8)
29
- simplecov (>= 0.7.1, < 1.0.0)
30
- concurrent-ruby (1.0.0)
31
- diff-lcs (1.2.5)
32
- docile (1.1.5)
33
- i18n (0.7.0)
34
- json (1.8.3)
35
- method_source (0.8.2)
36
- minitest (5.8.3)
37
- rake (10.4.2)
38
- rspec (3.4.0)
39
- rspec-core (~> 3.4.0)
40
- rspec-expectations (~> 3.4.0)
41
- rspec-mocks (~> 3.4.0)
42
- rspec-core (3.4.1)
43
- rspec-support (~> 3.4.0)
44
- rspec-expectations (3.4.0)
45
- diff-lcs (>= 1.2.0, < 2.0)
46
- rspec-support (~> 3.4.0)
47
- rspec-mocks (3.4.0)
48
- diff-lcs (>= 1.2.0, < 2.0)
49
- rspec-support (~> 3.4.0)
50
- rspec-support (3.4.1)
51
- simplecov (0.11.1)
52
- docile (~> 1.1.0)
53
- json (~> 1.8)
54
- simplecov-html (~> 0.10.0)
55
- simplecov-html (0.10.0)
56
- sqlite3 (1.3.11)
57
- thread_safe (0.3.5)
58
- tzinfo (1.2.2)
59
- thread_safe (~> 0.1)
60
-
61
- PLATFORMS
62
- ruby
63
-
64
- DEPENDENCIES
65
- activerecord (= 5.0.0.beta1)
66
- activerecord-jdbcsqlite3-adapter
67
- activesupport (= 5.0.0.beta1)
68
- byebug
69
- codeclimate-test-reporter
70
- order_query!
71
- rake (~> 10.2)
72
- rspec (~> 3.4)
73
- sqlite3 (>= 1.3.11)
74
-
75
- BUNDLED WITH
76
- 1.11.2