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.
@@ -1,74 +1,103 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Drudgery do
4
- describe '.log' do
5
- after(:each) do
6
- Drudgery.logger = nil
3
+ module Drudgery
4
+ describe Drudgery do
5
+ before do
6
+ Drudgery.listeners.clear
7
7
  end
8
8
 
9
- describe 'if logger defined' do
10
- it 'sends mode and message to logger' do
11
- logger = mock('logger')
12
- logger.expects(:send).with(:debug, "Some message")
13
- Drudgery.logger = logger
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.log :debug, "Some message"
18
+ Drudgery.listeners[:before_job].must_equal [block]
16
19
  end
17
- end
18
20
 
19
- describe 'if no logger defined' do
20
- it 'ignores mode and message' do
21
- logger = mock('logger')
22
- logger.expects(:send).never
23
- Drudgery.logger = nil
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.log :debug, "Some message"
27
+ Drudgery.listeners[:before_job].must_equal [block1, block2]
26
28
  end
27
29
  end
28
- end
29
- end
30
30
 
31
- describe Drudgery::Extractors do
32
- describe '.instantiate' do
33
- it 'initializes extractor of type with args' do
34
- Drudgery::Extractors::CSVExtractor.expects(:new).with('file.csv', :col_sep => '|')
35
- Drudgery::Extractors.instantiate(:csv, 'file.csv', :col_sep => '|')
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
- Drudgery::Extractors::SQLite3Extractor.expects(:new).with('db.sqlite3', 'tablename')
38
- Drudgery::Extractors.instantiate(:sqlite3, 'db.sqlite3', 'tablename')
39
+ it 'unsubscribes all listeners for event' do
40
+ Drudgery.unsubscribe(:before_job)
39
41
 
40
- model = stub('model')
41
- Drudgery::Extractors::ActiveRecordExtractor.expects(:new).with(model)
42
- Drudgery::Extractors.instantiate(:active_record, model)
42
+ Drudgery.listeners[:before_job].must_be_empty
43
+ end
43
44
  end
44
45
 
45
- it 'returns an extractor' do
46
- extractor = Drudgery::Extractors.instantiate(:csv, 'file.csv')
47
- extractor.must_be_kind_of Drudgery::Extractors::CSVExtractor
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 Drudgery::Loaders do
53
- describe '.instantiate' do
54
- it 'initializes loader of type with args' do
55
- Drudgery::Loaders::CSVLoader.expects(:new).with('file.csv', :col_sep => '|')
56
- Drudgery::Loaders.instantiate(:csv, 'file.csv', :col_sep => '|')
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
- Drudgery::Loaders::SQLite3Loader.expects(:new).with('db.sqlite3', 'tablename')
59
- Drudgery::Loaders.instantiate(:sqlite3, 'db.sqlite3', 'tablename')
65
+ Extractors::SQLite3Extractor.expects(:new).with('db.sqlite3', 'tablename')
66
+ Extractors.instantiate(:sqlite3, 'db.sqlite3', 'tablename')
60
67
 
61
- model = stub('model')
62
- Drudgery::Loaders::ActiveRecordLoader.expects(:new).with(model)
63
- Drudgery::Loaders.instantiate(:active_record, model)
68
+ model = stub('model')
69
+ Extractors::ActiveRecordExtractor.expects(:new).with(model)
70
+ Extractors.instantiate(:active_record, model)
71
+ end
64
72
 
65
- Drudgery::Loaders::ActiveRecordImportLoader.expects(:new).with(model)
66
- Drudgery::Loaders.instantiate(:active_record_import, model)
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
- it 'returns an loader' do
70
- loader = Drudgery::Loaders.instantiate(:csv, 'file.csv')
71
- loader.must_be_kind_of Drudgery::Loaders::CSVLoader
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
@@ -8,8 +8,9 @@ end
8
8
  require 'minitest/spec'
9
9
  require 'minitest/autorun'
10
10
  require 'mocha'
11
- #require 'turn/autorun'
12
-
13
- #Turn.config.format = :dot
14
11
 
15
12
  require 'drudgery'
13
+
14
+ require 'sqlite3'
15
+ require 'active_record'
16
+ require 'activerecord-import'
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.1.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-04-07 00:00:00.000000000 Z
12
+ date: 2012-08-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: progressbar
16
- requirement: &70214544961640 !ruby/object:Gem::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.10'
22
- type: :runtime
21
+ version: '0'
22
+ type: :development
23
23
  prerelease: false
24
- version_requirements: *70214544961640
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: &70214544960060 !ruby/object:Gem::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: *70214544960060
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: &70214544959420 !ruby/object:Gem::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.10'
53
+ version: '0.12'
55
54
  type: :development
56
55
  prerelease: false
57
- version_requirements: *70214544959420
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: &70214544958800 !ruby/object:Gem::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: *70214544958800
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.9'
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: &70214544957620 !ruby/object:Gem::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: *70214544957620
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: &70214544957120 !ruby/object:Gem::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: *70214544957120
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: &70214544956600 !ruby/object:Gem::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: *70214544956600
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: &70214544956040 !ruby/object:Gem::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: *70214544956040
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.17
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
@@ -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,11 +0,0 @@
1
- module Drudgery
2
- class JobProgress < ProgressBar
3
- def initialize(job_id, total)
4
- title = "## JOB #{job_id}"
5
-
6
- super(title, total)
7
-
8
- @title_width = title.length + 1
9
- end
10
- end
11
- 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