model_iterator 1.0.4 → 2.0.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 +7 -0
- data/Gemfile +0 -2
- data/lib/model_iterator.rb +6 -2
- data/model_iterator.gemspec +3 -2
- data/test/helper.rb +15 -1
- data/test/iterate_test.rb +17 -0
- metadata +24 -19
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 99afeb3b36405d067e41fd305efccf904b992ac4
|
4
|
+
data.tar.gz: 0c9caa876f8d4566eeca4bf0c2da655f71d4eb68
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 06c0aa15153f69b15381acac1aa5235a56778fb7d3cc8e31e4226621db62ee2606561f1ea990f210f883d49f421a0cb8f1f50c5026255ea25abb1d0916ff3eb0
|
7
|
+
data.tar.gz: 40021312de9cb5f1bff81d28d88ad2bc8e41f320e462776ddc17bba4ca4112b9a1160700705f8d159b8467fb33b523e1e52ffb78417aa50be3aae9cdf072f8d9
|
data/Gemfile
CHANGED
data/lib/model_iterator.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Iterates over large models, storing state in Redis.
|
2
2
|
class ModelIterator
|
3
|
-
VERSION = "
|
3
|
+
VERSION = "2.0.0"
|
4
4
|
|
5
5
|
class MaxIterations < StandardError
|
6
6
|
attr_reader :iterator
|
@@ -204,7 +204,11 @@ class ModelIterator
|
|
204
204
|
# Returns an Array of ActiveRecord::Base instances if any results are
|
205
205
|
# returned, or nil.
|
206
206
|
def records
|
207
|
-
|
207
|
+
options = find_options
|
208
|
+
query = @klass.where(options[:conditions]).limit(options[:limit]).order(options[:order])
|
209
|
+
query = query.select(options[:select]) if options[:select]
|
210
|
+
query = query.joins(options[:joins]) if options[:joins]
|
211
|
+
arr = query.to_a
|
208
212
|
arr.empty? ? nil : arr
|
209
213
|
end
|
210
214
|
|
data/model_iterator.gemspec
CHANGED
@@ -12,8 +12,8 @@ Gem::Specification.new do |s|
|
|
12
12
|
## If your rubyforge_project name is different, then edit it and comment out
|
13
13
|
## the sub! line in the Rakefile
|
14
14
|
s.name = 'model_iterator'
|
15
|
-
s.version = '
|
16
|
-
s.date = '
|
15
|
+
s.version = '2.0.0'
|
16
|
+
s.date = '2016-03-31'
|
17
17
|
s.rubyforge_project = 'model_iterator'
|
18
18
|
|
19
19
|
## Make sure your summary is short. The description may be as long
|
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
|
33
33
|
s.require_paths = %w[lib]
|
34
34
|
|
35
|
+
s.add_dependency 'activerecord', '>=4.0'
|
35
36
|
s.add_development_dependency 'rake'
|
36
37
|
s.add_development_dependency 'test-unit'
|
37
38
|
|
data/test/helper.rb
CHANGED
@@ -3,18 +3,32 @@ require 'test/unit'
|
|
3
3
|
require 'active_record'
|
4
4
|
require File.expand_path("../../lib/model_iterator", __FILE__)
|
5
5
|
|
6
|
+
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
6
7
|
class ModelIterator::TestCase < Test::Unit::TestCase
|
7
8
|
class Model < ActiveRecord::Base
|
8
|
-
establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
9
9
|
connection.create_table table_name do |c|
|
10
10
|
c.column :name, :string
|
11
11
|
end
|
12
12
|
|
13
|
+
has_one :associated_model
|
14
|
+
|
13
15
|
%w(a b c).each do |s|
|
14
16
|
create!(:name => s)
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
20
|
+
class AssociatedModel < ActiveRecord::Base
|
21
|
+
connection.create_table table_name do |c|
|
22
|
+
c.integer :model_id
|
23
|
+
end
|
24
|
+
|
25
|
+
belongs_to :model
|
26
|
+
|
27
|
+
Model.all.each do |m|
|
28
|
+
create!(:model => m)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
18
32
|
class RedisClient
|
19
33
|
def initialize(hash = nil)
|
20
34
|
@hash = hash || {}
|
data/test/iterate_test.rb
CHANGED
@@ -133,6 +133,23 @@ class IterateTest < ModelIterator::TestCase
|
|
133
133
|
assert_equal %w(a b c), names
|
134
134
|
end
|
135
135
|
|
136
|
+
def test_select_option_honored
|
137
|
+
names = []
|
138
|
+
redis = RedisClient.new
|
139
|
+
iter = ModelIterator.new Model, :redis => redis, :limit => 1, :select => :id
|
140
|
+
iter.each do |m|
|
141
|
+
assert_false m.attributes.has_key?(:name)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def test_joins_can_be_used
|
146
|
+
redis = RedisClient.new
|
147
|
+
iter = ModelIterator.new Model, :redis => redis, :limit => 1, :joins => :associated_model
|
148
|
+
iter.each do |m|
|
149
|
+
assert_not_nil m.associated_model
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
136
153
|
class ExpectedError < StandardError; end
|
137
154
|
end
|
138
155
|
|
metadata
CHANGED
@@ -1,46 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: model_iterator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
5
|
-
prerelease:
|
4
|
+
version: 2.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Rick Olson
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-03-31 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
14
27
|
- !ruby/object:Gem::Dependency
|
15
28
|
name: rake
|
16
29
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
30
|
requirements:
|
19
|
-
- -
|
31
|
+
- - '>='
|
20
32
|
- !ruby/object:Gem::Version
|
21
33
|
version: '0'
|
22
34
|
type: :development
|
23
35
|
prerelease: false
|
24
36
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
37
|
requirements:
|
27
|
-
- -
|
38
|
+
- - '>='
|
28
39
|
- !ruby/object:Gem::Version
|
29
40
|
version: '0'
|
30
41
|
- !ruby/object:Gem::Dependency
|
31
42
|
name: test-unit
|
32
43
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
44
|
requirements:
|
35
|
-
- -
|
45
|
+
- - '>='
|
36
46
|
- !ruby/object:Gem::Version
|
37
47
|
version: '0'
|
38
48
|
type: :development
|
39
49
|
prerelease: false
|
40
50
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
51
|
requirements:
|
43
|
-
- -
|
52
|
+
- - '>='
|
44
53
|
- !ruby/object:Gem::Version
|
45
54
|
version: '0'
|
46
55
|
description: Iterate through large ActiveRecord datasets
|
@@ -62,28 +71,24 @@ files:
|
|
62
71
|
- test/iterate_test.rb
|
63
72
|
homepage: http://github.com/technoweenie/model_iterator
|
64
73
|
licenses: []
|
74
|
+
metadata: {}
|
65
75
|
post_install_message:
|
66
76
|
rdoc_options: []
|
67
77
|
require_paths:
|
68
78
|
- lib
|
69
79
|
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
-
none: false
|
71
80
|
requirements:
|
72
|
-
- -
|
81
|
+
- - '>='
|
73
82
|
- !ruby/object:Gem::Version
|
74
83
|
version: '0'
|
75
|
-
segments:
|
76
|
-
- 0
|
77
|
-
hash: 1098997578076474898
|
78
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
85
|
requirements:
|
81
|
-
- -
|
86
|
+
- - '>='
|
82
87
|
- !ruby/object:Gem::Version
|
83
88
|
version: 1.3.5
|
84
89
|
requirements: []
|
85
90
|
rubyforge_project: model_iterator
|
86
|
-
rubygems_version:
|
91
|
+
rubygems_version: 2.0.14
|
87
92
|
signing_key:
|
88
93
|
specification_version: 2
|
89
94
|
summary: Iterate through large ActiveRecord datasets
|