ruby_marks 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -246,6 +246,15 @@ config.edge_level = 4
246
246
  config.threshold_level = 60
247
247
  ```
248
248
 
249
+ ### Scan timeout
250
+
251
+ ```ruby
252
+ # Sets a timeout in seconds, to break long time scans.
253
+ # The default value is 0 (zero) and means there's no timeout. Any value will quit the scan and raise timed_out_watcher
254
+
255
+ config.scan_timeou = 0
256
+ ```
257
+
249
258
  ### Expected lines
250
259
 
251
260
  ```ruby
@@ -433,6 +442,17 @@ recognizer.add_watcher :incorrect_group_watcher do |recognizer, incorrect_expect
433
442
  end
434
443
  ```
435
444
 
445
+ ### Timed Out Watcher
446
+
447
+ ```ruby
448
+ # Will execute your custom code if your scan outrun the specified timeout in configuration. It returns you recognizer
449
+ # object.
450
+
451
+ recognizer.add_watcher :timed_out_watcher do |recognizer|
452
+ # place your custom code
453
+ end
454
+ ```
455
+
436
456
  Contributing
437
457
  ------------
438
458
 
@@ -4,7 +4,7 @@ module RubyMarks
4
4
  class Config
5
5
 
6
6
  attr_accessor :intensity_percentual, :edge_level, :default_marks_options, :threshold_level,
7
- :default_mark_width, :default_mark_height,
7
+ :default_mark_width, :default_mark_height, :scan_timeout,
8
8
  :default_mark_width_tolerance, :default_mark_height_tolerance,
9
9
  :default_distance_between_marks, :adjust_inconsistent_bubbles,
10
10
  :default_expected_lines
@@ -14,7 +14,8 @@ module RubyMarks
14
14
  @recognizer = recognizer
15
15
  @threshold_level = RubyMarks.threshold_level
16
16
  @edge_level = RubyMarks.edge_level
17
-
17
+ @scan_timeout = RubyMarks.scan_timeout
18
+
18
19
  @adjust_inconsistent_bubbles = RubyMarks.adjust_inconsistent_bubbles
19
20
 
20
21
  @intensity_percentual = RubyMarks.intensity_percentual
@@ -85,7 +85,13 @@ module RubyMarks
85
85
  result = Hash.new { |hash, key| hash[key] = [] }
86
86
  result.tap do |result|
87
87
 
88
- self.detect_groups unless @groups_detected
88
+ begin
89
+ Timeout.timeout(@config.scan_timeout) do
90
+ self.detect_groups unless @groups_detected
91
+ end
92
+ rescue Timeout::Error
93
+ raise_watcher :timed_out_watcher
94
+ end
89
95
 
90
96
  @groups.each_pair do |label, group|
91
97
  marks = Hash.new { |hash, key| hash[key] = [] }
@@ -114,6 +120,7 @@ module RubyMarks
114
120
  incorrect_bubble_line_found = Hash.new { |hash, key| hash[key] = [] }
115
121
  bubbles_adjusted = []
116
122
  incorrect_expected_lines = false
123
+
117
124
  @groups.each_pair do |label, group|
118
125
  next unless group.expected_coordinates.any?
119
126
 
@@ -372,7 +379,13 @@ module RubyMarks
372
379
 
373
380
  file.tap do |file|
374
381
 
375
- self.detect_groups unless @groups_detected
382
+ begin
383
+ Timeout.timeout(@config.scan_timeout) do
384
+ self.detect_groups unless @groups_detected
385
+ end
386
+ rescue Timeout::Error
387
+ raise_watcher :timed_out_watcher
388
+ end
376
389
 
377
390
  @groups.each_pair do |label, group|
378
391
 
@@ -1,3 +1,3 @@
1
1
  module RubyMarks
2
- VERSION = "0.2.2".freeze
2
+ VERSION = "0.2.3".freeze
3
3
  end
data/lib/ruby_marks.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'RMagick'
3
+ require 'sane_timeout'
3
4
  require 'ruby_marks/version'
4
5
  require 'ruby_marks/support'
5
6
 
@@ -11,6 +12,9 @@ module RubyMarks
11
12
  mattr_accessor :threshold_level
12
13
  @@threshold_level = 60
13
14
 
15
+ mattr_accessor :scan_timeout
16
+ @@scan_timeout = 0
17
+
14
18
  mattr_accessor :adjust_inconsistent_bubbles
15
19
  @@adjust_inconsistent_bubbles = true
16
20
 
@@ -56,7 +60,8 @@ module RubyMarks
56
60
  :scan_mark_watcher,
57
61
  :scan_unmarked_watcher,
58
62
  :scan_multiple_marked_watcher,
59
- :incorrect_group_watcher
63
+ :incorrect_group_watcher,
64
+ :timed_out_watcher
60
65
  ]
61
66
  end
62
67
 
@@ -150,5 +150,16 @@ class RubyMarks::RecognizerTest < Test::Unit::TestCase
150
150
  end
151
151
 
152
152
 
153
+ def test_should_make_timeout_watcher_raise_up
154
+ @recognizer.configure do |config|
155
+ config.scan_timeout = 1
156
+ end
157
+
158
+ @recognizer.add_watcher :timed_out_watcher
159
+
160
+ @recognizer.scan
161
+ assert @recognizer.raised_watchers.include?(:timed_out_watcher)
162
+ end
163
+
153
164
  end
154
165
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_marks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: