drudgery 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.
- data/README.md +80 -31
- data/lib/drudgery/extractors/csv_extractor.rb +8 -0
- data/lib/drudgery/job.rb +21 -33
- data/lib/drudgery/loaders/csv_loader.rb +8 -0
- data/lib/drudgery/version.rb +1 -1
- data/lib/drudgery.rb +15 -9
- data/spec/drudgery/extractors/active_record_extractor_spec.rb +39 -82
- data/spec/drudgery/extractors/csv_extractor_spec.rb +55 -87
- data/spec/drudgery/extractors/sqlite3_extractor_spec.rb +116 -171
- data/spec/drudgery/job_spec.rb +224 -321
- data/spec/drudgery/loaders/active_record_import_loader_spec.rb +30 -54
- data/spec/drudgery/loaders/active_record_loader_spec.rb +30 -60
- data/spec/drudgery/loaders/csv_loader_spec.rb +59 -70
- data/spec/drudgery/loaders/sqlite3_loader_spec.rb +37 -72
- data/spec/drudgery/manager_spec.rb +28 -24
- data/spec/drudgery/transformer_spec.rb +35 -41
- data/spec/drudgery_spec.rb +77 -48
- data/spec/spec_helper.rb +4 -3
- metadata +58 -43
- data/lib/drudgery/job_logger.rb +0 -21
- data/lib/drudgery/job_progress.rb +0 -11
- data/spec/drudgery/job_logger_spec.rb +0 -59
- data/spec/drudgery/job_progress_spec.rb +0 -19
data/spec/drudgery_spec.rb
CHANGED
@@ -1,74 +1,103 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
describe
|
5
|
-
|
6
|
-
Drudgery.
|
3
|
+
module Drudgery
|
4
|
+
describe Drudgery do
|
5
|
+
before do
|
6
|
+
Drudgery.listeners.clear
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
after do
|
10
|
+
Drudgery.listeners.clear
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '.subscribe' do
|
14
|
+
it 'subscribes listener for event' do
|
15
|
+
block = proc { |job| 1 + 1 }
|
16
|
+
Drudgery.subscribe(:before_job, &block)
|
14
17
|
|
15
|
-
Drudgery.
|
18
|
+
Drudgery.listeners[:before_job].must_equal [block]
|
16
19
|
end
|
17
|
-
end
|
18
20
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
Drudgery.
|
21
|
+
it 'supports subscription of multiple listeners for a single event' do
|
22
|
+
block1 = proc { |job| 1 + 1 }
|
23
|
+
block2 = proc { |job| 2 + 2 }
|
24
|
+
Drudgery.subscribe(:before_job, &block1)
|
25
|
+
Drudgery.subscribe(:before_job, &block2)
|
24
26
|
|
25
|
-
Drudgery.
|
27
|
+
Drudgery.listeners[:before_job].must_equal [block1, block2]
|
26
28
|
end
|
27
29
|
end
|
28
|
-
end
|
29
|
-
end
|
30
30
|
|
31
|
-
describe
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
describe '.unsubscribe' do
|
32
|
+
before do
|
33
|
+
block1 = proc { |job| 1 + 1 }
|
34
|
+
block2 = proc { |job| 2 + 2 }
|
35
|
+
Drudgery.subscribe(:before_job, &block1)
|
36
|
+
Drudgery.subscribe(:before_job, &block2)
|
37
|
+
end
|
36
38
|
|
37
|
-
|
38
|
-
|
39
|
+
it 'unsubscribes all listeners for event' do
|
40
|
+
Drudgery.unsubscribe(:before_job)
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
-
Drudgery::Extractors.instantiate(:active_record, model)
|
42
|
+
Drudgery.listeners[:before_job].must_be_empty
|
43
|
+
end
|
43
44
|
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
describe '.notify' do
|
47
|
+
it 'notifies all listeners with given arguments for event' do
|
48
|
+
Drudgery.subscribe(:before_job) { |r| r[:x] = 1 + 1 }
|
49
|
+
|
50
|
+
result = {}
|
51
|
+
|
52
|
+
Drudgery.notify(:before_job, result)
|
53
|
+
|
54
|
+
result[:x].must_equal 2
|
55
|
+
end
|
48
56
|
end
|
49
57
|
end
|
50
|
-
end
|
51
58
|
|
52
|
-
describe
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
59
|
+
describe Extractors do
|
60
|
+
describe '.instantiate' do
|
61
|
+
it 'initializes extractor of type with args' do
|
62
|
+
Extractors::CSVExtractor.expects(:new).with('file.csv', :col_sep => '|')
|
63
|
+
Extractors.instantiate(:csv, 'file.csv', :col_sep => '|')
|
57
64
|
|
58
|
-
|
59
|
-
|
65
|
+
Extractors::SQLite3Extractor.expects(:new).with('db.sqlite3', 'tablename')
|
66
|
+
Extractors.instantiate(:sqlite3, 'db.sqlite3', 'tablename')
|
60
67
|
|
61
|
-
|
62
|
-
|
63
|
-
|
68
|
+
model = stub('model')
|
69
|
+
Extractors::ActiveRecordExtractor.expects(:new).with(model)
|
70
|
+
Extractors.instantiate(:active_record, model)
|
71
|
+
end
|
64
72
|
|
65
|
-
|
66
|
-
|
73
|
+
it 'returns an extractor' do
|
74
|
+
extractor = Extractors.instantiate(:csv, 'file.csv')
|
75
|
+
extractor.must_be_kind_of Extractors::CSVExtractor
|
76
|
+
end
|
67
77
|
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe Loaders do
|
81
|
+
describe '.instantiate' do
|
82
|
+
it 'initializes loader of type with args' do
|
83
|
+
Loaders::CSVLoader.expects(:new).with('file.csv', :col_sep => '|')
|
84
|
+
Loaders.instantiate(:csv, 'file.csv', :col_sep => '|')
|
68
85
|
|
69
|
-
|
70
|
-
|
71
|
-
|
86
|
+
Loaders::SQLite3Loader.expects(:new).with('db.sqlite3', 'tablename')
|
87
|
+
Loaders.instantiate(:sqlite3, 'db.sqlite3', 'tablename')
|
88
|
+
|
89
|
+
model = stub('model')
|
90
|
+
Loaders::ActiveRecordLoader.expects(:new).with(model)
|
91
|
+
Loaders.instantiate(:active_record, model)
|
92
|
+
|
93
|
+
Loaders::ActiveRecordImportLoader.expects(:new).with(model)
|
94
|
+
Loaders.instantiate(:active_record_import, model)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'returns an loader' do
|
98
|
+
loader = Loaders.instantiate(:csv, 'file.csv')
|
99
|
+
loader.must_be_kind_of Loaders::CSVLoader
|
100
|
+
end
|
72
101
|
end
|
73
102
|
end
|
74
103
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drudgery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,33 +9,27 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement:
|
15
|
+
name: rake
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '0
|
22
|
-
type: :
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: rake
|
27
|
-
requirement: &70214544960940 !ruby/object:Gem::Requirement
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
25
|
none: false
|
29
26
|
requirements:
|
30
27
|
- - ! '>='
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: '0'
|
33
|
-
type: :development
|
34
|
-
prerelease: false
|
35
|
-
version_requirements: *70214544960940
|
36
30
|
- !ruby/object:Gem::Dependency
|
37
31
|
name: bundler
|
38
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
39
33
|
none: false
|
40
34
|
requirements:
|
41
35
|
- - ~>
|
@@ -43,21 +37,31 @@ dependencies:
|
|
43
37
|
version: '1.1'
|
44
38
|
type: :development
|
45
39
|
prerelease: false
|
46
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '1.1'
|
47
46
|
- !ruby/object:Gem::Dependency
|
48
47
|
name: mocha
|
49
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
50
49
|
none: false
|
51
50
|
requirements:
|
52
51
|
- - ~>
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0.
|
53
|
+
version: '0.12'
|
55
54
|
type: :development
|
56
55
|
prerelease: false
|
57
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.12'
|
58
62
|
- !ruby/object:Gem::Dependency
|
59
63
|
name: simplecov
|
60
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
61
65
|
none: false
|
62
66
|
requirements:
|
63
67
|
- - ~>
|
@@ -65,21 +69,15 @@ dependencies:
|
|
65
69
|
version: '0.6'
|
66
70
|
type: :development
|
67
71
|
prerelease: false
|
68
|
-
version_requirements:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: turn
|
71
|
-
requirement: &70214544958120 !ruby/object:Gem::Requirement
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
72
73
|
none: false
|
73
74
|
requirements:
|
74
75
|
- - ~>
|
75
76
|
- !ruby/object:Gem::Version
|
76
|
-
version: '0.
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: *70214544958120
|
77
|
+
version: '0.6'
|
80
78
|
- !ruby/object:Gem::Dependency
|
81
79
|
name: guard-minitest
|
82
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
83
81
|
none: false
|
84
82
|
requirements:
|
85
83
|
- - ~>
|
@@ -87,10 +85,15 @@ dependencies:
|
|
87
85
|
version: '0.5'
|
88
86
|
type: :development
|
89
87
|
prerelease: false
|
90
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0.5'
|
91
94
|
- !ruby/object:Gem::Dependency
|
92
95
|
name: activerecord
|
93
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
94
97
|
none: false
|
95
98
|
requirements:
|
96
99
|
- - ~>
|
@@ -98,10 +101,15 @@ dependencies:
|
|
98
101
|
version: '3.0'
|
99
102
|
type: :development
|
100
103
|
prerelease: false
|
101
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '3.0'
|
102
110
|
- !ruby/object:Gem::Dependency
|
103
111
|
name: activerecord-import
|
104
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
105
113
|
none: false
|
106
114
|
requirements:
|
107
115
|
- - ~>
|
@@ -109,10 +117,15 @@ dependencies:
|
|
109
117
|
version: 0.2.9
|
110
118
|
type: :development
|
111
119
|
prerelease: false
|
112
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.2.9
|
113
126
|
- !ruby/object:Gem::Dependency
|
114
127
|
name: sqlite3
|
115
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
116
129
|
none: false
|
117
130
|
requirements:
|
118
131
|
- - ~>
|
@@ -120,7 +133,12 @@ dependencies:
|
|
120
133
|
version: '1.3'
|
121
134
|
type: :development
|
122
135
|
prerelease: false
|
123
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '1.3'
|
124
142
|
description: A simple ETL library that supports CSV, SQLite3, and ActiveRecord sources
|
125
143
|
and destinations.
|
126
144
|
email:
|
@@ -134,8 +152,6 @@ files:
|
|
134
152
|
- lib/drudgery/extractors/csv_extractor.rb
|
135
153
|
- lib/drudgery/extractors/sqlite3_extractor.rb
|
136
154
|
- lib/drudgery/job.rb
|
137
|
-
- lib/drudgery/job_logger.rb
|
138
|
-
- lib/drudgery/job_progress.rb
|
139
155
|
- lib/drudgery/loaders/active_record_import_loader.rb
|
140
156
|
- lib/drudgery/loaders/active_record_loader.rb
|
141
157
|
- lib/drudgery/loaders/csv_loader.rb
|
@@ -148,8 +164,6 @@ files:
|
|
148
164
|
- spec/drudgery/extractors/active_record_extractor_spec.rb
|
149
165
|
- spec/drudgery/extractors/csv_extractor_spec.rb
|
150
166
|
- spec/drudgery/extractors/sqlite3_extractor_spec.rb
|
151
|
-
- spec/drudgery/job_logger_spec.rb
|
152
|
-
- spec/drudgery/job_progress_spec.rb
|
153
167
|
- spec/drudgery/job_spec.rb
|
154
168
|
- spec/drudgery/loaders/active_record_import_loader_spec.rb
|
155
169
|
- spec/drudgery/loaders/active_record_loader_spec.rb
|
@@ -177,9 +191,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
191
|
- - ! '>='
|
178
192
|
- !ruby/object:Gem::Version
|
179
193
|
version: '0'
|
194
|
+
segments:
|
195
|
+
- 0
|
196
|
+
hash: 2447573395712005243
|
180
197
|
requirements: []
|
181
198
|
rubyforge_project: drudgery
|
182
|
-
rubygems_version: 1.8.
|
199
|
+
rubygems_version: 1.8.24
|
183
200
|
signing_key:
|
184
201
|
specification_version: 3
|
185
202
|
summary: Simple ETL Library
|
@@ -187,8 +204,6 @@ test_files:
|
|
187
204
|
- spec/drudgery/extractors/active_record_extractor_spec.rb
|
188
205
|
- spec/drudgery/extractors/csv_extractor_spec.rb
|
189
206
|
- spec/drudgery/extractors/sqlite3_extractor_spec.rb
|
190
|
-
- spec/drudgery/job_logger_spec.rb
|
191
|
-
- spec/drudgery/job_progress_spec.rb
|
192
207
|
- spec/drudgery/job_spec.rb
|
193
208
|
- spec/drudgery/loaders/active_record_import_loader_spec.rb
|
194
209
|
- spec/drudgery/loaders/active_record_loader_spec.rb
|
data/lib/drudgery/job_logger.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Drudgery
|
2
|
-
class JobLogger
|
3
|
-
def initialize(job_id)
|
4
|
-
@prefix = "## JOB #{job_id}"
|
5
|
-
end
|
6
|
-
|
7
|
-
def log_with_progress(mode, message)
|
8
|
-
STDERR.puts format_message(message) if Drudgery.show_progress
|
9
|
-
log(mode, message)
|
10
|
-
end
|
11
|
-
|
12
|
-
def log(mode, message)
|
13
|
-
Drudgery.log mode, format_message(message)
|
14
|
-
end
|
15
|
-
|
16
|
-
private
|
17
|
-
def format_message(message)
|
18
|
-
"#{@prefix}: #{message}"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Drudgery::JobLogger do
|
4
|
-
describe '#initialize' do
|
5
|
-
it 'sets prefix to ## JOB <id>' do
|
6
|
-
logger = Drudgery::JobLogger.new(345)
|
7
|
-
logger.instance_variable_get('@prefix').must_equal '## JOB 345'
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe '#log_with_progress' do
|
12
|
-
before(:each) do
|
13
|
-
@logger = Drudgery::JobLogger.new(123)
|
14
|
-
STDERR.stubs(:puts)
|
15
|
-
Drudgery.stubs(:log)
|
16
|
-
end
|
17
|
-
|
18
|
-
describe 'when progress on' do
|
19
|
-
before(:each) do
|
20
|
-
Drudgery.show_progress = true
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'puts formatted message to STDERR' do
|
24
|
-
STDERR.expects(:puts).with('## JOB 123: Some message')
|
25
|
-
@logger.log_with_progress :info, 'Some message'
|
26
|
-
end
|
27
|
-
|
28
|
-
it 'passes mode and formatted message to Drudgery logger' do
|
29
|
-
Drudgery.expects(:log).with(:info, '## JOB 123: Some message')
|
30
|
-
@logger.log_with_progress :info, 'Some message'
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe 'when progress off' do
|
35
|
-
before(:each) do
|
36
|
-
Drudgery.show_progress = false
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'does not put formatted message to STDERR' do
|
40
|
-
STDERR.expects(:puts).never
|
41
|
-
@logger.log_with_progress :info, 'Some message'
|
42
|
-
end
|
43
|
-
|
44
|
-
it 'passes mode and formatted message to Drudgery logger' do
|
45
|
-
Drudgery.expects(:log).with(:info, '## JOB 123: Some message')
|
46
|
-
@logger.log_with_progress :info, 'Some message'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '#log' do
|
52
|
-
it 'passes mode and formatted message to Drudgery logger' do
|
53
|
-
Drudgery.expects(:log).with(:debug, '## JOB 234: Another message')
|
54
|
-
|
55
|
-
logger = Drudgery::JobLogger.new(234)
|
56
|
-
logger.log :debug, 'Another message'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Drudgery::JobProgress do
|
4
|
-
describe '#initialize' do
|
5
|
-
before(:each) do
|
6
|
-
STDERR.stubs(:print)
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'sets title to ## JOB <id>' do
|
10
|
-
progress = Drudgery::JobProgress.new(123, 1)
|
11
|
-
progress.instance_variable_get('@title').must_equal '## JOB 123'
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'sets title_with to title.length + 1' do
|
15
|
-
progress = Drudgery::JobProgress.new(123, 1)
|
16
|
-
progress.instance_variable_get('@title_width').must_equal '## JOB 123'.length + 1
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|