pluck_each 0.1.0 → 0.2.0

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
- SHA1:
3
- metadata.gz: e38a2e5de6b397dab4950becd1de9a80b703dd4e
4
- data.tar.gz: 0f3798ecff31d3f35ece1f6ecedcea9ce657a233
2
+ SHA256:
3
+ metadata.gz: 1251afdb2cfb174e19fb429dc792037908275e3de39125de5704a8783b19d3c5
4
+ data.tar.gz: fa3759bccd4eac1e27508cc95f5f18c0a0c8106bad171ac7fe2e99ecce280864
5
5
  SHA512:
6
- metadata.gz: 4cfd3aff95b389605210a1721da6361de08ef10ed15f70e269be0f846f48811afa7f4791fa559bdc13def4da414a0545e61a64fb2b1b118c144971740d9f753f
7
- data.tar.gz: d3009c05a01c391bda8294158abab7fe8d45ad432fefa64304cd99a50f4c0f11d675d68d9c9ad3b050709a4e955eb7fca651bb8f1f6948ff9220d87d0a11178b
6
+ metadata.gz: 2ef9e0c7e2fd32ffbd2eadf5f0dd678a7f81777f683f0d18223680dbc9ca8f51272e219df1730cceadaff7e214c5b36b20b6ce8fda764f885707780969c3f814
7
+ data.tar.gz: 0ba161fd79eba6c7542affaa794e26013055cd781cd13990806725280e665e88f5920f61cc18134638e0a8a6bced183a4a080114829a7af724006339fe8ea851
@@ -1,3 +1,3 @@
1
1
  module PluckEach
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/pluck_each.rb CHANGED
@@ -8,6 +8,8 @@ end
8
8
  module ActiveRecord
9
9
  module Batches
10
10
 
11
+ IS_RAILS_6_1_PLUS = ::Gem::Version.new(::ActiveRecord.version) >= ::Gem::Version.new("6.1.0")
12
+
11
13
  def pluck_each(*args)
12
14
  pluck_in_batches(*args) do |values|
13
15
  values.each { |value| yield value }
@@ -20,25 +22,35 @@ module ActiveRecord
20
22
 
21
23
  # Ensure the primary key is selected so we can use it as an offset
22
24
  id_in_columns_requested = string_column_names.include?(primary_key)
25
+ id_only_field_requested = id_in_columns_requested && string_column_names.size == 1
23
26
  string_column_names.unshift(primary_key) unless id_in_columns_requested
24
27
  id_position_in_response = string_column_names.index(primary_key)
25
28
 
26
29
  relation = self
27
30
  batch_size = options[:batch_size] || 1000
28
31
 
29
- relation = relation.reorder(batch_order).limit(batch_size)
32
+ if IS_RAILS_6_1_PLUS
33
+ relation = relation.reorder(batch_order(:asc)).limit(batch_size)
34
+ else
35
+ relation = relation.reorder(batch_order).limit(batch_size)
36
+ end
37
+
30
38
  batch_relation = relation
31
39
 
32
40
  loop do
33
41
  batch = batch_relation.pluck(*string_column_names)
34
42
  break if batch.empty?
35
43
 
36
- primary_key_offset = batch.last.at(id_position_in_response)
44
+ primary_key_offset = batch.last
37
45
 
38
- unless id_in_columns_requested
39
- batch.collect! do |record|
40
- record.delete_at(id_position_in_response)
41
- record
46
+ if !id_only_field_requested
47
+ primary_key_offset = primary_key_offset.at(id_position_in_response)
48
+
49
+ unless id_in_columns_requested
50
+ batch.collect! do |record|
51
+ record.delete_at(id_position_in_response)
52
+ record
53
+ end
42
54
  end
43
55
  end
44
56
 
@@ -47,7 +59,10 @@ module ActiveRecord
47
59
  yield batch
48
60
 
49
61
  break if batch.size < batch_size
50
- batch_relation = relation.where(arel_attribute(primary_key).gt(primary_key_offset))
62
+
63
+ # Rails 5 introduced "arel_attribute" but keeps support for "table" so using
64
+ # "table" as the basis for this for now
65
+ batch_relation = relation.where(table[primary_key].gt(primary_key_offset))
51
66
  end
52
67
  end
53
68
  end
data/pluck_each.gemspec CHANGED
@@ -21,9 +21,9 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "activerecord", "> 3.2.0"
22
22
  spec.add_dependency "activesupport", "> 3.0.0"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.7"
24
+ spec.add_development_dependency "bundler"
25
25
  spec.add_development_dependency "minitest"
26
26
  spec.add_development_dependency "mocha"
27
27
  spec.add_development_dependency "pry"
28
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rake", ">= 12.3.3"
29
29
  end
@@ -12,22 +12,48 @@ describe PluckEach do
12
12
 
13
13
  describe 'API' do
14
14
  it 'adds pluck_each to Arel relation nodes' do
15
- User.all.must_respond_to :pluck_each
15
+ _(User.all).must_respond_to :pluck_each
16
16
  end
17
17
 
18
18
  it 'adds pluck_in_batches to Arel relation nodes' do
19
- User.all.must_respond_to :pluck_in_batches
19
+ _(User.all).must_respond_to :pluck_in_batches
20
20
  end
21
21
  end
22
22
 
23
23
  describe 'pluck_each' do
24
24
  before do
25
25
  User.delete_all
26
+ Product.delete_all
27
+
26
28
  User.create(:first_name => '1', :last_name => '1')
27
29
  User.create(:first_name => '2', :last_name => '2')
28
30
  User.create(:first_name => '3', :last_name => '3')
29
31
  User.create(:first_name => '4', :last_name => '4')
30
32
  User.create(:first_name => '5', :last_name => '5')
33
+ Product.create(:name => "1", :value => 1, :user_id => User.first.id)
34
+ Product.create(:name => "2", :value => 2, :user_id => User.first.id)
35
+ Product.create(:name => "3", :value => 3, :user_id => User.first.id)
36
+ end
37
+
38
+ it 'plucks :id from scope on association' do
39
+ values = []
40
+ user = User.first
41
+ user.products.pluck_each(:name) do |name|
42
+ values << name
43
+ end
44
+
45
+ values.sort!
46
+ _(values).must_equal ["1", "2", "3"]
47
+ end
48
+
49
+ it 'plucks :id when only field requested' do
50
+ values = []
51
+ User.all.pluck_each(:id) do |id|
52
+ values << id
53
+ end
54
+
55
+ values.sort!
56
+ _(values).must_equal User.all.pluck(:id).sort
31
57
  end
32
58
 
33
59
  it 'plucks only the fields requested' do
@@ -37,7 +63,7 @@ describe PluckEach do
37
63
  end
38
64
 
39
65
  values.sort!
40
- values.must_equal ['1', '2', '3', '4', '5']
66
+ _(values).must_equal ['1', '2', '3', '4', '5']
41
67
  end
42
68
 
43
69
  it 'allows batch_size in options to determine batch size' do
@@ -48,9 +74,9 @@ describe PluckEach do
48
74
  count += 1
49
75
  end
50
76
 
51
- count.must_equal(5)
77
+ _(count).must_equal(5)
52
78
  values.sort!
53
- values.must_equal ['1', '2', '3', '4', '5']
79
+ _(values).must_equal ['1', '2', '3', '4', '5']
54
80
  end
55
81
  end
56
82
 
@@ -71,7 +97,7 @@ describe PluckEach do
71
97
  end
72
98
 
73
99
  batch_sizes.sort!
74
- batch_sizes.must_equal [1, 2, 2]
100
+ _(batch_sizes).must_equal [1, 2, 2]
75
101
  end
76
102
  end
77
103
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pluck_each
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Dewitt
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-29 00:00:00.000000000 Z
11
+ date: 2021-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.7'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '1.7'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -98,16 +98,16 @@ dependencies:
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: 12.3.3
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: 12.3.3
111
111
  description: " pluck_each and plucK_in_batches ... should behave like find_each and
112
112
  find_in_batches "
113
113
  email:
@@ -130,7 +130,7 @@ homepage: ''
130
130
  licenses:
131
131
  - MIT
132
132
  metadata: {}
133
- post_install_message:
133
+ post_install_message:
134
134
  rdoc_options: []
135
135
  require_paths:
136
136
  - lib
@@ -145,9 +145,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0'
147
147
  requirements: []
148
- rubyforge_project:
149
- rubygems_version: 2.5.1
150
- signing_key:
148
+ rubygems_version: 3.1.2
149
+ signing_key:
151
150
  specification_version: 4
152
151
  summary: pluck_each and plucK_in_batches ... should behave like find_each and find_in_batches
153
152
  test_files: