processor 1.0.0 → 2.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.
Files changed (41) hide show
  1. data/.coveralls.yml +1 -0
  2. data/.gitignore +1 -0
  3. data/README.md +68 -41
  4. data/example/migrator.rb +2 -0
  5. data/lib/processor/data/array_processor.rb +4 -0
  6. data/lib/processor/data/null_processor.rb +7 -10
  7. data/lib/processor/environment.rb +3 -0
  8. data/lib/processor/event_processor.rb +25 -0
  9. data/lib/processor/logger_messages.rb +56 -0
  10. data/lib/processor/messenger.rb +16 -3
  11. data/lib/processor/observer/logger.rb +43 -34
  12. data/lib/processor/observer/null_observer.rb +8 -3
  13. data/lib/processor/process_runner/threads.rb +3 -8
  14. data/lib/processor/runner.rb +8 -23
  15. data/lib/processor/subroutine/counter.rb +25 -0
  16. data/lib/processor/subroutine/name.rb +28 -0
  17. data/lib/processor/subroutine/recursion.rb +29 -0
  18. data/lib/processor/thread.rb +5 -1
  19. data/lib/processor/version.rb +1 -1
  20. data/lib/processor.rb +2 -1
  21. data/processor.gemspec +6 -4
  22. data/spec/processor/data/array_processor_spec.rb +1 -2
  23. data/spec/processor/data/null_processor_spec.rb +27 -2
  24. data/spec/processor/event_processor_spec.rb +58 -0
  25. data/spec/processor/logger_messages_spec.rb +69 -0
  26. data/spec/processor/messenger_spec.rb +15 -0
  27. data/spec/processor/observer/logger_spec.rb +47 -16
  28. data/spec/processor/observer/null_observer_spec.rb +33 -0
  29. data/spec/processor/process_runner/specs.rb +12 -23
  30. data/spec/processor/process_runner/threads_spec.rb +1 -3
  31. data/spec/processor/runner_spec.rb +28 -54
  32. data/spec/processor/subroutine/counter_spec.rb +44 -0
  33. data/spec/processor/subroutine/name_spec.rb +23 -0
  34. data/spec/processor/subroutine/recursion_spec.rb +23 -0
  35. data/spec/processor/thread_spec.rb +1 -1
  36. data/spec/spec_helper_lite.rb +7 -2
  37. data/spec/support/dummy_file +0 -0
  38. metadata +47 -12
  39. data/lib/processor/data/solr_processor.rb +0 -23
  40. data/lib/processor/events_registrator.rb +0 -16
  41. data/spec/processor/events_registrator_spec.rb +0 -15
@@ -0,0 +1,23 @@
1
+ require 'spec_helper_lite'
2
+ require 'delegate'
3
+ require 'processor/subroutine/name'
4
+
5
+ describe Processor::Subroutine::Name do
6
+ let(:processor) { stub.tap { |p| p.stub_chain(:class, :name).and_return("NameSpace::DataProcessor") } }
7
+ let(:subroutine) { Processor::Subroutine::Name.new processor }
8
+
9
+ it "should have a name equals to underscored processor class name" do
10
+ subroutine.name.should eq "name_space_data_processor"
11
+ end
12
+
13
+ it "should use processor's name method if defined" do
14
+ processor.stub(name: "Processor's name")
15
+ subroutine.name.should eq "Processor's name"
16
+ end
17
+
18
+ it "should use real object's name, not delegator" do
19
+ double_wrapped_processor = Processor::Subroutine::Name.new(SimpleDelegator.new processor)
20
+ double_wrapped_processor.name.should eq "name_space_data_processor"
21
+ end
22
+ end
23
+
@@ -0,0 +1,23 @@
1
+ require 'spec_helper_lite'
2
+ require 'processor/subroutine/recursion'
3
+
4
+ describe Processor::Subroutine::Recursion do
5
+ let(:processor) { stub(total_records: 100) }
6
+ let(:subroutine) { Processor::Subroutine::Recursion.new processor }
7
+
8
+ it "should not fall into recursion" do
9
+ processor.should_receive(:process).at_most(1000).times
10
+
11
+ expect do
12
+ 1001.times { subroutine.process }
13
+ end.to raise_error(Exception, /Processing fall into recursion/)
14
+ end
15
+
16
+ it "should have 10% + 10 rerurns window" do
17
+ processor.should_receive(:process).exactly(120).times
18
+
19
+ expect do
20
+ 121.times { subroutine.process }
21
+ end.to raise_error(Exception, /Processing fall into recursion/)
22
+ end
23
+ end
@@ -13,7 +13,7 @@ describe Processor::Thread do
13
13
 
14
14
  it "should run a migration using provided block" do
15
15
  thread = Processor::Thread.new @migration
16
- thread.run_as do |processor, *|
16
+ thread.run_as do |processor|
17
17
  processor.records.each do |record|
18
18
  processor.process record
19
19
  end
@@ -1,6 +1,11 @@
1
- require 'pry'
1
+ if Processor::RUNNING_ON_CI
2
+ require 'coveralls'
3
+ Coveralls.wear!
4
+ else
5
+ require 'pry'
6
+ end
2
7
 
3
8
  ENV['RAILS_ENV'] ||= 'test'
4
- require "rspec"
9
+ require 'rspec'
5
10
 
6
11
  $: << File.expand_path('../lib', File.dirname(__FILE__))
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: processor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-20 00:00:00.000000000 Z
12
+ date: 2013-06-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -59,15 +59,32 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- description: ! "Processor could execute any DataProcessor you specify and log entire
63
- process.\n You may add own observers for monitoring background tasks on even send
64
- email to bussiness with generated report."
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry-plus
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: ! 'Processor is a tool that helps to iterate over collection and perform
79
+ complex actions on a result. It is extremely useful in data migrations, report generation,
80
+ etc. '
65
81
  email:
66
82
  - alexander.n.paramonov@gmail.com
67
83
  executables: []
68
84
  extensions: []
69
85
  extra_rdoc_files: []
70
86
  files:
87
+ - .coveralls.yml
71
88
  - .gitignore
72
89
  - .rspec
73
90
  - .rvmrc
@@ -86,14 +103,18 @@ files:
86
103
  - lib/processor/data/csv_processor.rb
87
104
  - lib/processor/data/null_processor.rb
88
105
  - lib/processor/data/solr_pages_processor.rb
89
- - lib/processor/data/solr_processor.rb
90
- - lib/processor/events_registrator.rb
106
+ - lib/processor/environment.rb
107
+ - lib/processor/event_processor.rb
108
+ - lib/processor/logger_messages.rb
91
109
  - lib/processor/messenger.rb
92
110
  - lib/processor/observer/logger.rb
93
111
  - lib/processor/observer/null_observer.rb
94
112
  - lib/processor/process_runner/successive.rb
95
113
  - lib/processor/process_runner/threads.rb
96
114
  - lib/processor/runner.rb
115
+ - lib/processor/subroutine/counter.rb
116
+ - lib/processor/subroutine/name.rb
117
+ - lib/processor/subroutine/recursion.rb
97
118
  - lib/processor/thread.rb
98
119
  - lib/processor/version.rb
99
120
  - processor.gemspec
@@ -101,15 +122,21 @@ files:
101
122
  - spec/processor/data/array_processor_spec.rb
102
123
  - spec/processor/data/batch_processor_spec.rb
103
124
  - spec/processor/data/null_processor_spec.rb
104
- - spec/processor/events_registrator_spec.rb
125
+ - spec/processor/event_processor_spec.rb
126
+ - spec/processor/logger_messages_spec.rb
105
127
  - spec/processor/messenger_spec.rb
106
128
  - spec/processor/observer/logger_spec.rb
129
+ - spec/processor/observer/null_observer_spec.rb
107
130
  - spec/processor/process_runner/specs.rb
108
131
  - spec/processor/process_runner/successive_spec.rb
109
132
  - spec/processor/process_runner/threads_spec.rb
110
133
  - spec/processor/runner_spec.rb
134
+ - spec/processor/subroutine/counter_spec.rb
135
+ - spec/processor/subroutine/name_spec.rb
136
+ - spec/processor/subroutine/recursion_spec.rb
111
137
  - spec/processor/thread_spec.rb
112
138
  - spec/spec_helper_lite.rb
139
+ - spec/support/dummy_file
113
140
  homepage: http://github.com/AlexParamonov/processor
114
141
  licenses:
115
142
  - MIT
@@ -125,7 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
152
  version: '0'
126
153
  segments:
127
154
  - 0
128
- hash: 204713070122044710
155
+ hash: 81022750956299977
129
156
  required_rubygems_version: !ruby/object:Gem::Requirement
130
157
  none: false
131
158
  requirements:
@@ -134,24 +161,32 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
161
  version: '0'
135
162
  segments:
136
163
  - 0
137
- hash: 204713070122044710
164
+ hash: 81022750956299977
138
165
  requirements: []
139
166
  rubyforge_project:
140
167
  rubygems_version: 1.8.25
141
168
  signing_key:
142
169
  specification_version: 3
143
- summary: Universal processor for data migration and reports generation.
170
+ summary: Universal processor for iteration over a collection with threads, logging
171
+ and post processing
144
172
  test_files:
145
173
  - spec/example_spec.rb
146
174
  - spec/processor/data/array_processor_spec.rb
147
175
  - spec/processor/data/batch_processor_spec.rb
148
176
  - spec/processor/data/null_processor_spec.rb
149
- - spec/processor/events_registrator_spec.rb
177
+ - spec/processor/event_processor_spec.rb
178
+ - spec/processor/logger_messages_spec.rb
150
179
  - spec/processor/messenger_spec.rb
151
180
  - spec/processor/observer/logger_spec.rb
181
+ - spec/processor/observer/null_observer_spec.rb
152
182
  - spec/processor/process_runner/specs.rb
153
183
  - spec/processor/process_runner/successive_spec.rb
154
184
  - spec/processor/process_runner/threads_spec.rb
155
185
  - spec/processor/runner_spec.rb
186
+ - spec/processor/subroutine/counter_spec.rb
187
+ - spec/processor/subroutine/name_spec.rb
188
+ - spec/processor/subroutine/recursion_spec.rb
156
189
  - spec/processor/thread_spec.rb
157
190
  - spec/spec_helper_lite.rb
191
+ - spec/support/dummy_file
192
+ has_rdoc:
@@ -1,23 +0,0 @@
1
- require_relative "batch_processor"
2
-
3
- module Processor
4
- module Data
5
- class SolrProcessor < BatchProcessor
6
- def process(record)
7
- raise NotImplementedError
8
- end
9
-
10
- def query
11
- raise NotImplementedError
12
- end
13
-
14
- def fetch_batch
15
- query.results
16
- end
17
-
18
- def total_records
19
- @total_records ||= query.total
20
- end
21
- end
22
- end
23
- end
@@ -1,16 +0,0 @@
1
- module Processor
2
- class EventsRegistrator
3
- def initialize(observers)
4
- @observers = observers
5
- end
6
-
7
- def register(event, *data)
8
- observers.each do |observer|
9
- observer.update event, *data
10
- end
11
- end
12
-
13
- private
14
- attr_reader :observers
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper_lite'
2
- require 'processor/events_registrator'
3
-
4
- describe Processor::EventsRegistrator do
5
- subject { Processor::EventsRegistrator }
6
-
7
- it "should broadcast events to all observers" do
8
- observers = 3.times.map do
9
- stub(:observer).tap { |observer| observer.should_receive(:update).with(:test_event).once }
10
- end
11
-
12
- events = subject.new(observers)
13
- events.register :test_event
14
- end
15
- end