typingpool 0.8.11 → 0.8.13

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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/bin/tp-assign +5 -4
  3. data/bin/tp-collect +16 -6
  4. data/bin/tp-finish +5 -4
  5. data/bin/tp-make +5 -4
  6. data/bin/tp-review +52 -26
  7. data/lib/typingpool/test.rb +4 -126
  8. data/lib/typingpool/test/fixtures/tp_collect_id.txt +1 -1
  9. data/lib/typingpool/test/fixtures/tp_collect_sandbox-assignment.csv +7 -8
  10. data/lib/typingpool/test/fixtures/tp_review2a_id.txt +1 -0
  11. data/lib/typingpool/test/fixtures/tp_review2a_sandbox-assignment.csv +7 -0
  12. data/lib/typingpool/test/fixtures/tp_review2b_id.txt +1 -0
  13. data/lib/typingpool/test/fixtures/tp_review2b_sandbox-assignment.csv +7 -0
  14. data/lib/typingpool/test/fixtures/tp_review3_id.txt +1 -0
  15. data/lib/typingpool/test/fixtures/tp_review3_sandbox-assignment.csv +7 -0
  16. data/lib/typingpool/test/fixtures/tp_review_id.txt +1 -1
  17. data/lib/typingpool/test/fixtures/tp_review_sandbox-assignment.csv +7 -8
  18. data/lib/typingpool/test/fixtures/vcr/tp-collect-1.yml +3176 -1814
  19. data/lib/typingpool/test/fixtures/vcr/tp-collect-2.yml +116 -2641
  20. data/lib/typingpool/test/fixtures/vcr/tp-collect-3.yml +119 -2693
  21. data/lib/typingpool/test/fixtures/vcr/tp-review-1.yml +353 -355
  22. data/lib/typingpool/test/fixtures/vcr/tp-review-2.yml +161 -242
  23. data/lib/typingpool/test/fixtures/vcr/tp-review-3.yml +4716 -0
  24. data/lib/typingpool/test/fixtures/vcr/tp-review-4.yml +741 -0
  25. data/lib/typingpool/test/fixtures/vcr/tp-review-5.yml +248 -0
  26. data/lib/typingpool/test/fixtures/vcr/tp-review-6.yml +233 -0
  27. data/lib/typingpool/test/fixtures/vcr/tp-review-7.yml +4479 -0
  28. data/lib/typingpool/test/fixtures/vcr/tp-review-8.yml +188 -0
  29. data/lib/typingpool/test/fixtures/vcr/tp-review-9.yml +187 -0
  30. data/lib/typingpool/test/script.rb +13 -320
  31. data/lib/typingpool/utility/test.rb +175 -0
  32. data/lib/typingpool/utility/test/script.rb +342 -0
  33. data/lib/typingpool/version.rb +1 -1
  34. data/test/make_amazon_question_fixture.rb +1 -1
  35. data/test/make_tp_collect_fixture_1.rb +18 -19
  36. data/test/make_tp_collect_fixture_2.rb +16 -10
  37. data/test/make_tp_collect_fixture_3.rb +15 -9
  38. data/test/make_tp_collect_fixture_4.rb +19 -11
  39. data/test/make_tp_collect_fixture_5.rb +25 -0
  40. data/test/make_tp_collect_fixture_6.rb +22 -0
  41. data/test/make_tp_collect_fixture_7.rb +22 -0
  42. data/test/make_tp_collect_fixture_8.rb +26 -0
  43. data/test/make_tp_review_fixture_1.rb +18 -19
  44. data/test/make_tp_review_fixture_2.rb +43 -24
  45. data/test/make_tp_review_fixture_3.rb +35 -0
  46. data/test/make_tp_review_fixture_4.rb +56 -0
  47. data/test/test_integration_script_1_tp_config.rb +7 -7
  48. data/test/test_integration_script_2_tp_make.rb +12 -12
  49. data/test/test_integration_script_3_tp_assign.rb +23 -21
  50. data/test/test_integration_script_4_tp_review.rb +156 -23
  51. data/test/test_integration_script_5_tp_collect.rb +33 -24
  52. data/test/test_integration_script_6_tp_finish.rb +23 -20
  53. data/test/test_unit_amazon.rb +4 -2
  54. data/test/test_unit_filer.rb +6 -6
  55. data/test/test_unit_project.rb +2 -2
  56. data/test/test_unit_project_local.rb +2 -2
  57. data/test/test_unit_project_remote.rb +3 -1
  58. data/test/test_unit_template.rb +6 -6
  59. data/test/test_unit_test.rb +3 -3
  60. metadata +23 -3
  61. data/lib/typingpool/app/test.rb +0 -69
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 554974b6b35f179d3f50deb682ab0e5f9fd0964a
4
- data.tar.gz: 0b67e2cdbb110c4f05bb820f2ad06241ead2fd7c
3
+ metadata.gz: b7f1162da9010eea09066f72b78c40eacc342d34
4
+ data.tar.gz: 4243222ed91a427012291a3be392ca5de6d5bc70
5
5
  SHA512:
6
- metadata.gz: 8463b4059f24d13d4d6245e155a0db3d7d6dde459e1612d698b6a12a95a57c1fa15d240763530e9b883948fd7f04e2d41bab968675af6e25eb072b476b87bfb1
7
- data.tar.gz: 4848802256545cb9b3149f57ef0d7f9a63b251fb3ed90d05db1b13f8a396353e0600fd3f65eb3be2ac9d1ffbc855c0b770d0ba8c7deffbe88a2308bfd2449f1c
6
+ metadata.gz: 982e426847cad2182163ab13d8832e70f64c84ee6f2ffe3bdcc712c346d8655cda67eb8c116fe22a761010f0e780f0c62c9fe9e76eacffe4d2abf8517ee50686
7
+ data.tar.gz: 063621305ccb40f636fd1f8234bf5f97d7584ff81d62220bc47c64ce30e259be8e6278ed773828c078f8980f9d88c8ef074adbe645c0e916eff34cdfb99d7d4d
data/bin/tp-assign CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  require 'optparse'
4
4
  require 'typingpool'
5
+ require 'typingpool/utility/test'
5
6
  require 'highline/import'
6
7
  include Typingpool::App::FriendlyExceptions
7
8
  include Typingpool::App::CLI::Formatter
9
+ include Typingpool::Utility::Test
8
10
 
9
11
  options = {
10
12
  :keyword => [],
@@ -97,7 +99,6 @@ OptionParser.new do |opts|
97
99
  opts.on('--testfixture=PATH',
98
100
  'For testing purposes only. Ignore.',
99
101
  'A VCR fixture for running with mock data.') do |fixture|
100
- require 'typingpool/app/test'
101
102
  options[:fixture] = fixture
102
103
  end
103
104
 
@@ -214,11 +215,11 @@ STDERR.puts "#{needed_assignments.count} assignments to assign"
214
215
  Typingpool::Amazon.setup(:sandbox => options[:sandbox], :config => config)
215
216
 
216
217
  if options[:fixture]
217
- Typingpool::App.vcr_load(options[:fixture], config, not(options[:fixturerecord]), {
218
+ vcr_load(options[:fixture], config, not(options[:fixturerecord]), {
218
219
  :preserve_exact_body_bytes => true,
219
- :match_requests_on => [:method, Typingpool::App.vcr_core_host_matcher]
220
+ :match_requests_on => [:method, vcr_core_host_matcher]
220
221
  })
221
- at_exit{ Typingpool::App.vcr_stop }
222
+ at_exit{ vcr_stop }
222
223
  end
223
224
 
224
225
  #Are there enough funds for this assignment?
data/bin/tp-collect CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'typingpool'
4
4
  require 'optparse'
5
+ require 'typingpool/utility/test'
6
+ include Typingpool::Utility::Test
5
7
 
6
8
  options = {}
7
9
  OptionParser.new do |commands|
@@ -15,12 +17,19 @@ OptionParser.new do |commands|
15
17
  "A config file") do |path|
16
18
  options[:config] = path
17
19
  end
18
- commands.on('--fixture=PATH',
19
- "Optional. For testing purposes only.",
20
+ commands.on('--testfixture=PATH',
21
+ "For testing purposes only. Ignore.",
20
22
  "A VCR ficture for running with mock data.") do |fixture|
21
- require 'typingpool/app/test'
22
23
  options[:fixture] = fixture
23
24
  end
25
+
26
+ commands.on('--testfixturerecord',
27
+ 'For testing purposes only. Ignore.',
28
+ 'Allows recording of a new fixture',
29
+ 'to --testfixture path.') do
30
+ options[:fixturerecord] = true
31
+ end
32
+
24
33
  commands.on('--help',
25
34
  "Display this screen") do
26
35
  STDERR.puts commands
@@ -31,14 +40,15 @@ end.parse!
31
40
  config = Typingpool::App::CLI.config_from_arg(options[:config]) or abort "No config file at '#{options[:config]}'"
32
41
 
33
42
  if options[:fixture]
34
- Typingpool::App.vcr_load(options[:fixture], config, true)
35
- at_exit{ Typingpool::App.vcr_stop }
43
+ vcr_load(options[:fixture], config, not(options[:fixturerecord]), {
44
+
45
+ })
46
+ at_exit{ vcr_stop }
36
47
  end
37
48
 
38
49
  STDERR.puts "Collecting results from Amazon"
39
50
  Typingpool::Amazon.setup(:sandbox => options[:sandbox], :config => config)
40
51
  hits = Typingpool::Amazon::HIT.all_approved
41
-
42
52
  STDERR.puts "Looking for local project folders to receive results" unless hits.empty?
43
53
  Typingpool::App.find_projects_waiting_for_hits(hits, config) do |project, hits|
44
54
  assignments_file = Typingpool::App.assignments_file_for_sandbox_status(options[:sandbox], project)
data/bin/tp-finish CHANGED
@@ -3,6 +3,8 @@
3
3
  require 'optparse'
4
4
  require 'typingpool'
5
5
  require 'fileutils'
6
+ require 'typingpool/utility/test'
7
+ include Typingpool::Utility::Test
6
8
 
7
9
  options = {}
8
10
  OptionParser.new do |commands|
@@ -31,7 +33,6 @@ OptionParser.new do |commands|
31
33
  commands.on('--testfixture=PATH',
32
34
  'For testing purposes only. Ignore.',
33
35
  'A VCR fixture for running with mock data.') do |fixture|
34
- require 'typingpool/app/test'
35
36
  options[:fixture] = fixture
36
37
  end
37
38
 
@@ -65,11 +66,11 @@ end
65
66
 
66
67
  Typingpool::Amazon.setup(:sandbox => options[:sandbox], :config => config)
67
68
  if options[:fixture]
68
- Typingpool::App.vcr_load(options[:fixture], config, not(options[:fixturerecord]), {
69
+ vcr_load(options[:fixture], config, not(options[:fixturerecord]), {
69
70
  :preserve_exact_body_bytes => true,
70
- :match_requests_on => [:method, Typingpool::App.vcr_core_host_matcher]
71
+ :match_requests_on => [:method, vcr_core_host_matcher]
71
72
  })
72
- at_exit{ Typingpool::App.vcr_stop }
73
+ at_exit{ vcr_stop }
73
74
  end
74
75
  STDERR.puts "Removing from Amazon"
75
76
  STDERR.puts " Collecting all results"
data/bin/tp-make CHANGED
@@ -2,10 +2,12 @@
2
2
 
3
3
  require 'optparse'
4
4
  require 'typingpool'
5
+ require 'typingpool/utility/test'
5
6
  require 'fileutils'
6
7
  require 'tempfile'
7
8
  require 'tmpdir'
8
9
  include Typingpool::App::FriendlyExceptions
10
+ include Typingpool::Utility::Test
9
11
 
10
12
  options = {
11
13
  :files => [],
@@ -88,7 +90,6 @@ OptionParser.new do |opts|
88
90
  opts.on('--testfixture=PATH',
89
91
  'For testing purposes only. Ignore.',
90
92
  'A VCR fixture for running with mock data.') do |fixture|
91
- require 'typingpool/app/test'
92
93
  options[:fixture] = fixture
93
94
  end
94
95
 
@@ -194,14 +195,14 @@ else
194
195
  end #if project.local
195
196
 
196
197
  unless options[:noupload]
197
- Typingpool::App.vcr_load(options[:fixture], config, not(options[:fixturerecord]), {
198
+ vcr_load(options[:fixture], config, not(options[:fixturerecord]), {
198
199
  :preserve_exact_body_bytes => true,
199
- :match_requests_on => [:method, Typingpool::App.vcr_core_host_matcher]
200
+ :match_requests_on => [:method, vcr_core_host_matcher]
200
201
  }) if options[:fixture]
201
202
  Typingpool::App.upload_audio_for_project(project) do |file, as|
202
203
  STDERR.puts "Uploading #{File.basename(file)} to #{project.remote.host}/#{project.remote.path} as #{as}"
203
204
  end
204
- Typingpool::App.vcr_stop if options [:fixture]
205
+ vcr_stop if options [:fixture]
205
206
  end
206
207
 
207
208
  if STDOUT.tty? && Typingpool::Utility.os_x?
data/bin/tp-review CHANGED
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'typingpool'
4
+ require 'typingpool/utility/test'
4
5
  require 'highline/import'
5
6
  require 'optparse'
6
7
  include Typingpool::App::CLI::Formatter
8
+ include Typingpool::Utility::Test
7
9
 
8
10
  options = {}
9
11
  OptionParser.new do |commands|
@@ -26,12 +28,19 @@ OptionParser.new do |commands|
26
28
  'Test in Mechanical Turk\'s sandbox') do |sandbox|
27
29
  options[:sandbox] = true
28
30
  end
29
- commands.on('--fixture=PATH',
30
- "Optional. For testing purposes only.",
31
- "A VCR fixture for running with mock data") do |fixture|
32
- require 'typingpool/app/test'
31
+ commands.on('--testfixture=PATH',
32
+ "For testing purposes only. Ignore.",
33
+ "A VCR ficture for running with mock data.",
34
+ "Path should NOT include file extension, e.g. '.yml'") do |fixture|
33
35
  options[:fixture] = fixture
34
36
  end
37
+
38
+ commands.on('--testfixturerecord',
39
+ 'For testing purposes only. Ignore.',
40
+ 'Allows recording of a new fixture',
41
+ 'to --testfixture path.') do
42
+ options[:fixturerecord] = true
43
+ end
35
44
  commands.on('--help',
36
45
  "Display this screen") do
37
46
  STDERR.puts commands
@@ -55,8 +64,8 @@ if options[:project]
55
64
  end
56
65
 
57
66
  if options[:fixture]
58
- Typingpool::App.vcr_load(options[:fixture], config, true)
59
- at_exit{ Typingpool::App.vcr_stop }
67
+ vcr_load(options[:fixture], config, not(options[:fixturerecord]))
68
+ at_exit{ vcr_stop }
60
69
  end
61
70
 
62
71
  Typingpool::Amazon.setup(:sandbox => options[:sandbox], :config => config)
@@ -64,29 +73,47 @@ Typingpool::Amazon.setup(:sandbox => options[:sandbox], :config => config)
64
73
  assignments = Typingpool::App.assignments_file_for_sandbox_status(options[:sandbox], options[:project]) if options[:project]
65
74
  STDERR.puts "Gathering submissions from Amazon"
66
75
  hits = if options[:project] && ((hit_ids = assignments.map{|assignment| assignment['hit_id'] }.select{|hit_id| hit_id }).count > 0)
67
- Typingpool::Amazon::HIT.with_ids(hit_ids).select{|hit| hit.submitted? }
76
+ Typingpool::Amazon::HIT.with_ids(hit_ids).select{|hit| hit.submitted? || hit.approved? }
68
77
  else
69
- hits = Typingpool::Amazon::HIT.all_reviewable{|hit| hit.submitted? && hit.ours? }
78
+ hits = Typingpool::Amazon::HIT.all_reviewable{|hit| (hit.submitted? || hit.approved?) && hit.ours? }
70
79
  if options[:project]
71
80
  #code path for projects assigned through RUI
72
81
  hits.select!{|hit| hit.project_id == options[:project].local.id }
73
82
  end
74
83
  hits
75
84
  end
76
-
77
85
  STDERR.puts "Matching submissions with local projects"
86
+ project_with_hits_needing_decision = []
87
+ hits_needing_decision_count = 0
88
+ Typingpool::App.find_projects_waiting_for_hits(hits, config).each do |project_with_hits|
89
+ hits = project_with_hits[:hits]
90
+ project = project_with_hits[:project]
91
+ assignments = Typingpool::App.assignments_file_for_sandbox_status(options[:sandbox], project)
92
+ hits.sort!{|a, b| a.url <=> b.url }
93
+ hits_needing_decision=[]
94
+ hits.each do |hit|
95
+ if hit.approved?
96
+ #collect auto-approved hits so people don't have to run tp-collect
97
+ Typingpool::App.record_approved_hits_in_assignments_file(assignments, [hit])
98
+ Typingpool::App.create_transcript(project, assignments)
99
+ else
100
+ hits_needing_decision.push(hit)
101
+ hits_needing_decision_count += 1
102
+ end
103
+ end #hits.each do...
104
+ if hits_needing_decision.count > 0
105
+ project_with_hits_needing_decision.push({project: project, hits: hits_needing_decision})
106
+ end
107
+ end #Typingpool::App::find_projects_waiting_for_hits.each do ...
78
108
  choices = %w(approve reject quit skip)
109
+ hits_decided_count = 0
79
110
  catch :quitting do
80
- project_hits = Typingpool::App.find_projects_waiting_for_hits(hits, config)
81
- all_hits = project_hits.map{|hash| hash[:hits] }.flatten
82
- i = 0
83
- project_hits.each do |hash|
84
- hits = hash[:hits]
85
- project = hash[:project]
111
+ project_with_hits_needing_decision.each do |project_with_hits|
112
+ hits = project_with_hits[:hits]
113
+ project = project_with_hits[:project]
86
114
  assignments = Typingpool::App.assignments_file_for_sandbox_status(options[:sandbox], project)
87
- hits.sort!{|a, b| a.url <=> b.url }
88
115
  hits.each do |hit|
89
- i += 1
116
+ hits_decided_count += 1
90
117
  say(cli_bold("\nTranscript for: ") + hit.url)
91
118
  project_info = cli_bold("Project: ") + project.name
92
119
  if project.local.subtitle
@@ -106,8 +133,8 @@ catch :quitting do
106
133
  prompt << cli_reverse('[') + prompt.pop + cli_reverse(']')
107
134
  prompt = prompt.join(cli_reverse(', '))
108
135
  prompt += cli_reverse('? ')
109
- prompt += cli_reverse("(#{i}/#{all_hits.count}) ")
110
-
136
+ prompt += cli_reverse("(#{hits_decided_count}/#{hits_needing_decision_count}) ")
137
+
111
138
  choice=nil
112
139
  until choice
113
140
  input = ask(prompt)
@@ -117,15 +144,15 @@ catch :quitting do
117
144
  say("Invalid selection '#{input}'.")
118
145
  end
119
146
  end #until choice
120
-
147
+
121
148
  case choice
122
149
  when 'approve'
123
150
  begin
124
151
  hit.assignment.at_amazon.approve!
125
152
  rescue RTurk::InvalidRequest => exception
126
- #assignment may have passed its approval deadline since
127
- #the session started and has been auto approved. In that
128
- #case, add to the transcript; no need to tell the user.
153
+ #assignment may have passed its approval deadline since
154
+ #the session started and has been auto approved. In that
155
+ #case, add to the transcript; no need to tell the user.
129
156
  unless exception.message.match(/AWS.MechanicalTurk.InvalidAssignmentState\b.+\bstatus of:\s*Submitted/i)
130
157
  #different issue than auto approval; raise exception
131
158
  raise exception
@@ -161,9 +188,8 @@ catch :quitting do
161
188
  say(cli_bold("Skipping\n"))
162
189
  next
163
190
  end #case choice
164
- end #hits.each_with_index
165
-
166
- end #find_projects_waiting_for(...) do
191
+ end #hits.each do....
192
+ end # project_with_hits_needing_decision.each do
167
193
  end #catch :quitting do
168
194
 
169
195
  #Put project path on STDOUT so script can be pipelined, e.g.
@@ -1,71 +1,18 @@
1
1
  module Typingpool
2
2
  require 'minitest'
3
- require 'typingpool/app/test'
4
-
3
+ require 'typingpool/utility/test'
4
+
5
5
  class Test < Minitest::Test
6
+ include Utility::Test
7
+
6
8
  class << self
7
9
  attr_accessor :live
8
10
  attr_accessor :record
9
-
10
- def app_dir
11
- Utility.app_dir
12
- end
13
-
14
11
  end #class << self
15
12
 
16
13
  self.record = ARGV.delete('--record')
17
14
  self.live = ARGV.delete('--live')
18
15
 
19
- def fixtures_dir
20
- File.join(Utility.lib_dir, 'test', 'fixtures')
21
- end
22
-
23
- def audio_dir
24
- File.join(fixtures_dir, 'audio')
25
- end
26
-
27
- def vcr_dir
28
- File.join(fixtures_dir, 'vcr')
29
- end
30
-
31
- def delete_vcr_fixture(fixture_name)
32
- fixture_path = File.join(vcr_dir, [fixture_name, '.yml'].join)
33
- File.delete(fixture_path) if File.exist? fixture_path
34
- end
35
-
36
- def cleared_vcr_fixture_path_for(fixture_name)
37
- if Typingpool::Test.record
38
- delete_vcr_fixture(fixture_name)
39
- end
40
- if (Typingpool::Test.record || not(Typingpool::Test.live))
41
- File.join(vcr_dir, fixture_name)
42
- end
43
- end
44
-
45
- def with_vcr(fixture_name, config, opts={})
46
- if fixture = cleared_vcr_fixture_path_for(fixture_name)
47
- read_only = not(Typingpool::Test.record)
48
- Typingpool::App.vcr_load(fixture, config, read_only, opts)
49
- end
50
- begin
51
- yield
52
- ensure
53
- Typingpool::App.vcr_stop
54
- end
55
- end
56
-
57
- def config
58
- if File.exist?(File.expand_path(Config.default_file))
59
- Config.file
60
- else
61
- Config.from_bundled_template
62
- end
63
- end
64
-
65
- def amazon_credentials?(config=self.config)
66
- config.amazon && config.amazon.key && config.amazon.secret
67
- end
68
-
69
16
  def skip_with_message(reason, skipping_what='')
70
17
  skipping_what = " #{skipping_what}" unless skipping_what.empty?
71
18
  skip ("Skipping#{skipping_what}: #{reason}")
@@ -78,10 +25,6 @@ module Typingpool
78
25
  end
79
26
  end
80
27
 
81
- def s3_credentials?(config)
82
- amazon_credentials?(config) && config.amazon.bucket
83
- end
84
-
85
28
  def skip_if_no_s3_credentials(skipping_what='', config=self.config)
86
29
  if not (skip_if_no_amazon_credentials(skipping_what, config))
87
30
  if not(s3_credentials?(config))
@@ -90,10 +33,6 @@ module Typingpool
90
33
  end #if not(skip_if_no_amazon_credentials...)
91
34
  end
92
35
 
93
- def sftp_credentials?(config)
94
- config.sftp && config.sftp.user && config.sftp.host && config.sftp.url
95
- end
96
-
97
36
  def skip_if_no_sftp_credentials(skipping_what='', config=self.config)
98
37
  if not(sftp_credentials?(config))
99
38
  skip_with_message('No SFTP credentials', skipping_what)
@@ -110,67 +49,6 @@ module Typingpool
110
49
  end #if not(s3_credentials?...
111
50
  end
112
51
 
113
- def add_goodbye_message(msg)
114
- at_exit do
115
- STDERR.puts msg
116
- end
117
- end
118
-
119
- def dummy_config(number=1)
120
- Typingpool::Config.file(File.join(fixtures_dir, "config-#{number}"))
121
- end
122
-
123
-
124
- def project_default
125
- Hash[
126
- :config_filename => '.config',
127
- :subtitle => "Typingpool's test interview transcription",
128
- :title => "Typingpool's Test & Interview",
129
- :chunks => '0:22',
130
- :unusual => ['Hack Day', 'Sunnyvale', 'Chad D'],
131
- :voice => ['Ryan', 'Havi, hacker'],
132
- ]
133
- end
134
-
135
-
136
- def in_temp_dir
137
- Typingpool::Utility.in_temp_dir{|dir| yield(dir) }
138
- end
139
-
140
- def working_url?(*args)
141
- Typingpool::Utility.working_url?(*args)
142
- end
143
-
144
-
145
- def works_eventually?(max_seconds=10, min_tries=2)
146
- start = Time.now.to_i
147
- tries = 0
148
- wait = 0
149
- until ((tries >= min_tries) && ((Time.now.to_i + wait - start) >= max_seconds)) do
150
- sleep wait
151
- return true if yield
152
- wait = wait > 0 ? wait * 2 : 1
153
- tries += 1
154
- end
155
- false
156
- end
157
-
158
- def working_url_eventually?(url, max_seconds=10, min_tries=2, max_redirects=6)
159
- works_eventually?(max_seconds, min_tries) do
160
- working_url?(url, max_redirects)
161
- end
162
- end
163
-
164
- def broken_url_eventually?(url, max_seconds=10, min_tries=2, max_redirects=6)
165
- works_eventually?(max_seconds, min_tries) do
166
- not(working_url?(url, max_redirects))
167
- end
168
- end
169
-
170
- def fetch_url(*args)
171
- Typingpool::Utility.fetch_url(*args)
172
- end
173
-
174
52
  require 'typingpool/test/script'
175
53
  end #Test
176
54
  end #Typingpool