activerecord-import-queue 0.0.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.
- checksums.yaml +7 -0
- data/lib/activerecord-import-queue.rb +81 -0
- metadata +46 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5b8a73b3a90243a2c30dc1a69733d32d8538b98b
|
4
|
+
data.tar.gz: f3f6e758485c63b770c465d5cadd1d7421ad0fed
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5e6d0692d049f650e664f8d1e3cf0c171bbdbafbaa5af460767c66a7aeb88d0547ebf52281470f575a2e08c00c5180fa78e8f4f4ff5a313268fb1ab0a966f55c
|
7
|
+
data.tar.gz: 8f6c52546d44a0402a41a45893afe2406d0153792400cbcaeaa5fd05cdcfd8a1fac211554336c649c0e36864e07f8fb500b39bca2e675b22c739e754432b0888
|
@@ -0,0 +1,81 @@
|
|
1
|
+
=begin rdoc
|
2
|
+
|
3
|
+
ActiveRecordImportQueue will maintain a list of ActiveRecord objects and use
|
4
|
+
the activerecord-import '.import' extension to import them in to a database
|
5
|
+
in bulk.
|
6
|
+
|
7
|
+
=end
|
8
|
+
|
9
|
+
class ActiveRecordImportQueue
|
10
|
+
|
11
|
+
=begin rdoc
|
12
|
+
|
13
|
+
Create a new instance of the import queue.
|
14
|
+
|
15
|
+
Specify 'limit=n' to limit the number of queued records to the value 'n'.
|
16
|
+
This limit will be checked each time an object is queued.
|
17
|
+
|
18
|
+
=end
|
19
|
+
|
20
|
+
def initialize(params={ :limit => 100 })
|
21
|
+
@pending = {}
|
22
|
+
@count = 0
|
23
|
+
@params = params
|
24
|
+
end
|
25
|
+
|
26
|
+
=begin rdoc
|
27
|
+
|
28
|
+
Returns the total number of pending objects.
|
29
|
+
|
30
|
+
=end
|
31
|
+
|
32
|
+
def count_pending
|
33
|
+
@count
|
34
|
+
end
|
35
|
+
|
36
|
+
=begin rdoc
|
37
|
+
|
38
|
+
To queue a new object, use the '<<' method to push an ActiveRecord object on
|
39
|
+
to the queue.
|
40
|
+
|
41
|
+
=end
|
42
|
+
|
43
|
+
def <<(obj)
|
44
|
+
@pending[obj.class] ||= []
|
45
|
+
@pending[obj.class] << obj
|
46
|
+
incr_count
|
47
|
+
check_depth
|
48
|
+
end
|
49
|
+
|
50
|
+
=begin rdoc
|
51
|
+
|
52
|
+
Imports all queued objects irrespective of whether the queue limit has been
|
53
|
+
reached. This should be used at the end of an import run to insert remaining
|
54
|
+
objects in to the database.
|
55
|
+
|
56
|
+
=end
|
57
|
+
|
58
|
+
def finish
|
59
|
+
@pending.keys.collect { |klass| process_class(klass) }
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def incr_count
|
65
|
+
@count += 1
|
66
|
+
end
|
67
|
+
|
68
|
+
def decr_count
|
69
|
+
@count -= 1
|
70
|
+
end
|
71
|
+
|
72
|
+
def process_class(klass)
|
73
|
+
klass.import(@pending[klass])
|
74
|
+
@pending[klass] = []
|
75
|
+
end
|
76
|
+
|
77
|
+
def check_depth
|
78
|
+
@pending.keys.collect { |klass| process_class(klass) if @pending[klass].count > @params[:limit] }
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
metadata
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: activerecord-import-queue
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Hicks
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-05 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: ActiveRecordImportQueue implements a simple queue which calls the 'import'
|
14
|
+
method of the base object when there are more than a configurable number of objects
|
15
|
+
pending
|
16
|
+
email: peter.hicks@poggs.co.uk
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/activerecord-import-queue.rb
|
22
|
+
homepage: http://opensource.poggs.com/ruby/gems/activerecord-import-queue
|
23
|
+
licenses:
|
24
|
+
- GPLv2
|
25
|
+
metadata: {}
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - '>='
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
requirements: []
|
41
|
+
rubyforge_project:
|
42
|
+
rubygems_version: 2.1.11
|
43
|
+
signing_key:
|
44
|
+
specification_version: 4
|
45
|
+
summary: An ActiveRecord object queue for activerecord-import
|
46
|
+
test_files: []
|