pluck_each 0.1.0 → 0.2.0

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: 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: