bulker 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,16 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler", "~> 1.0.0"
12
+ gem "jeweler", "~> 1.8.3"
13
+ gem "rcov", ">= 0"
14
+ gem "sqlite3"
15
+ gem "activerecord"
16
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,50 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activemodel (3.0.5)
5
+ activesupport (= 3.0.5)
6
+ builder (~> 2.1.2)
7
+ i18n (~> 0.4)
8
+ activerecord (3.0.5)
9
+ activemodel (= 3.0.5)
10
+ activesupport (= 3.0.5)
11
+ arel (~> 2.0.2)
12
+ tzinfo (~> 0.3.23)
13
+ activesupport (3.0.5)
14
+ arel (2.0.9)
15
+ builder (2.1.2)
16
+ diff-lcs (1.1.3)
17
+ git (1.2.5)
18
+ i18n (0.5.0)
19
+ jeweler (1.8.3)
20
+ bundler (~> 1.0)
21
+ git (>= 1.2.5)
22
+ rake
23
+ rdoc
24
+ json (1.6.5)
25
+ rake (0.9.2.2)
26
+ rcov (0.9.10)
27
+ rdoc (3.12)
28
+ json (~> 1.4)
29
+ rspec (2.8.0)
30
+ rspec-core (~> 2.8.0)
31
+ rspec-expectations (~> 2.8.0)
32
+ rspec-mocks (~> 2.8.0)
33
+ rspec-core (2.8.0)
34
+ rspec-expectations (2.8.0)
35
+ diff-lcs (~> 1.1.2)
36
+ rspec-mocks (2.8.0)
37
+ sqlite3 (1.3.3)
38
+ tzinfo (0.3.24)
39
+
40
+ PLATFORMS
41
+ ruby
42
+
43
+ DEPENDENCIES
44
+ activerecord
45
+ bundler (~> 1.0.0)
46
+ jeweler (~> 1.8.3)
47
+ rcov
48
+ rdoc (~> 3.12)
49
+ rspec (~> 2.8.0)
50
+ sqlite3
data/README.md ADDED
@@ -0,0 +1,96 @@
1
+ bulker
2
+ ========================
3
+
4
+ *bulker* is library that privides bulk execution functionality for paging and buffering.
5
+ *bulker* provides *Bulker::Pager* and *Bulker::Buffer*.
6
+
7
+ *Bulker::Pager* gives you paging functionality to split large number of data to devided segments. When 1000,000 records in your database, and you're going to do some process for each record, *Bulker::Pager* will help you. It can handle large data very easily such like array with *each* method.
8
+
9
+ *Bulker::Buffer* provides simple buffer that enables implimenting bulk insert or bulk upload behavior.
10
+
11
+ ## Installation
12
+
13
+ Install bulker with RubyGems
14
+
15
+ $ gem install bulker
16
+
17
+ or add this to your Gemfile if you use Bundler:
18
+
19
+ $ gem "bulker"
20
+
21
+ ## Usage
22
+ ### Bulker::Pager
23
+
24
+ *Bulker::Pager* is especially designed for ActiveRecord. For other data source, *Bulker::Criteria* provides interface for *Bulker::Pager*.
25
+
26
+ #### Working with ActiveRecord
27
+
28
+ If you have large records in *items* table and want to process each item, then:
29
+
30
+ require 'bulker'
31
+ class Item < ActiveRecord::Base; end
32
+ Bulker::Pager.each(Item.where(:status => "selling"), 100) do
33
+ # do some process for each item
34
+ end
35
+
36
+ This sample, *Bulker::Pager* fetches 100 items for each sql query, and continues fetching until all records are covered. Block that given to *each* method is called for each record.
37
+
38
+ #### Working with Criteria
39
+
40
+ When you use library other than ActiveRecord for accessing data soruce, you can use *Bulker::Criteria*.
41
+
42
+ require 'bulker'
43
+ data = (1..20).to_a
44
+ criteria = Bulker::Criteria.new data
45
+ criteria.define_each lambda { |values, offset, limit, block|
46
+ values[offset..(offset + limit - 1)].each do |v|
47
+ block.call(v)
48
+ end
49
+ }
50
+ Bulker::Pager.each(criteria, 10) do |v|
51
+ # do some process
52
+ end
53
+
54
+ Wrap your data objects with *Bulker::Criteria*, and define behavior of *each* method through *define_each* using lambda. Then Bulker::Pager can work with the criteria.
55
+
56
+ By default, same *each* implementation for array as above is bundled in *Bulker::Criteria* as *from_array*.
57
+
58
+ criteria = Bulker::Criteria.from_array([1, 2, 3, 4, 5])
59
+
60
+ ### Bulker::Buffer
61
+
62
+ It's easy to understand *Bulker::Buffer* behavior through seeing our RSPEC.
63
+
64
+ require 'bulker'
65
+ result = []
66
+ # create buffer with size = 4
67
+ buffer = Bulker::Buffer.new(4) do |ary|
68
+ result << ary # when buffer filled
69
+ end
70
+ (1..10).each do |i|
71
+ buffer << i
72
+ end
73
+ buffer.flush
74
+ result.should == [
75
+ [1, 2, 3, 4],
76
+ [5, 6, 7, 8],
77
+ [9, 10]
78
+ ]
79
+
80
+ ## Contributing to bulker
81
+
82
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
83
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
84
+ * Fork the project.
85
+ * Start a feature/bugfix branch.
86
+ * Commit and push until you are happy with your contribution.
87
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
88
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
89
+
90
+
91
+ ## License
92
+ bulker is released under the MIT license.
93
+
94
+ ## Copyright
95
+ Copyright (c) 2012 daisuke sugimori.
96
+
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "bulker"
18
+ gem.homepage = "http://github.com/daixque/bulker"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{bulk execution library.}
21
+ gem.description = %Q{bulker is library that privides bulk execution functionality for paging and buffering.}
22
+ gem.email = "daixque@gmail.com"
23
+ gem.authors = ["daixque"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'rdoc/task'
42
+ Rake::RDocTask.new do |rdoc|
43
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+
45
+ rdoc.rdoc_dir = 'rdoc'
46
+ rdoc.title = "bulker #{version}"
47
+ rdoc.rdoc_files.include('README*')
48
+ rdoc.rdoc_files.include('lib/**/*.rb')
49
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/bulker.gemspec ADDED
@@ -0,0 +1,72 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{bulker}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{daixque}]
12
+ s.date = %q{2012-02-05}
13
+ s.description = %q{bulker is library that privides bulk execution functionality for paging and buffering.}
14
+ s.email = %q{daixque@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "README.md"
17
+ ]
18
+ s.files = [
19
+ ".document",
20
+ ".rspec",
21
+ "Gemfile",
22
+ "Gemfile.lock",
23
+ "README.md",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "bulker.gemspec",
27
+ "lib/bulker.rb",
28
+ "lib/bulker/buffer.rb",
29
+ "lib/bulker/criteria.rb",
30
+ "lib/bulker/pager.rb",
31
+ "spec/buffer_spec.rb",
32
+ "spec/criteria_spec.rb",
33
+ "spec/pager_spec.rb",
34
+ "spec/spec_helper.rb"
35
+ ]
36
+ s.homepage = %q{http://github.com/daixque/bulker}
37
+ s.licenses = [%q{MIT}]
38
+ s.require_paths = [%q{lib}]
39
+ s.rubygems_version = %q{1.8.6}
40
+ s.summary = %q{bulk execution library.}
41
+
42
+ if s.respond_to? :specification_version then
43
+ s.specification_version = 3
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
47
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
48
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
49
+ s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
50
+ s.add_development_dependency(%q<rcov>, [">= 0"])
51
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
52
+ s.add_development_dependency(%q<activerecord>, [">= 0"])
53
+ else
54
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
55
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
56
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
57
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
58
+ s.add_dependency(%q<rcov>, [">= 0"])
59
+ s.add_dependency(%q<sqlite3>, [">= 0"])
60
+ s.add_dependency(%q<activerecord>, [">= 0"])
61
+ end
62
+ else
63
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
64
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
65
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
66
+ s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
67
+ s.add_dependency(%q<rcov>, [">= 0"])
68
+ s.add_dependency(%q<sqlite3>, [">= 0"])
69
+ s.add_dependency(%q<activerecord>, [">= 0"])
70
+ end
71
+ end
72
+
data/lib/bulker.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'bulker/buffer'
2
+ require 'bulker/pager'
3
+ require 'bulker/criteria'
4
+
5
+ # *bulker* provides Bulker::Pager and Bulker::Buffer.
6
+ #
7
+ # Bulker::Pager gives you paging functionality to split large number of data to devided segments.
8
+ # When 1000,000 records in your database, and you're going to do some process for each record,
9
+ # Bulker::Pager will help you.
10
+ # It can handle large data very easily such like array with Bulker::Pager#each method.
11
+ #
12
+ # Bulker::Buffer provides simple buffer that enables implimenting bulk insert or bulk upload behavior.
13
+ module Bulker
14
+ end
@@ -0,0 +1,34 @@
1
+ module Bulker
2
+ # Bulker::Buffer provides buffer pool and bulk execution functionality.
3
+ #
4
+ # result = []
5
+ # buffer = Bulker::Buffer.new(4) do |ary|
6
+ # result << ary # when buffer filled
7
+ # end
8
+ # (1..10).each do |i|
9
+ # buffer << i
10
+ # end
11
+ # buffer.flush
12
+ # result #=> [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10]]
13
+ class Buffer
14
+ # +size+ specify size of buffer.
15
+ # +block+ specify callback on filled buffer.
16
+ def initialize(size, &block)
17
+ @size = size
18
+ @buffer = []
19
+ @on_buffered = block
20
+ end
21
+
22
+ # add +obj+ into buffer
23
+ def << (obj)
24
+ @buffer << obj
25
+ flush if @buffer.size == @size
26
+ end
27
+
28
+ # do bulk execution and clear buffer.
29
+ def flush
30
+ @on_buffered.call(@buffer)
31
+ @buffer = []
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,68 @@
1
+ module Bulker
2
+ # Bulker::Criteria provides interface for Bulker::Pager.
3
+ #
4
+ # data = (1..20).to_a
5
+ # criteria = Bulker::Criteria.new data
6
+ # criteria.define_each lambda { |values, offset, limit, block|
7
+ # values[offset..(offset + limit - 1)].each do |v|
8
+ # block.call(v)
9
+ # end
10
+ # }
11
+ # Bulker::Pager.each(criteria, 10) do |v|
12
+ # # do some process
13
+ # end
14
+ class Criteria
15
+
16
+ class << self
17
+ # create criteria from +ary+
18
+ def from_array(ary)
19
+ criteria = Criteria.new ary
20
+ criteria.define_each lambda { |values, offset, limit, block|
21
+ values[offset..(offset + limit - 1)].each do |v|
22
+ block.call(v)
23
+ end
24
+ }
25
+ end
26
+ end
27
+
28
+ attr_accessor :values
29
+
30
+ # create criteria with +values+.
31
+ # defaults:
32
+ # - +offset+ : 0
33
+ # - +limit+ : 10
34
+ def initialize(values)
35
+ @values = values
36
+ @offset = 0
37
+ @limit = 10
38
+ end
39
+
40
+ # set +offset+ to specify offset from head of data.
41
+ def offset(offset)
42
+ @offset = offset
43
+ self
44
+ end
45
+
46
+ # set +limit+ to specify numbers to fetch data.
47
+ def limit(limit)
48
+ @limit = limit
49
+ self
50
+ end
51
+
52
+ # get size of +values+.
53
+ def count
54
+ @values.size
55
+ end
56
+
57
+ # set implementation of +each+ by lambda.
58
+ def define_each(each_proc)
59
+ @each_proc = each_proc
60
+ self
61
+ end
62
+
63
+ # do +block+ for each data
64
+ def each(&block)
65
+ @each_proc.call(values, @offset, @limit, block)
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,41 @@
1
+ module Bulker
2
+ # Bulker::Pager provides paging functionality to split large number of data to devided segments.
3
+ # It can handle large data very easily such like array with each method.
4
+ #
5
+ # Bulker::Pager is especially designed for ActiveRecord.
6
+ #
7
+ # class Item < ActiveRecord::Base; end
8
+ # Bulker::Pager.each(Item.where(:status => "selling"), 100) do
9
+ # # do some process for each item
10
+ # end
11
+ #
12
+ # For other data source, Bulker::Criteria provides interface for Bulker::Pager.
13
+ class Pager
14
+ class << self
15
+ # access to every +cursor+ data with fetch limitation +limit+.
16
+ def each(cursor, limit, &block)
17
+ pager = Pager.new cursor, limit
18
+ pager.each { |page| block.call(page) }
19
+ end
20
+ end
21
+
22
+ # create pager from +cursor+ data and limitaion +limit+
23
+ def initialize(cursor, limit)
24
+ raise RangeError.new("limit must be positive number, but #{limit}") if limit <= 0
25
+ @cursor = cursor
26
+ @limit = limit
27
+ end
28
+
29
+ # access to every data.
30
+ def each(&block)
31
+ size = @cursor.count
32
+ pages = size / @limit + (size % @limit == 0 ? 0 : 1)
33
+ pages.times do |i|
34
+ offset = i * @limit
35
+ @cursor.offset(offset).limit(@limit).each do |row|
36
+ yield row
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Bulker" do
4
+ it "can buffer" do
5
+ result = []
6
+ buffer = Bulker::Buffer.new(4) do |ary|
7
+ result << ary
8
+ end
9
+ (1..10).each do |i|
10
+ buffer << i
11
+ end
12
+ buffer.flush
13
+
14
+ result.should == [
15
+ [1, 2, 3, 4],
16
+ [5, 6, 7, 8],
17
+ [9, 10]
18
+ ]
19
+ end
20
+ end
@@ -0,0 +1,31 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Criteria" do
4
+ it "create array criteria with defaut offset and limit" do
5
+ criteria = Bulker::Criteria.new (1..20).to_a
6
+ criteria.define_each lambda { |values, offset, limit, block|
7
+ values[offset..(offset + limit - 1)].each do |v|
8
+ block.call(v)
9
+ end
10
+ }
11
+ result = []
12
+ criteria.each do |v|
13
+ result << v
14
+ end
15
+ result.should == (1..10).to_a
16
+ end
17
+
18
+ it "create array criteria with custom offset and limit" do
19
+ criteria = Bulker::Criteria.new (1..20).to_a
20
+ criteria.define_each lambda { |values, offset, limit, block|
21
+ values[offset..(offset + limit - 1)].each do |v|
22
+ block.call(v)
23
+ end
24
+ }
25
+ result = []
26
+ criteria.offset(3).limit(4).each do |v|
27
+ result << v
28
+ end
29
+ result.should == [4, 5, 6, 7]
30
+ end
31
+ end
@@ -0,0 +1,70 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'rubygems'
3
+ require 'sqlite3'
4
+ require 'active_record'
5
+ require 'logger'
6
+ require 'Fileutils'
7
+
8
+ describe "Pager" do
9
+ DATABASE_CONFIG = {
10
+ :adapter => "sqlite3",
11
+ :database => ":memory:",
12
+ :timeout => 5000
13
+ }
14
+ class TestValue < ActiveRecord::Base; end
15
+ def insert_test_data(size)
16
+ (1..size).each do |i|
17
+ TestValue.create(:data => i.hash.to_s)
18
+ end
19
+ end
20
+ before do
21
+ ActiveRecord::Base.establish_connection DATABASE_CONFIG
22
+ ActiveRecord::Base.connection.execute "
23
+ create table if not exists test_values(
24
+ id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
25
+ data TEXT)"
26
+
27
+ @size = 20
28
+ insert_test_data(@size)
29
+ end
30
+
31
+ describe "Pager#each" do
32
+ it "can paging" do
33
+ TestValue.all.count.should == @size
34
+ #TestValue.should_receive(:offset).exactly(4)
35
+ pager = Bulker::Pager.new(TestValue, 5)
36
+ result = []
37
+ pager.each do |value|
38
+ result << value
39
+ end
40
+ result.map {|v| v.id}.should == (1..@size).to_a
41
+ end
42
+
43
+ it "raise RangeError when not positive limit given" do
44
+ lambda {
45
+ pager = Bulker::Pager.new(TestValue, 0)
46
+ }.should raise_error(RangeError)
47
+ end
48
+ end
49
+
50
+ describe "Pager.each" do
51
+ it "can paging" do
52
+ result = []
53
+ Bulker::Pager.each(TestValue, 3) do |value|
54
+ result << value
55
+ end
56
+ result.map {|v| v.id}.should == (1..@size).to_a
57
+ end
58
+ end
59
+
60
+ describe "Pager with Criteria" do
61
+ it "retrieve pages from array with criteria" do
62
+ criteria = Bulker::Criteria.from_array (1..10).to_a
63
+ result = []
64
+ Bulker::Pager.each(criteria, 3) do |v|
65
+ result << v
66
+ end
67
+ result.should == (1..10).to_a
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,12 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'bulker'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bulker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - daixque
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-05 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &2154111900 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.8.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2154111900
25
+ - !ruby/object:Gem::Dependency
26
+ name: rdoc
27
+ requirement: &2154111420 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '3.12'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2154111420
36
+ - !ruby/object:Gem::Dependency
37
+ name: bundler
38
+ requirement: &2154110880 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 1.0.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2154110880
47
+ - !ruby/object:Gem::Dependency
48
+ name: jeweler
49
+ requirement: &2154110400 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.8.3
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *2154110400
58
+ - !ruby/object:Gem::Dependency
59
+ name: rcov
60
+ requirement: &2154109920 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *2154109920
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: &2154109380 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *2154109380
80
+ - !ruby/object:Gem::Dependency
81
+ name: activerecord
82
+ requirement: &2154108860 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *2154108860
91
+ description: bulker is library that privides bulk execution functionality for paging
92
+ and buffering.
93
+ email: daixque@gmail.com
94
+ executables: []
95
+ extensions: []
96
+ extra_rdoc_files:
97
+ - README.md
98
+ files:
99
+ - .document
100
+ - .rspec
101
+ - Gemfile
102
+ - Gemfile.lock
103
+ - README.md
104
+ - Rakefile
105
+ - VERSION
106
+ - bulker.gemspec
107
+ - lib/bulker.rb
108
+ - lib/bulker/buffer.rb
109
+ - lib/bulker/criteria.rb
110
+ - lib/bulker/pager.rb
111
+ - spec/buffer_spec.rb
112
+ - spec/criteria_spec.rb
113
+ - spec/pager_spec.rb
114
+ - spec/spec_helper.rb
115
+ homepage: http://github.com/daixque/bulker
116
+ licenses:
117
+ - MIT
118
+ post_install_message:
119
+ rdoc_options: []
120
+ require_paths:
121
+ - lib
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ! '>='
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ segments:
129
+ - 0
130
+ hash: -4368483780974676083
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 1.8.6
140
+ signing_key:
141
+ specification_version: 3
142
+ summary: bulk execution library.
143
+ test_files: []