simple_processor 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1a39f18fd52c0afb7f095a193f8d7c06590b0083
4
+ data.tar.gz: 6cf22b3c2f575a1d8b98ec7c11259461ffe963f1
5
+ SHA512:
6
+ metadata.gz: c657f331d714673c049953d5650279cc2fc752fffd40bf92bac217234c2dacb6e1ba48d24fd64902cb5aa09f8b3ce0520468626d2496b62ff67e593328447f35
7
+ data.tar.gz: 332b386483b7fe2cf1221485785bc0151b84f21f49e5aee985d39e04b4caa4135bf6cd7f266f1b4240b31b1db38f1e9437111437ee61103f8c04eae0ee376e29
data/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
23
+ bundler_stubs
24
+ spec/support/dummy_app/config/database.yml
data/.pryrc ADDED
@@ -0,0 +1,6 @@
1
+ if defined?(PryByebug)
2
+ Pry.commands.alias_command 'c', 'continue'
3
+ Pry.commands.alias_command 's', 'step'
4
+ Pry.commands.alias_command 'n', 'next'
5
+ Pry.commands.alias_command 'f', 'finish'
6
+ end
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ simple_processor
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.5
data/.travis.yml ADDED
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.5
4
+ - 1.9.3
5
+ before_script:
6
+ - export DUMMY_APP_PATH='spec/support/dummy_app'
7
+ - psql -c 'create database simple_processor_test;' -U postgres
8
+ - cp $DUMMY_APP_PATH/config/database.yml.travis $DUMMY_APP_PATH/config/database.yml
9
+ script:
10
+ - export TRAVIS=true
11
+ - export RACK_ENV=test
12
+ - bundle exec rake db:migrate --trace
13
+ - bundle exec rake db:test:prepare
14
+ - bundle exec rake
15
+ addons:
16
+ postgresql: "9.3"
17
+ addons:
18
+ code_climate:
19
+ repo_token: 9351e5982d9f71080d0a38cf7bc146b4ec56255fcdc2859a2189c8b274010a9a
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in simple_processor.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 David Saenz Tagarro
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,93 @@
1
+ [![Gem Version](https://badge.fury.io/rb/simple_processor.svg)](http://badge.fury.io/rb/simple_processor)
2
+ [![Build Status](https://travis-ci.org/dsaenztagarro/simple_processor.png)](https://travis-ci.org/dsaenztagarro/simple_processor)
3
+ [![Code Climate](https://codeclimate.com/github/dsaenztagarro/simple_processor/badges/gpa.svg)](https://codeclimate.com/github/dsaenztagarro/simple_processor)
4
+ [![Coverage Status](https://coveralls.io/repos/dsaenztagarro/simple_processor/badge.png?branch=master)](https://coveralls.io/r/dsaenztagarro/simple_processor?branch=master)
5
+ [![Dependency Status](https://gemnasium.com/dsaenztagarro/simple_processor.svg)](https://gemnasium.com/dsaenztagarro/simple_processor)
6
+
7
+ # SimpleProcessor
8
+
9
+ Rails data batch migrations made easy.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'simple_processor'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ ```shell
22
+ bundle
23
+ ```
24
+
25
+ Or install it yourself as:
26
+
27
+ ```shell
28
+ gem install simple_processor
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ Example of use:
34
+
35
+ ```ruby
36
+ # lib/my_package/processors/concept_processor.rb
37
+ module MyPackage
38
+ module Processors
39
+ class ConceptProcessor < SimpleProcessor::BatchProcessor
40
+ processor_handlers :process1_handler, :process2_handler
41
+ processor_model Concept
42
+ end
43
+ end
44
+ end
45
+
46
+ # lib/my_package/handlers/concept_handler.rb
47
+ module MyPackage
48
+ module Handlers
49
+ class Process1Handler
50
+ def apply(model)
51
+ # Your business logic!
52
+ end
53
+ end
54
+
55
+ class Process2Handler
56
+ def apply(model)
57
+ # Your business logic!
58
+ end
59
+ end
60
+ end
61
+ end
62
+ ```
63
+
64
+
65
+ ```ruby
66
+ # lib/tasks/update_concepts.rake (Option 1: rake task)
67
+ task :update_concepts => :environment do
68
+ MyPackage::Processors::ConceptProcessor.new.run
69
+ end
70
+
71
+ # db/data/XXXXXXX_update_concepts.rb (Option 2: data_migration)
72
+ class DestroyDuplicateCrops < ActiveRecord::Migration
73
+ def self.up
74
+ ::MyPackage::Processors::ConceptProcessor.new(ar_migration: self).run
75
+ end
76
+ def self.down
77
+ raise IrreversibleMigration
78
+ end
79
+ end
80
+ ```
81
+
82
+ ## Contributing
83
+
84
+ 1. Fork it ( https://github.com/dsaenztagarro/simple_processor/fork )
85
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
86
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
87
+ 4. Push to the branch (`git push origin my-new-feature`)
88
+ 5. Create a new Pull Request
89
+
90
+ ## Thanks
91
+
92
+ Thanks to [Hola Internet](https://github.com/holadev) for let me right this kind
93
+ of tools.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rubocop/rake_task'
3
+ require 'rspec/core/rake_task'
4
+ require 'sinatra/activerecord/rake'
5
+
6
+ require 'active_record'
7
+ require 'yaml'
8
+ connection_info = YAML.load_file("spec/support/dummy_app/config/database.yml")["test"]
9
+ ActiveRecord::Base.establish_connection(connection_info)
10
+
11
+ RuboCop::RakeTask.new do |task|
12
+ task.requires << 'rubocop-rspec'
13
+ end
14
+
15
+ RSpec::Core::RakeTask.new :specs do |task|
16
+ task.pattern = Dir['spec/**/*_spec.rb']
17
+ end
18
+
19
+ task default: ['specs']
20
+
@@ -0,0 +1,7 @@
1
+ class CreateConcepts < ActiveRecord::Migration
2
+ def change
3
+ create_table :concepts do |t|
4
+ t.string :title
5
+ end
6
+ end
7
+ end
data/db/schema.rb ADDED
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended that you check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(version: 20141210115323) do
15
+
16
+ # These are extensions that must be enabled in order to support this database
17
+ enable_extension "plpgsql"
18
+
19
+ create_table "concepts", force: true do |t|
20
+ t.string "title"
21
+ end
22
+
23
+ end
@@ -0,0 +1,5 @@
1
+ require_relative 'simple_processor/version'
2
+ require_relative 'simple_processor/batch_processor'
3
+
4
+ module SimpleProcessor
5
+ end
@@ -0,0 +1,88 @@
1
+ require 'ruby-progressbar'
2
+
3
+ module SimpleProcessor
4
+ # Class for processing records in batches
5
+ class BatchProcessor
6
+ def self.processor_handlers(*handlers_args)
7
+ define_method :handlers do
8
+ @handlers ||= handlers_args.map do |handler|
9
+ handlers_module.const_get(handler.to_s.camelize).new
10
+ end
11
+ end
12
+ end
13
+
14
+ def self.processor_model(klass)
15
+ define_method :model_klass do
16
+ klass
17
+ end
18
+ end
19
+
20
+ # @param [Hash] opts The options to create a processor
21
+ # @option opts [ActiveRecord::Migration] :ar_migration The active record
22
+ # migration instantiating the processor. Allows additional console info
23
+ def initialize(opts = {})
24
+ @ar_migration = opts[:ar_migration]
25
+ end
26
+
27
+ # Executes the batch processing over all stories
28
+ def run
29
+ init_counters
30
+ @bar = ::ProgressBar.create(total: model_klass.count,
31
+ format: '%t: |%w| [%E]')
32
+ model_klass.find_in_batches { |model| process_batch(model) }
33
+ show_resume
34
+ end
35
+
36
+ private
37
+
38
+ def handlers_module
39
+ klass = self.class
40
+ path_list = klass.to_a.each_with_index.map do |x, i|
41
+ x if i < klass.index_processors_module
42
+ end
43
+ path_list.compact.join('::').concat('::Handlers').constantize
44
+ end
45
+
46
+ def self.index_processors_module
47
+ to_a.find_index('Processors')
48
+ end
49
+
50
+ def self.to_a
51
+ to_s.split('::')
52
+ end
53
+
54
+ # Process a batch of models
55
+ # @param stories [Array<Story>] array of stories
56
+ def process_batch(models)
57
+ models.each do |model|
58
+ @bar.increment
59
+ process(model)
60
+ end
61
+ end
62
+
63
+ # Process a model
64
+ # @param model [Story] story The model instance
65
+ def process(model)
66
+ handlers.each { |handler| handler.apply(model) }
67
+ @success += 1
68
+ rescue => error
69
+ say "ERROR: Story ##{model.id} #{error.message}"
70
+ @errors += 1
71
+ end
72
+
73
+ def show_resume
74
+ say "#{@success} stories updated. #{@errors} errors"
75
+ end
76
+
77
+ # Shows a message in console during migration execution
78
+ # @param message [String]
79
+ def say(message)
80
+ @ar_migration.say message if @ar_migration
81
+ end
82
+
83
+ def init_counters
84
+ @success = 0
85
+ @errors = 0
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,3 @@
1
+ module SimpleProcessor
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'simple_processor/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'simple_processor'
8
+ spec.version = SimpleProcessor::VERSION
9
+ spec.authors = ['David Saenz Tagarro']
10
+ spec.email = ['david.saenz.tagarro@gmail.com']
11
+ spec.summary = %q{Rails data batch migrations made easy.}
12
+ spec.description = %q{Rails data batch migrations made easy.}
13
+ spec.homepage = ''
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_runtime_dependency 'ruby-progressbar'
22
+
23
+ spec.add_development_dependency 'activerecord'
24
+ spec.add_development_dependency 'bundler', '~> 1.6'
25
+ spec.add_development_dependency 'cane'
26
+ spec.add_development_dependency 'codeclimate-test-reporter'
27
+ spec.add_development_dependency 'coveralls'
28
+ spec.add_development_dependency 'database_cleaner'
29
+ spec.add_development_dependency 'factory_girl'
30
+ spec.add_development_dependency 'pg'
31
+ spec.add_development_dependency 'pry'
32
+ spec.add_development_dependency 'pry-byebug'
33
+ spec.add_development_dependency 'rake'
34
+ spec.add_development_dependency 'reek'
35
+ spec.add_development_dependency 'rspec'
36
+ spec.add_development_dependency 'rubocop'
37
+ spec.add_development_dependency 'sinatra'
38
+ spec.add_development_dependency 'sinatra-activerecord'
39
+ spec.add_development_dependency 'simplecov'
40
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'SimpleProcessor::BatchProcessor' do
4
+
5
+ describe '#run' do
6
+ let!(:models) { create_list :concept, 3 }
7
+
8
+ it 'applies handlers on all models' do
9
+ handlers = [Handlers::Process1Handler, Handlers::Process2Handler]
10
+ handlers.product(models).each do |handler, model|
11
+ expect_any_instance_of(handler).to receive(:apply).with(model)
12
+ end
13
+ Processors::ConceptProcessor.new.run
14
+ end
15
+
16
+ it 'raises an error on unknown handler class' do
17
+ expect {
18
+ Hola::Processors::InvalidHandlerProcessor.new.run
19
+ }.to raise_error
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ require 'pry'
2
+ require_relative 'support/coveralls'
3
+ require_relative 'support/active_record'
4
+ require_relative 'support/database_cleaner'
5
+
6
+ Dir["#{File.dirname(__FILE__)}/../lib/**/*.rb"].each { |path| require path }
7
+
8
+ require_relative 'support/dummy_app'
9
+ require_relative 'support/factory_girl'
10
+
11
+ RSpec.configure do |config|
12
+ config.color = true
13
+ config.formatter = 'documentation'
14
+ # config.include RSpecMixin
15
+ end
@@ -0,0 +1,14 @@
1
+ require 'active_record'
2
+ require 'yaml'
3
+
4
+ connection_info = YAML.load_file("spec/support/dummy_app/config/database.yml")["test"]
5
+ ActiveRecord::Base.establish_connection(connection_info)
6
+
7
+ RSpec.configure do |config|
8
+ config.around do |example|
9
+ ActiveRecord::Base.transaction do
10
+ example.run
11
+ raise ActiveRecord::Rollback
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ if ENV['TRAVIS']
2
+ require 'codeclimate-test-reporter'
3
+ CodeClimate::TestReporter.start
4
+
5
+ require 'simplecov'
6
+ require 'coveralls'
7
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ Coveralls::SimpleCov::Formatter
10
+ ]
11
+ SimpleCov.start do
12
+ add_filter '.bundle'
13
+ add_filter 'spec'
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ require 'database_cleaner'
2
+ require 'factory_girl'
3
+
4
+ RSpec.configure do |config|
5
+ config.before(:suite) do
6
+ FactoryGirl.lint
7
+ DatabaseCleaner.strategy = :transaction
8
+ DatabaseCleaner.clean_with(:truncation)
9
+ end
10
+
11
+ config.before(:each) do
12
+ DatabaseCleaner.strategy = :transaction
13
+ end
14
+
15
+ config.before(:each, :js => true) do
16
+ DatabaseCleaner.strategy = :truncation
17
+ end
18
+
19
+ config.before(:each) do
20
+ DatabaseCleaner.start
21
+ end
22
+
23
+ config.after(:each) do
24
+ DatabaseCleaner.clean
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ dummy_app_path = "#{File.dirname(__FILE__)}/dummy_app"
2
+
3
+ %w(app lib/handlers lib/processors lib/hola/processors).each do |folder|
4
+ Dir["#{dummy_app_path}/#{folder}/**/*.rb"].each { |path| require path }
5
+ end
@@ -0,0 +1,2 @@
1
+ class Concept < ActiveRecord::Base
2
+ end
@@ -0,0 +1,10 @@
1
+ development: &default
2
+ adapter: postgresql
3
+ database: simple_processor_development
4
+ username: development
5
+ password: development
6
+ host: localhost
7
+
8
+ test:
9
+ <<: *default
10
+ database: simple_processor_test
@@ -0,0 +1,5 @@
1
+ test:
2
+ adapter: postgresql
3
+ database: simple_processor_test
4
+ username: postgres
5
+ host: localhost
@@ -0,0 +1,5 @@
1
+ FactoryGirl.define do
2
+ factory :concept do
3
+ sequence(:title) { |n| "Concept #{n}" }
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module Handlers
2
+ class Process1Handler
3
+ def apply(model)
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module Handlers
2
+ class Process2Handler
3
+ def apply(model)
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require_relative '../../../app/models/concept'
2
+
3
+ module Hola
4
+ module Processors
5
+ class ConceptProcessor < ::SimpleProcessor::BatchProcessor
6
+ processor_handlers :process1_handler, :process2_handler
7
+ processor_model Concept
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../app/models/concept'
2
+
3
+ module Processors
4
+ class ConceptProcessor < ::SimpleProcessor::BatchProcessor
5
+ processor_handlers :process1_handler, :process2_handler
6
+ processor_model Concept
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require_relative '../../app/models/concept'
2
+
3
+ module Processors
4
+ class InvalidHandlerProcessor < ::SimpleProcessor::BatchProcessor
5
+ processor_handlers :process1_handler, :unknown_handler
6
+ processor_model Concept
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'factory_girl'
2
+
3
+ FactoryGirl.definition_file_paths = %w{./spec/support/dummy_app/factories}
4
+ FactoryGirl.find_definitions
5
+
6
+ RSpec.configure do |config|
7
+ config.include FactoryGirl::Syntax::Methods
8
+ end
metadata ADDED
@@ -0,0 +1,345 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_processor
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - David Saenz Tagarro
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby-progressbar
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: cane
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: codeclimate-test-reporter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: database_cleaner
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: factory_girl
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pg
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-byebug
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rake
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: reek
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rspec
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubocop
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - ">="
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ">="
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
223
+ - !ruby/object:Gem::Dependency
224
+ name: sinatra
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: sinatra-activerecord
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
251
+ - !ruby/object:Gem::Dependency
252
+ name: simplecov
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - ">="
256
+ - !ruby/object:Gem::Version
257
+ version: '0'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - ">="
263
+ - !ruby/object:Gem::Version
264
+ version: '0'
265
+ description: Rails data batch migrations made easy.
266
+ email:
267
+ - david.saenz.tagarro@gmail.com
268
+ executables: []
269
+ extensions: []
270
+ extra_rdoc_files: []
271
+ files:
272
+ - ".gitignore"
273
+ - ".pryrc"
274
+ - ".ruby-gemset"
275
+ - ".ruby-version"
276
+ - ".travis.yml"
277
+ - Gemfile
278
+ - LICENSE.txt
279
+ - README.md
280
+ - Rakefile
281
+ - db/migrate/20141210115323_create_concepts.rb
282
+ - db/schema.rb
283
+ - lib/simple_processor.rb
284
+ - lib/simple_processor/batch_processor.rb
285
+ - lib/simple_processor/version.rb
286
+ - simple_processor.gemspec
287
+ - spec/batch_processor_spec.rb
288
+ - spec/spec_helper.rb
289
+ - spec/support/active_record.rb
290
+ - spec/support/coveralls.rb
291
+ - spec/support/database_cleaner.rb
292
+ - spec/support/dummy_app.rb
293
+ - spec/support/dummy_app/app/models/concept.rb
294
+ - spec/support/dummy_app/config/database.sample.yml
295
+ - spec/support/dummy_app/config/database.yml
296
+ - spec/support/dummy_app/config/database.yml.travis
297
+ - spec/support/dummy_app/factories/factories.rb
298
+ - spec/support/dummy_app/lib/handlers/process1_handler.rb
299
+ - spec/support/dummy_app/lib/handlers/process2_handler.rb
300
+ - spec/support/dummy_app/lib/hola/processors/concept_processor.rb
301
+ - spec/support/dummy_app/lib/processors/concept_processor.rb
302
+ - spec/support/dummy_app/lib/processors/invalid_handler_processor.rb
303
+ - spec/support/factory_girl.rb
304
+ homepage: ''
305
+ licenses:
306
+ - MIT
307
+ metadata: {}
308
+ post_install_message:
309
+ rdoc_options: []
310
+ require_paths:
311
+ - lib
312
+ required_ruby_version: !ruby/object:Gem::Requirement
313
+ requirements:
314
+ - - ">="
315
+ - !ruby/object:Gem::Version
316
+ version: '0'
317
+ required_rubygems_version: !ruby/object:Gem::Requirement
318
+ requirements:
319
+ - - ">="
320
+ - !ruby/object:Gem::Version
321
+ version: '0'
322
+ requirements: []
323
+ rubyforge_project:
324
+ rubygems_version: 2.4.3
325
+ signing_key:
326
+ specification_version: 4
327
+ summary: Rails data batch migrations made easy.
328
+ test_files:
329
+ - spec/batch_processor_spec.rb
330
+ - spec/spec_helper.rb
331
+ - spec/support/active_record.rb
332
+ - spec/support/coveralls.rb
333
+ - spec/support/database_cleaner.rb
334
+ - spec/support/dummy_app.rb
335
+ - spec/support/dummy_app/app/models/concept.rb
336
+ - spec/support/dummy_app/config/database.sample.yml
337
+ - spec/support/dummy_app/config/database.yml
338
+ - spec/support/dummy_app/config/database.yml.travis
339
+ - spec/support/dummy_app/factories/factories.rb
340
+ - spec/support/dummy_app/lib/handlers/process1_handler.rb
341
+ - spec/support/dummy_app/lib/handlers/process2_handler.rb
342
+ - spec/support/dummy_app/lib/hola/processors/concept_processor.rb
343
+ - spec/support/dummy_app/lib/processors/concept_processor.rb
344
+ - spec/support/dummy_app/lib/processors/invalid_handler_processor.rb
345
+ - spec/support/factory_girl.rb